using items, just test, almost nothing done yet
This commit is contained in:
parent
578078007b
commit
3f4ad7977c
|
@ -105,7 +105,7 @@ void Game::processTextMessage(int type, const std::string& message)
|
||||||
|
|
||||||
void Game::processInventoryChange(int slot, const ItemPtr& item)
|
void Game::processInventoryChange(int slot, const ItemPtr& item)
|
||||||
{
|
{
|
||||||
g_dispatcher.addEvent([=] {
|
g_dispatcher.addEvent([slot, item] {
|
||||||
g_lua.callGlobalField("Game","onInventoryChange", slot, item);
|
g_lua.callGlobalField("Game","onInventoryChange", slot, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
class Map
|
class Map
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
enum {
|
enum {
|
||||||
PLAYER_OFFSET_X = 8,
|
PLAYER_OFFSET_X = 8,
|
||||||
PLAYER_OFFSET_Y = 6,
|
PLAYER_OFFSET_Y = 6,
|
||||||
|
@ -40,7 +41,6 @@ class Map
|
||||||
NUM_TILE_PIXELS = 32
|
NUM_TILE_PIXELS = 32
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
|
||||||
void draw(const Rect& rect);
|
void draw(const Rect& rect);
|
||||||
void clean();
|
void clean();
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
#include "localplayer.h"
|
#include "localplayer.h"
|
||||||
#include "effect.h"
|
#include "effect.h"
|
||||||
|
#include <otclient/net/protocolgame.h>
|
||||||
#include <framework/graphics/fontmanager.h>
|
#include <framework/graphics/fontmanager.h>
|
||||||
|
|
||||||
Tile::Tile(const Position& position)
|
Tile::Tile(const Position& position)
|
||||||
|
@ -228,3 +229,31 @@ bool Tile::isLookPossible()
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
/*
|
||||||
|
Get menu options
|
||||||
|
|
||||||
|
if invited to party
|
||||||
|
if creature, attack and follow
|
||||||
|
if item, use or use with
|
||||||
|
*/
|
||||||
|
|
||||||
|
void Tile::useItem()
|
||||||
|
{
|
||||||
|
// Get top item of stack priority 2 (do a function to do this later)
|
||||||
|
ThingPtr thing;
|
||||||
|
int lastStackpos = -1;
|
||||||
|
for(int stackPos = 0; stackPos < (int)m_things.size(); ++stackPos) {
|
||||||
|
int otherPriority = m_things[stackPos]->getStackPriority();
|
||||||
|
if(otherPriority == 2) {
|
||||||
|
thing = m_things[stackPos];
|
||||||
|
lastStackpos = stackPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lastStackpos != -1) {
|
||||||
|
// use this
|
||||||
|
g_game.getProtocolGame()->sendUseItem(m_position, thing->getId(), lastStackpos, 0); // 0 has something to do with container
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -53,6 +53,8 @@ public:
|
||||||
bool isFullyOpaque();
|
bool isFullyOpaque();
|
||||||
bool isLookPossible();
|
bool isLookPossible();
|
||||||
|
|
||||||
|
void useItem();
|
||||||
|
|
||||||
TilePtr asTile() { return std::static_pointer_cast<Tile>(shared_from_this()); }
|
TilePtr asTile() { return std::static_pointer_cast<Tile>(shared_from_this()); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -54,6 +54,7 @@ public:
|
||||||
void sendTurnEast();
|
void sendTurnEast();
|
||||||
void sendTurnSouth();
|
void sendTurnSouth();
|
||||||
void sendTurnWest();
|
void sendTurnWest();
|
||||||
|
void sendUseItem(const Position& position, int itemId, int stackpos, int index);
|
||||||
void sendTalk(int channelType, int channelId, const std::string& receiver, const std::string& message);
|
void sendTalk(int channelType, int channelId, const std::string& receiver, const std::string& message);
|
||||||
void sendAddVip(const std::string& name);
|
void sendAddVip(const std::string& name);
|
||||||
void sendRemoveVip(int id);
|
void sendRemoveVip(int id);
|
||||||
|
@ -140,6 +141,7 @@ private:
|
||||||
ThingPtr internalGetThing(InputMessage& msg);
|
ThingPtr internalGetThing(InputMessage& msg);
|
||||||
ItemPtr internalGetItem(InputMessage& msg, uint16 id);
|
ItemPtr internalGetItem(InputMessage& msg, uint16 id);
|
||||||
|
|
||||||
|
void addPosition(OutputMessage& msg, const Position& position);
|
||||||
Position parsePosition(InputMessage& msg);
|
Position parsePosition(InputMessage& msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -158,6 +158,17 @@ void ProtocolGame::sendTurnWest()
|
||||||
send(oMsg);
|
send(oMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::sendUseItem(const Position& position, int itemId, int stackpos, int index)
|
||||||
|
{
|
||||||
|
OutputMessage oMsg;
|
||||||
|
oMsg.addU8(Otc::ClientUseObject);
|
||||||
|
addPosition(oMsg, position);
|
||||||
|
oMsg.addU16(itemId);
|
||||||
|
oMsg.addU8(stackpos);
|
||||||
|
oMsg.addU8(index);
|
||||||
|
send(oMsg);
|
||||||
|
}
|
||||||
|
|
||||||
void ProtocolGame::sendTalk(int channelType, int channelId, const std::string& receiver, const std::string& message)
|
void ProtocolGame::sendTalk(int channelType, int channelId, const std::string& receiver, const std::string& message)
|
||||||
{
|
{
|
||||||
if(message.length() > 255 || message.length() <= 0)
|
if(message.length() > 255 || message.length() <= 0)
|
||||||
|
@ -199,3 +210,10 @@ void ProtocolGame::sendRemoveVip(int id)
|
||||||
oMsg.addU32(id);
|
oMsg.addU32(id);
|
||||||
send(oMsg);
|
send(oMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::addPosition(OutputMessage& msg, const Position& position)
|
||||||
|
{
|
||||||
|
msg.addU16(position.x);
|
||||||
|
msg.addU16(position.y);
|
||||||
|
msg.addU8(position.z);
|
||||||
|
}
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <framework/otml/otml.h>
|
#include <framework/otml/otml.h>
|
||||||
#include <framework/graphics/graphics.h>
|
#include <framework/graphics/graphics.h>
|
||||||
#include <framework/ui/uilineedit.h>
|
#include <framework/ui/uilineedit.h>
|
||||||
|
#include <otclient/core/localplayer.h>
|
||||||
|
#include <otclient/core/tile.h>
|
||||||
|
|
||||||
void UIMap::setup()
|
void UIMap::setup()
|
||||||
{
|
{
|
||||||
|
@ -141,13 +143,27 @@ void UIMap::onStyleApply(const OTMLNodePtr& styleNode)
|
||||||
|
|
||||||
bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button)
|
bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button)
|
||||||
{
|
{
|
||||||
|
if(m_mapRect.contains(mousePos)) {
|
||||||
|
Point relativeStretchMousePos = mousePos - m_mapRect.topLeft();
|
||||||
|
Size mapSize(Map::MAP_VISIBLE_WIDTH * Map::NUM_TILE_PIXELS, Map::MAP_VISIBLE_HEIGHT * Map::NUM_TILE_PIXELS);
|
||||||
|
|
||||||
|
PointF stretchFactor(m_mapRect.width() / (float)mapSize.width(), m_mapRect.height() / (float)mapSize.height());
|
||||||
|
PointF relativeMousePos = PointF(relativeStretchMousePos.x, relativeStretchMousePos.y) / stretchFactor;
|
||||||
|
|
||||||
|
PointF tilePosF = relativeMousePos / Map::NUM_TILE_PIXELS;
|
||||||
|
Position tilePos = Position(1 + (int)tilePosF.x - Map::PLAYER_OFFSET_X, 1 + (int)tilePosF.y - Map::PLAYER_OFFSET_Y, 0) + g_game.getLocalPlayer()->getPosition();
|
||||||
|
|
||||||
|
TilePtr tile = g_map.getTile(tilePos);
|
||||||
|
tile->useItem();
|
||||||
|
}
|
||||||
|
|
||||||
return UIWidget::onMousePress(mousePos, button);
|
return UIWidget::onMousePress(mousePos, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIMap::onGeometryUpdate(const Rect& oldRect, const Rect& newRect)
|
void UIMap::onGeometryUpdate(const Rect& oldRect, const Rect& newRect)
|
||||||
{
|
{
|
||||||
Rect mapRect = newRect.expanded(-m_mapMargin-1);
|
Rect mapRect = newRect.expanded(-m_mapMargin-1);
|
||||||
Size mapSize(15*32, 11*32);
|
Size mapSize(Map::MAP_VISIBLE_WIDTH * Map::NUM_TILE_PIXELS, Map::MAP_VISIBLE_HEIGHT * Map::NUM_TILE_PIXELS);
|
||||||
mapSize.scale(mapRect.size(), Fw::KeepAspectRatio);
|
mapSize.scale(mapRect.size(), Fw::KeepAspectRatio);
|
||||||
m_mapRect.setSize(mapSize);
|
m_mapRect.setSize(mapSize);
|
||||||
m_mapRect.moveCenter(newRect.center());
|
m_mapRect.moveCenter(newRect.center());
|
||||||
|
|
Loading…
Reference in New Issue