Browse Source

inventory trait

opengl-renderer-broken
Martin Dørum 4 years ago
parent
commit
f1cb802ee1

+ 3
- 0
libswan/include/swan/traits/BodyTrait.h View File

@@ -12,6 +12,7 @@ namespace BodyTrait {
class Body;
class HasBody {
public:
virtual ~HasBody() = default;
virtual Body &getBody() = 0;
};

@@ -27,6 +28,8 @@ struct Bounds {

class Body {
public:
virtual ~Body() = default;

virtual Bounds getBounds() = 0;
virtual void move(Vec2 rel) = 0;
virtual void moveTo(Vec2 pos) = 0;

+ 32
- 2
libswan/include/swan/traits/InventoryTrait.h View File

@@ -1,21 +1,51 @@
#pragma once

#include <vector>

#include "../Vector2.h"
#include "../ItemStack.h"

namespace Swan {

class ItemStack;

namespace InventoryTrait {

class Inventory;
class HasInventory {
public:
virtual ~HasInventory() = default;
virtual Inventory &getInventory() = 0;
};

class Inventory {
public:
virtual ~Inventory() = default;

virtual int size() = 0;
virtual ItemStack &get(int slot) = 0;
virtual ItemStack insert(ItemStack stack, int slot = 0) = 0;
};

class BasicInventory: public Inventory {
public:
BasicInventory(int size): size_(size) {}

int size() override { return size_; }

ItemStack &get(int slot) {
if (slot < size_)
return content_[slot];
return ItemStack();
}

ItemStack insert(ItemStack stack) {
for (int i = 0; !stack.empty() && i < size_; ++i)
stack = content_[i].insert(stack);
return stack;
}

private:
int size_;
std::vector<ItemStack> content_(size_);
};

}

Loading…
Cancel
Save