outfit window init
This commit is contained in:
parent
da3b39017d
commit
a95d0bcc1f
|
@ -74,6 +74,7 @@ SET(SOURCES src/framework/ui/uiframecounter.cpp
|
|||
|
||||
# otclient ui
|
||||
src/otclient/ui/uiitem.cpp
|
||||
src/otclient/ui/uicreature.cpp
|
||||
src/otclient/ui/uimap.cpp
|
||||
|
||||
# otclient net
|
||||
|
|
|
@ -14,5 +14,6 @@ Module
|
|||
importStyles 'styles/windows.otui'
|
||||
importStyles 'styles/listboxes.otui'
|
||||
importStyles 'styles/items.otui'
|
||||
importStyles 'styles/creatures.otui'
|
||||
return true
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
Creature < UICreature
|
||||
size: 66 66
|
||||
creature-margin: 1
|
||||
border-image:
|
||||
source: /core_styles/images/panel_flat.png
|
||||
border: 1
|
|
@ -14,4 +14,5 @@ Module
|
|||
- viplist
|
||||
- textmessage
|
||||
- chat
|
||||
- outfit
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
Outfit = {}
|
||||
|
||||
-- private variables
|
||||
local window = nil
|
||||
|
||||
-- public functions
|
||||
function Outfit.test()
|
||||
local button = UIButton.create()
|
||||
UI.root:addChild(button)
|
||||
button:setText('Set Outfit')
|
||||
button:setStyle('Button')
|
||||
button:moveTo({x = 0, y = 100})
|
||||
button:setWidth('100')
|
||||
button:setHeight('30')
|
||||
button.onClick = function() Game.openOutfitWindow() end
|
||||
end
|
||||
|
||||
function Outfit.create(creature, outfitList)
|
||||
if window ~= nil then
|
||||
Outfit.destroy()
|
||||
end
|
||||
|
||||
window = loadUI("/outfit/outfit.otui", UI.root)
|
||||
|
||||
local creatureWidget = window:getChildById('creature')
|
||||
creatureWidget:setCreature(creature)
|
||||
end
|
||||
|
||||
function Outfit.destroy()
|
||||
window:destroy()
|
||||
window = nil
|
||||
end
|
||||
|
||||
-- private functions
|
||||
|
||||
-- hooked events
|
||||
|
||||
connect(Game, { onOpenOutfitWindow = Outfit.create,
|
||||
onLogout = Outfit.destroy })
|
||||
|
||||
connect(Game, { onLogin = Outfit.test })
|
|
@ -0,0 +1,10 @@
|
|||
Module
|
||||
name: outfit
|
||||
description: Change local player outfit
|
||||
author: OTClient team
|
||||
website: https://github.com/edubart/otclient
|
||||
onLoad: |
|
||||
require 'outfit'
|
||||
return true
|
||||
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
Window
|
||||
title: Select Outfit
|
||||
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
Creature
|
||||
id: creature
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
margin.top: 30
|
||||
margin.left: 20
|
||||
|
||||
HorizontalSeparator
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: next.top
|
||||
margin.left: 16
|
||||
margin.right: 16
|
||||
margin.bottom: 10
|
||||
|
||||
Button
|
||||
id: buttonOk
|
||||
text: Ok
|
||||
width: 64
|
||||
anchors.right: next.left
|
||||
anchors.bottom: parent.bottom
|
||||
margin.bottom: 16
|
||||
margin.right: 16
|
||||
onClick: Outfit.accept()
|
||||
|
||||
Button
|
||||
id: buttonCancel
|
||||
text: Cancel
|
||||
width: 64
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
margin.bottom: 16
|
||||
margin.right: 16
|
||||
onClick: Outfit.destroy()
|
|
@ -179,3 +179,8 @@ void Game::talkPrivate(int channelType, const std::string& receiver, const std::
|
|||
|
||||
m_protocolGame->sendTalk(channelType, 0, receiver, message);
|
||||
}
|
||||
|
||||
void Game::openOutfitWindow()
|
||||
{
|
||||
m_protocolGame->sendGetOutfit();
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
void turn(Otc::Direction direction);
|
||||
void talkChannel(int channelType, int channelId, const std::string& message);
|
||||
void talkPrivate(int channelType, const std::string& receiver, const std::string& message);
|
||||
void openOutfitWindow();
|
||||
|
||||
bool isOnline() { return m_online; }
|
||||
|
||||
|
|
|
@ -50,6 +50,10 @@ public:
|
|||
virtual const ThingType& getType() = 0;
|
||||
int getAnimationPhases() { return getType().dimensions[ThingType::AnimationPhases]; }
|
||||
|
||||
void setXPattern(int xPattern) { m_xPattern = xPattern; }
|
||||
void setYPattern(int yPattern) { m_yPattern = yPattern; }
|
||||
void setZPattern(int zPattern) { m_zPattern = zPattern; }
|
||||
|
||||
ThingPtr asThing() { return std::static_pointer_cast<Thing>(shared_from_this()); }
|
||||
virtual ItemPtr asItem() { return nullptr; }
|
||||
virtual CreaturePtr asCreature() { return nullptr; }
|
||||
|
|
|
@ -56,6 +56,7 @@ public:
|
|||
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 sendGetOutfit();
|
||||
void sendAddVip(const std::string& name);
|
||||
void sendRemoveVip(int id);
|
||||
|
||||
|
|
|
@ -838,14 +838,27 @@ void ProtocolGame::parseFloorChangeDown(InputMessage& msg)
|
|||
|
||||
void ProtocolGame::parseOutfitWindow(InputMessage& msg)
|
||||
{
|
||||
internalGetOutfit(msg);
|
||||
uint8 outfitCount = msg.getU8();
|
||||
Outfit outfit = internalGetOutfit(msg);
|
||||
|
||||
typedef std::tuple<int, std::string, int> OutfitInfo;
|
||||
std::vector<OutfitInfo> outfitList;
|
||||
|
||||
uint8 outfitCount = msg.getU8();
|
||||
for(int i = 0; i < outfitCount; i++) {
|
||||
msg.getU16(); // outfit id
|
||||
msg.getString(); // outfit name
|
||||
msg.getU8(); // addons
|
||||
uint16 outfitId = msg.getU16();
|
||||
std::string outfitName = msg.getString();
|
||||
uint8 outfitAddons = msg.getU8();
|
||||
|
||||
outfitList.push_back(OutfitInfo(outfitId, outfitName, outfitAddons));
|
||||
}
|
||||
|
||||
CreaturePtr creature = CreaturePtr(new Creature);
|
||||
creature->setXPattern(2);
|
||||
creature->setOutfit(outfit);
|
||||
|
||||
g_dispatcher.addEvent([=] {
|
||||
g_lua.callGlobalField("Game", "onOpenOutfitWindow", creature, outfitList);
|
||||
});
|
||||
}
|
||||
|
||||
void ProtocolGame::parseVipState(InputMessage& msg)
|
||||
|
|
|
@ -195,6 +195,13 @@ void ProtocolGame::sendTalk(int channelType, int channelId, const std::string& r
|
|||
send(oMsg);
|
||||
}
|
||||
|
||||
void ProtocolGame::sendGetOutfit()
|
||||
{
|
||||
OutputMessage oMsg;
|
||||
oMsg.addU8(Otc::ClientGetOutfit);
|
||||
send(oMsg);
|
||||
}
|
||||
|
||||
void ProtocolGame::sendAddVip(const std::string& name)
|
||||
{
|
||||
OutputMessage oMsg;
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <otclient/net/protocollogin.h>
|
||||
#include <otclient/net/protocolgame.h>
|
||||
#include <otclient/ui/uiitem.h>
|
||||
#include <otclient/ui/uicreature.h>
|
||||
#include <otclient/ui/uimap.h>
|
||||
|
||||
void OTClient::registerLuaFunctions()
|
||||
|
@ -65,12 +66,18 @@ void OTClient::registerLuaFunctions()
|
|||
g_lua.bindClassStaticFunction<Game>("cancelLogin", std::bind(&Game::cancelLogin, &g_game));
|
||||
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
||||
g_lua.bindClassStaticFunction<Game>("isOnline", std::bind(&Game::isOnline, &g_game));
|
||||
g_lua.bindClassStaticFunction<Game>("openOutfitWindow", std::bind(&Game::openOutfitWindow, &g_game));
|
||||
|
||||
g_lua.registerClass<UIItem, UIWidget>();
|
||||
g_lua.bindClassStaticFunction<UIItem>("create", &UIItem::create<UIItem>);
|
||||
g_lua.bindClassMemberFunction<UIItem>("getItem", &UIItem::getItem);
|
||||
g_lua.bindClassMemberFunction<UIItem>("setItem", &UIItem::setItem);
|
||||
|
||||
g_lua.registerClass<UICreature, UIWidget>();
|
||||
g_lua.bindClassStaticFunction<UICreature>("create", &UICreature::create<UICreature>);
|
||||
g_lua.bindClassMemberFunction<UICreature>("getCreature", &UICreature::getCreature);
|
||||
g_lua.bindClassMemberFunction<UICreature>("setCreature", &UICreature::setCreature);
|
||||
|
||||
g_lua.registerClass<UIMap, UIWidget>();
|
||||
g_lua.bindClassStaticFunction<UIMap>("create", &UIWidget::create<UIMap>);
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "uicreature.h"
|
||||
#include <framework/otml/otml.h>
|
||||
#include <framework/graphics/graphics.h>
|
||||
|
||||
void UICreature::setup()
|
||||
{
|
||||
UIWidget::setup();
|
||||
}
|
||||
|
||||
void UICreature::render()
|
||||
{
|
||||
renderSelf();
|
||||
|
||||
if(m_creature) {
|
||||
g_graphics.bindColor(Fw::white);
|
||||
m_creature->draw(m_rect.bottomRight() - Point(32, 32) + m_creatureMargin);
|
||||
}
|
||||
|
||||
renderChildren();
|
||||
}
|
||||
|
||||
void UICreature::onStyleApply(const OTMLNodePtr& styleNode)
|
||||
{
|
||||
for(OTMLNodePtr node : styleNode->children()) {
|
||||
if(node->tag() == "creature-margin")
|
||||
m_creatureMargin = node->value<int>();
|
||||
}
|
||||
|
||||
UIWidget::onStyleApply(styleNode);
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef UICREATURE_H
|
||||
#define UICREATURE_H
|
||||
|
||||
#include "declarations.h"
|
||||
#include <framework/ui/uiwidget.h>
|
||||
#include <otclient/core/creature.h>
|
||||
|
||||
class UICreature : public UIWidget
|
||||
{
|
||||
public:
|
||||
void setup();
|
||||
void render();
|
||||
|
||||
void setCreature(const CreaturePtr& creature) { m_creature = creature; }
|
||||
CreaturePtr getCreature() { return m_creature; }
|
||||
|
||||
protected:
|
||||
virtual void onStyleApply(const OTMLNodePtr& styleNode);
|
||||
|
||||
private:
|
||||
CreaturePtr m_creature;
|
||||
int m_creatureMargin;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue