diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-01-23 20:41:50 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-01-23 20:41:50 +0300 |
commit | bac1df3b9ac0e3327e8de812793d0a18cfd64cba (patch) | |
tree | 46cf157684952f5aeccd59875917abb222024df8 /src/net/tmwa | |
parent | 7d60bf1c04fce4ed16144aece76e594e0e217960 (diff) | |
download | plus-bac1df3b9ac0e3327e8de812793d0a18cfd64cba.tar.gz plus-bac1df3b9ac0e3327e8de812793d0a18cfd64cba.tar.bz2 plus-bac1df3b9ac0e3327e8de812793d0a18cfd64cba.tar.xz plus-bac1df3b9ac0e3327e8de812793d0a18cfd64cba.zip |
Add moving camera commands from npc.
Diffstat (limited to 'src/net/tmwa')
-rw-r--r-- | src/net/tmwa/network.cpp | 2 | ||||
-rw-r--r-- | src/net/tmwa/npchandler.cpp | 52 | ||||
-rw-r--r-- | src/net/tmwa/npchandler.h | 2 |
3 files changed, 48 insertions, 8 deletions
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp index 08ba1db10..31329eafb 100644 --- a/src/net/tmwa/network.cpp +++ b/src/net/tmwa/network.cpp @@ -83,7 +83,7 @@ short packet_lengths[] = -1, -1, 20, 10, 32, 9, 34, 14, 2, 6, 48, 56, -1, 4, 5, 10, // #0x0200 26, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 10, 0, 0, 0, - 2, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; diff --git a/src/net/tmwa/npchandler.cpp b/src/net/tmwa/npchandler.cpp index 5e305070e..c395eb1b8 100644 --- a/src/net/tmwa/npchandler.cpp +++ b/src/net/tmwa/npchandler.cpp @@ -25,6 +25,7 @@ #include "localplayer.h" #include "gui/npcdialog.h" +#include "gui/viewport.h" #include "net/messagein.h" #include "net/net.h" @@ -97,7 +98,7 @@ void NpcHandler::handleMessage(Net::MessageIn &msg) break; case SMSG_NPC_COMMAND: - processNpcCommand(msg); + processNpcCommand(msg, npcId); break; default: @@ -239,13 +240,52 @@ int NpcHandler::getNpc(Net::MessageIn &msg, bool haveLength) return npcId; } -void NpcHandler::processNpcCommand(Net::MessageIn &msg) +void NpcHandler::processNpcCommand(Net::MessageIn &msg, int npcId) { const int cmd = msg.readInt16(); - if (cmd == 0) - mRequestLang = true; - else - logger->log("unknown npc command: %d", cmd); + switch (cmd) + { + case 0: + mRequestLang = true; + break; + + case 1: + if (viewport) + viewport->moveCameraToActor(npcId); + break; + + case 2: + if (viewport) + { + const int id = msg.readInt32(); + const int x = msg.readInt16(); + const int y = msg.readInt16(); + if (!id) + viewport->moveCameraToPosition(x, y); + else + viewport->moveCameraToActor(id, x, y); + } + break; + + case 3: + if (viewport) + viewport->returnCamera(); + break; + + case 4: + if (viewport) + { + msg.readInt32(); // id + const int x = msg.readInt16(); + const int y = msg.readInt16(); + viewport->moveCameraRelative(x, y); + } + break; + + default: + logger->log("unknown npc command: %d", cmd); + break; + } } void NpcHandler::processLangReuqest(Net::MessageIn &msg A_UNUSED, int npcId) diff --git a/src/net/tmwa/npchandler.h b/src/net/tmwa/npchandler.h index 648b1e5d9..1cfcacb20 100644 --- a/src/net/tmwa/npchandler.h +++ b/src/net/tmwa/npchandler.h @@ -66,7 +66,7 @@ class NpcHandler : public MessageHandler, public Ea::NpcHandler int getNpc(Net::MessageIn &msg, bool haveLength); - void processNpcCommand(Net::MessageIn &msg); + void processNpcCommand(Net::MessageIn &msg, int npcId); void processLangReuqest(Net::MessageIn &msg, int npcId); |