Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/game_character.h
Original file line number Diff line number Diff line change
Expand Up @@ -1151,6 +1151,8 @@ inline bool Game_Character::IsAnimPaused() const {
}

inline void Game_Character::SetAnimPaused(bool value) {
if (GetType() == Player && data()->anim_paused != value)
GMI().MainPlayerChangedAnimState(value);
data()->anim_paused = value;
}

Expand Down
17 changes: 17 additions & 0 deletions src/multiplayer/game_multiplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,18 @@ void Game_Multiplayer::InitConnection() {
}
Web_API::OnPlayerSystemUpdated(p.name, p.id);
});
connection.RegisterHandler<AnimCtrlPacket>("anc", [this] (AnimCtrlPacket& p) {
if (players.find(p.id) == players.end()) return;
auto& player = players[p.id];
switch (p.cmd) {
case Messages::AnimStart:
player.ch->SetAnimPaused(false);
break;
case Messages::AnimStop:
player.ch->SetAnimPaused(true);
break;
}
});
connection.RegisterHandler<SEPacket>("se", [this] (SEPacket& p) {
if (players.find(p.id) == players.end()) return;
if (settings.enable_sounds) {
Expand Down Expand Up @@ -634,6 +646,11 @@ void Game_Multiplayer::MainPlayerTriggeredEvent(int event_id, bool action) {
}
}

void Game_Multiplayer::MainPlayerChangedAnimState(bool stopping) {
auto msg = stopping ? Messages::AnimStop : Messages::AnimStart;
connection.SendPacketAsync<Messages::C2S::AnimCtrlPacket>(msg);
}

void Game_Multiplayer::SystemGraphicChanged(std::string_view sys) {
connection.SendPacketAsync<SysNamePacket>(ToString(sys));
Web_API::OnUpdateSystemGraphic(ToString(sys));
Expand Down
1 change: 1 addition & 0 deletions src/multiplayer/game_multiplayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class Game_Multiplayer {
void MainPlayerChangedSpriteHidden(bool hidden);
void MainPlayerTeleported(int map_id, int x, int y);
void MainPlayerTriggeredEvent(int event_id, bool action);
void MainPlayerChangedAnimState(bool stopping);
void SystemGraphicChanged(std::string_view sys);
void SePlayed(const lcf::rpg::Sound& sound);
bool IsPictureSynced(int pic_id, std::string_view pic_name);
Expand Down
22 changes: 22 additions & 0 deletions src/multiplayer/messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
#include "../game_pictures.h"

namespace Messages {

enum AnimCommands {
AnimStop,
AnimStart,
};

namespace S2C {
using S2CPacket = Multiplayer::S2CPacket;
using PL = Multiplayer::Connection::ParameterList;
Expand Down Expand Up @@ -186,6 +192,14 @@ namespace S2C {
const std::string name;
};

class AnimCtrlPacket : public PlayerPacket {
public:
AnimCtrlPacket(const PL& v)
: PlayerPacket(v.at(0)),
cmd((AnimCommands) Decode<int>(v.at(1))) {}
const AnimCommands cmd;
};

class SEPacket : public PlayerPacket {
public:
static lcf::rpg::Sound BuildSound(const PL& v) {
Expand Down Expand Up @@ -439,6 +453,14 @@ namespace C2S {
int spd;
};

class AnimCtrlPacket : public C2SPacket {
public:
AnimCtrlPacket(AnimCommands _cmd) : C2SPacket("anc"), cmd(_cmd) {}
std::string ToBytes() const override { return Build((int) cmd); }
protected:
AnimCommands cmd;
};

class SpritePacket : public C2SPacket {
public:
SpritePacket(std::string _n, int _i) : C2SPacket("spr"),
Expand Down
Loading