add resetting

This commit is contained in:
David Markowitz 2025-04-02 23:37:06 -07:00
parent e1913ffc9f
commit 51e4273a53
7 changed files with 40 additions and 0 deletions

View File

@ -20,6 +20,17 @@ ModelComponent::ModelComponent(Entity* parent) : Component(parent) {
m_userModelID = m_Parent->GetVarAs<LWOOBJID>(u"userModelID"); m_userModelID = m_Parent->GetVarAs<LWOOBJID>(u"userModelID");
RegisterMsg(MessageType::Game::REQUEST_USE, this, &ModelComponent::OnRequestUse); RegisterMsg(MessageType::Game::REQUEST_USE, this, &ModelComponent::OnRequestUse);
RegisterMsg(MessageType::Game::RESET_MODEL_TO_DEFAULTS, this, &ModelComponent::OnResetModelToDefaults);
}
bool ModelComponent::OnResetModelToDefaults(GameMessages::GameMsg& msg) {
auto& reset = static_cast<GameMessages::ResetModelToDefaults&>(msg);
for (auto& behavior : m_Behaviors) behavior.HandleMsg(reset);
GameMessages::UnSmash unsmash;
unsmash.target = GetParent()->GetObjectID();
unsmash.duration = 0.0f;
unsmash.Send(UNASSIGNED_SYSTEM_ADDRESS);
return true;
} }
bool ModelComponent::OnRequestUse(GameMessages::GameMsg& msg) { bool ModelComponent::OnRequestUse(GameMessages::GameMsg& msg) {

View File

@ -33,6 +33,7 @@ public:
void Update(float deltaTime) override; void Update(float deltaTime) override;
bool OnRequestUse(GameMessages::GameMsg& msg); bool OnRequestUse(GameMessages::GameMsg& msg);
bool OnResetModelToDefaults(GameMessages::GameMsg& msg);
void Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) override; void Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) override;

View File

@ -262,6 +262,9 @@ void PropertyManagementComponent::OnStartBuilding() {
auto* modelComponent = model->GetComponent<ModelComponent>(); auto* modelComponent = model->GetComponent<ModelComponent>();
if (modelComponent) modelComponent->Pause(); if (modelComponent) modelComponent->Pause();
Game::entityManager->SerializeEntity(model); Game::entityManager->SerializeEntity(model);
GameMessages::ResetModelToDefaults reset;
reset.target = modelID;
model->HandleMsg(reset);
} }
} }
} }
@ -285,6 +288,9 @@ void PropertyManagementComponent::OnFinishBuilding() {
auto* modelComponent = model->GetComponent<ModelComponent>(); auto* modelComponent = model->GetComponent<ModelComponent>();
if (modelComponent) modelComponent->Resume(); if (modelComponent) modelComponent->Resume();
Game::entityManager->SerializeEntity(model); Game::entityManager->SerializeEntity(model);
GameMessages::ResetModelToDefaults reset;
reset.target = modelID;
model->HandleMsg(reset);
} }
} }
} }

View File

@ -829,6 +829,10 @@ namespace GameMessages {
int32_t soundID{ -1 }; int32_t soundID{ -1 };
}; };
struct ResetModelToDefaults : public GameMsg {
ResetModelToDefaults() : GameMsg(MessageType::Game::RESET_MODEL_TO_DEFAULTS) {}
};
}; };
#endif // GAMEMESSAGES_H #endif // GAMEMESSAGES_H

View File

@ -93,6 +93,12 @@ void PropertyBehavior::HandleMsg(GameMessages::RequestUse& msg) {
m_States[m_ActiveState].HandleMsg(msg); m_States[m_ActiveState].HandleMsg(msg);
} }
template<>
void PropertyBehavior::HandleMsg(GameMessages::ResetModelToDefaults& msg) {
m_ActiveState = BehaviorState::HOME_STATE;
for (auto& state : m_States | std::views::values) state.HandleMsg(msg);
}
void PropertyBehavior::SendBehaviorListToClient(AMFArrayValue& args) const { void PropertyBehavior::SendBehaviorListToClient(AMFArrayValue& args) const {
args.Insert("id", std::to_string(m_BehaviorId)); args.Insert("id", std::to_string(m_BehaviorId));
args.Insert("name", m_Name); args.Insert("name", m_Name);

View File

@ -122,6 +122,11 @@ void State::HandleMsg(GameMessages::RequestUse& msg) {
for (auto& strip : m_Strips) strip.HandleMsg(msg); for (auto& strip : m_Strips) strip.HandleMsg(msg);
} }
template<>
void State::HandleMsg(GameMessages::ResetModelToDefaults& msg) {
for (auto& strip : m_Strips) strip.HandleMsg(msg);
}
bool State::IsEmpty() const { bool State::IsEmpty() const {
for (const auto& strip : m_Strips) { for (const auto& strip : m_Strips) {
if (!strip.IsEmpty()) return false; if (!strip.IsEmpty()) return false;

View File

@ -88,6 +88,13 @@ void Strip::HandleMsg(GameMessages::RequestUse& msg) {
} }
} }
template<>
void Strip::HandleMsg(GameMessages::ResetModelToDefaults& msg) {
m_WaitingForAction = false;
m_PausedTime = 0.0f;
m_NextActionIndex = 0;
}
void Strip::IncrementAction() { void Strip::IncrementAction() {
if (m_Actions.empty()) return; if (m_Actions.empty()) return;
m_NextActionIndex++; m_NextActionIndex++;