rename item data to count, add function to get current class name in lua
This commit is contained in:
parent
266917cc3c
commit
2a62159a61
|
@ -30,7 +30,7 @@ function UIItem:onDrop(widget, mousePos)
|
||||||
if not widget or not widget.currentDragThing then return true end
|
if not widget or not widget.currentDragThing then return true end
|
||||||
|
|
||||||
local pos = self.position
|
local pos = self.position
|
||||||
local data = widget.currentDragThing:getData()
|
local data = widget.currentDragThing:getCount()
|
||||||
if widget.currentDragThing:isStackable() and data > 1 then
|
if widget.currentDragThing:isStackable() and data > 1 then
|
||||||
widget.parsed = true
|
widget.parsed = true
|
||||||
local moveWindow = displayUI('/game/movewindow.otui')
|
local moveWindow = displayUI('/game/movewindow.otui')
|
||||||
|
|
|
@ -21,12 +21,12 @@ local function onUseWithMouseRelease(self, mousePosition, mouseButton)
|
||||||
if mouseButton == MouseLeftButton then
|
if mouseButton == MouseLeftButton then
|
||||||
local clickedWidget = Game.gameUi:recursiveGetChildByPos(mousePosition)
|
local clickedWidget = Game.gameUi:recursiveGetChildByPos(mousePosition)
|
||||||
if clickedWidget then
|
if clickedWidget then
|
||||||
if clickedWidget.getTile then
|
if clickedWidget:getClassName() == 'Tile' then
|
||||||
local tile = clickedWidget:getTile(mousePosition)
|
local tile = clickedWidget:getTile(mousePosition)
|
||||||
if tile then
|
if tile then
|
||||||
Game.useWith(Game.selectedThing, tile:getTopMultiUseThing())
|
Game.useWith(Game.selectedThing, tile:getTopMultiUseThing())
|
||||||
end
|
end
|
||||||
elseif clickedWidget.getItem and not clickedWidget:isVirtual() then
|
elseif clickedWidget:getClassName() == 'UIItem' and not clickedWidget:isVirtual() then
|
||||||
Game.useWith(Game.selectedThing, clickedWidget:getItem())
|
Game.useWith(Game.selectedThing, clickedWidget:getItem())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,7 @@ function UIMap:onDrop(widget, mousePos)
|
||||||
local tile = self:getTile(mousePos)
|
local tile = self:getTile(mousePos)
|
||||||
if not tile then return false end
|
if not tile then return false end
|
||||||
|
|
||||||
local data = widget.currentDragThing:getData()
|
local data = widget.currentDragThing:getCount()
|
||||||
if widget.currentDragThing:isStackable() and data > 1 then
|
if widget.currentDragThing:isStackable() and data > 1 then
|
||||||
widget.parsed = true
|
widget.parsed = true
|
||||||
local moveWindow = displayUI('/game/movewindow.otui')
|
local moveWindow = displayUI('/game/movewindow.otui')
|
||||||
|
|
|
@ -48,7 +48,8 @@ void LuaInterface::init()
|
||||||
|
|
||||||
// register LuaObject, the base of all other objects
|
// register LuaObject, the base of all other objects
|
||||||
registerClass<LuaObject>();
|
registerClass<LuaObject>();
|
||||||
bindClassMemberGetField<LuaObject>("use_count", &LuaObject::getUseCount);
|
bindClassMemberFunction<LuaObject>("getUseCount", &LuaObject::getUseCount);
|
||||||
|
bindClassMemberFunction<LuaObject>("getClassName", &LuaObject::getClassName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LuaInterface::terminate()
|
void LuaInterface::terminate()
|
||||||
|
@ -958,7 +959,7 @@ void LuaInterface::pushObject(const LuaObjectPtr& obj)
|
||||||
new(newUserdata(sizeof(LuaObjectPtr))) LuaObjectPtr(obj);
|
new(newUserdata(sizeof(LuaObjectPtr))) LuaObjectPtr(obj);
|
||||||
|
|
||||||
// set the userdata metatable
|
// set the userdata metatable
|
||||||
getGlobal(Fw::mkstr(obj->getLuaObjectName(), "_mt"));
|
getGlobal(Fw::mkstr(obj->getClassName(), "_mt"));
|
||||||
assert(!isNil());
|
assert(!isNil());
|
||||||
setMetatable();
|
setMetatable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,8 @@ public:
|
||||||
/// @note each userdata of this object on lua counts as a reference
|
/// @note each userdata of this object on lua counts as a reference
|
||||||
int getUseCount();
|
int getUseCount();
|
||||||
|
|
||||||
/// Returns the class name used in Lua
|
/// Returns the derived class name, its the same name used in Lua
|
||||||
virtual std::string getLuaObjectName() const {
|
virtual std::string getClassName() const {
|
||||||
// TODO: this could be cached for more performance
|
// TODO: this could be cached for more performance
|
||||||
return Fw::demangleName(typeid(*this).name());
|
return Fw::demangleName(typeid(*this).name());
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
Item::Item() : Thing()
|
Item::Item() : Thing()
|
||||||
{
|
{
|
||||||
m_data = 1;
|
m_count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemPtr Item::create(int id)
|
ItemPtr Item::create(int id)
|
||||||
|
@ -77,26 +77,26 @@ void Item::setPosition(const Position& position)
|
||||||
Thing::setPosition(position);
|
Thing::setPosition(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item::setData(uint8 data)
|
void Item::setCount(uint8 count)
|
||||||
{
|
{
|
||||||
if(isStackable() && getNumPatternsX() == 4 && getNumPatternsY() == 2) {
|
if(isStackable() && getNumPatternsX() == 4 && getNumPatternsY() == 2) {
|
||||||
if(data < 5) {
|
if(count < 5) {
|
||||||
m_xPattern = data-1;
|
m_xPattern = count-1;
|
||||||
m_yPattern = 0;
|
m_yPattern = 0;
|
||||||
}
|
}
|
||||||
else if(data < 10) {
|
else if(count < 10) {
|
||||||
m_xPattern = 0;
|
m_xPattern = 0;
|
||||||
m_yPattern = 1;
|
m_yPattern = 1;
|
||||||
}
|
}
|
||||||
else if(data < 25) {
|
else if(count < 25) {
|
||||||
m_xPattern = 1;
|
m_xPattern = 1;
|
||||||
m_yPattern = 1;
|
m_yPattern = 1;
|
||||||
}
|
}
|
||||||
else if(data < 50) {
|
else if(count < 50) {
|
||||||
m_xPattern = 2;
|
m_xPattern = 2;
|
||||||
m_yPattern = 1;
|
m_yPattern = 1;
|
||||||
}
|
}
|
||||||
else if(data <= 100) {
|
else if(count <= 100) {
|
||||||
m_xPattern = 3;
|
m_xPattern = 3;
|
||||||
m_yPattern = 1;
|
m_yPattern = 1;
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ void Item::setData(uint8 data)
|
||||||
}
|
}
|
||||||
else if(isFluid() || isFluidContainer()) {
|
else if(isFluid() || isFluidContainer()) {
|
||||||
int color = Otc::FluidTransparent;
|
int color = Otc::FluidTransparent;
|
||||||
switch(data) {
|
switch(count) {
|
||||||
case Otc::FluidNone:
|
case Otc::FluidNone:
|
||||||
color = Otc::FluidTransparent;
|
color = Otc::FluidTransparent;
|
||||||
break;
|
break;
|
||||||
|
@ -175,5 +175,5 @@ void Item::setData(uint8 data)
|
||||||
m_yPattern = (color / 4) % getNumPatternsY();
|
m_yPattern = (color / 4) % getNumPatternsY();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_data = data;
|
m_count = count;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,14 +36,14 @@ public:
|
||||||
void draw(const Point& dest, float scaleFactor);
|
void draw(const Point& dest, float scaleFactor);
|
||||||
|
|
||||||
void setPosition(const Position &position);
|
void setPosition(const Position &position);
|
||||||
void setData(uint8 data);
|
void setCount(uint8 data);
|
||||||
|
|
||||||
uint8 getData() { return m_data; }
|
uint8 getCount() { return m_count; }
|
||||||
|
|
||||||
ItemPtr asItem() { return std::static_pointer_cast<Item>(shared_from_this()); }
|
ItemPtr asItem() { return std::static_pointer_cast<Item>(shared_from_this()); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8 m_data;
|
uint8 m_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -71,7 +71,7 @@ void Map::load()
|
||||||
if(item->isStackable() || item->isFluidContainer() || item->isFluid()) {
|
if(item->isStackable() || item->isFluidContainer() || item->isFluid()) {
|
||||||
uint8 data;
|
uint8 data;
|
||||||
in.read((char*)&data, sizeof(data));
|
in.read((char*)&data, sizeof(data));
|
||||||
item->setData(data);
|
item->setCount(data);
|
||||||
}
|
}
|
||||||
addThing(item, pos, 255);
|
addThing(item, pos, 255);
|
||||||
in.read((char*)&id, sizeof(id));
|
in.read((char*)&id, sizeof(id));
|
||||||
|
@ -95,7 +95,7 @@ void Map::save()
|
||||||
id = item->getId();
|
id = item->getId();
|
||||||
out.write((char*)&id, sizeof(id));
|
out.write((char*)&id, sizeof(id));
|
||||||
if(item->isStackable() || item->isFluidContainer() || item->isFluid()) {
|
if(item->isStackable() || item->isFluidContainer() || item->isFluid()) {
|
||||||
uint8 data = item->getData();
|
uint8 data = item->getCount();
|
||||||
out.write((char*)&data, sizeof(data));
|
out.write((char*)&data, sizeof(data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,9 +108,9 @@ protected:
|
||||||
void internalDraw(const Point& dest, float scaleFactor, int layer);
|
void internalDraw(const Point& dest, float scaleFactor, int layer);
|
||||||
void updateType();
|
void updateType();
|
||||||
|
|
||||||
uint32 m_id;
|
uint32 m_id; //TODO: move to derived class to use less memory
|
||||||
Position m_position;
|
Position m_position;
|
||||||
uint8 m_xPattern, m_yPattern, m_zPattern, m_animation;
|
uint8 m_xPattern, m_yPattern, m_zPattern, m_animation; //TODO: remove this variables to use less memory
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ThingType *m_type;
|
ThingType *m_type;
|
||||||
|
|
|
@ -129,7 +129,7 @@ void OTClient::registerLuaFunctions()
|
||||||
|
|
||||||
g_lua.registerClass<Item, Thing>();
|
g_lua.registerClass<Item, Thing>();
|
||||||
g_lua.bindClassStaticFunction<Item>("create", &Item::create);
|
g_lua.bindClassStaticFunction<Item>("create", &Item::create);
|
||||||
g_lua.bindClassMemberFunction<Item>("getData", &Item::getData);
|
g_lua.bindClassMemberFunction<Item>("getCount", &Item::getCount);
|
||||||
|
|
||||||
g_lua.registerClass<Effect, Thing>();
|
g_lua.registerClass<Effect, Thing>();
|
||||||
g_lua.registerClass<Missile, Thing>();
|
g_lua.registerClass<Missile, Thing>();
|
||||||
|
|
|
@ -1125,7 +1125,7 @@ ItemPtr ProtocolGame::internalGetItem(InputMessage& msg, int id)
|
||||||
|
|
||||||
ItemPtr item = Item::create(id);
|
ItemPtr item = Item::create(id);
|
||||||
if(item->isStackable() || item->isFluidContainer() || item->isFluid())
|
if(item->isStackable() || item->isFluidContainer() || item->isFluid())
|
||||||
item->setData(msg.getU8());
|
item->setCount(msg.getU8());
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,8 +40,8 @@ void UIItem::draw()
|
||||||
g_painter.setColor(Fw::white);
|
g_painter.setColor(Fw::white);
|
||||||
m_item->draw(topLeft, 1);
|
m_item->draw(topLeft, 1);
|
||||||
|
|
||||||
if(m_font && m_item->isStackable() && m_item->getData() > 1) {
|
if(m_font && m_item->isStackable() && m_item->getCount() > 1) {
|
||||||
std::string count = Fw::tostring(m_item->getData());
|
std::string count = Fw::tostring(m_item->getCount());
|
||||||
m_font->renderText(count, Rect(m_rect.topLeft(), m_rect.bottomRight() - Point(3, 0)), Fw::AlignBottomRight, Color(231, 231, 231));
|
m_font->renderText(count, Rect(m_rect.topLeft(), m_rect.bottomRight() - Point(3, 0)), Fw::AlignBottomRight, Color(231, 231, 231));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,14 +56,19 @@ void UIItem::setItemId(int id)
|
||||||
{
|
{
|
||||||
if(!m_item)
|
if(!m_item)
|
||||||
m_item = Item::create(id);
|
m_item = Item::create(id);
|
||||||
|
else {
|
||||||
|
// remove item
|
||||||
|
if(id == 0)
|
||||||
|
m_item = nullptr;
|
||||||
else
|
else
|
||||||
m_item->setId(id);
|
m_item->setId(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIItem::setItemCount(int count)
|
void UIItem::setItemCount(int count)
|
||||||
{
|
{
|
||||||
if(m_item)
|
if(m_item)
|
||||||
m_item->setData(count);
|
m_item->setCount(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIItem::onStyleApply(const std::string& styleName, const OTMLNodePtr& styleNode)
|
void UIItem::onStyleApply(const std::string& styleName, const OTMLNodePtr& styleNode)
|
||||||
|
|
|
@ -37,9 +37,10 @@ public:
|
||||||
void setItemCount(int count);
|
void setItemCount(int count);
|
||||||
void setItem(const ItemPtr& item) { m_item = item; }
|
void setItem(const ItemPtr& item) { m_item = item; }
|
||||||
void setVirtual(bool virt) { m_virtual = virt; }
|
void setVirtual(bool virt) { m_virtual = virt; }
|
||||||
|
void clearItem() { setItemId(0); }
|
||||||
|
|
||||||
int getItemId() { return m_item->getId(); }
|
int getItemId() { return m_item ? m_item->getId() : 0; }
|
||||||
int getItemCount() { return m_item->getData(); }
|
int getItemCount() { return m_item ? m_item->getCount() : 0; }
|
||||||
ItemPtr getItem() { return m_item; }
|
ItemPtr getItem() { return m_item; }
|
||||||
bool isVirtual() { return m_virtual; }
|
bool isVirtual() { return m_virtual; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue