1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-19 21:13:05 +01:00

Add more peep stats for plugins

This commit is contained in:
Ted John
2020-05-08 12:39:47 +01:00
parent 49e062ae5d
commit fa0dd4e0d6
2 changed files with 334 additions and 0 deletions

View File

@@ -16,6 +16,8 @@
# include "Duktape.hpp"
# include "ScriptEngine.h"
# include <algorithm>
namespace OpenRCT2::Scripting
{
class ScEntity
@@ -30,6 +32,12 @@ namespace OpenRCT2::Scripting
}
private:
int32_t id_get() const
{
auto entity = GetEntity();
return entity != nullptr ? entity->sprite_index : 0;
}
std::string type_get() const
{
auto entity = GetEntity();
@@ -113,6 +121,7 @@ namespace OpenRCT2::Scripting
public:
static void Register(duk_context* ctx)
{
dukglue_register_property(ctx, &ScEntity::id_get, nullptr, "id");
dukglue_register_property(ctx, &ScEntity::type_get, nullptr, "type");
dukglue_register_property(ctx, &ScEntity::x_get, &ScEntity::x_set, "x");
dukglue_register_property(ctx, &ScEntity::y_get, &ScEntity::y_set, "y");
@@ -129,6 +138,21 @@ namespace OpenRCT2::Scripting
}
private:
std::string name_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->GetName() : std::string();
}
void name_set(const std::string& value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->SetName(value);
}
}
uint8_t tshirtColour_get() const
{
auto peep = GetPeep();
@@ -143,6 +167,7 @@ namespace OpenRCT2::Scripting
peep->tshirt_colour = value;
}
}
uint8_t trousersColour_get() const
{
auto peep = GetPeep();
@@ -158,6 +183,220 @@ namespace OpenRCT2::Scripting
}
}
uint8_t energy_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->energy : 0;
}
void energy_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->energy = value;
}
}
uint8_t energyTarget_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->energy_target : 0;
}
void energyTarget_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->energy_target = value;
}
}
uint8_t happiness_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->happiness : 0;
}
void happiness_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->happiness = value;
}
}
uint8_t happinessTarget_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->happiness_target : 0;
}
void happinessTarget_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->happiness_target = value;
}
}
uint8_t nausea_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->nausea : 0;
}
void nausea_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->nausea = value;
}
}
uint8_t nauseaTarget_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->nausea_target : 0;
}
void nauseaTarget_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->nausea_target = value;
}
}
uint8_t hunger_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->hunger : 0;
}
void hunger_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->hunger = value;
}
}
uint8_t thirst_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->thirst : 0;
}
void thirst_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->thirst = value;
}
}
uint8_t toilet_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->toilet : 0;
}
void toilet_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->toilet = value;
}
}
uint8_t mass_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->mass : 0;
}
void mass_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->mass = value;
}
}
uint8_t minIntensity_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->intensity & 0x0F : 0;
}
void minIntensity_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
auto minIntensity = std::min<uint8_t>(value, 15);
auto maxIntensity = peep->intensity >> 4;
peep->intensity = (maxIntensity << 4) | minIntensity;
}
}
uint8_t maxIntensity_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->intensity >> 4 : 0;
}
void maxIntensity_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
auto minIntensity = peep->intensity & 0x0F;
auto maxIntensity = std::min<uint8_t>(value, 15);
peep->intensity = (maxIntensity << 4) | minIntensity;
}
}
uint8_t nauseaTolerance_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->nausea_tolerance : 0;
}
void nauseaTolerance_set(uint8_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->nausea_tolerance = std::min<uint8_t>(value, 3);
}
}
int32_t cash_get() const
{
auto peep = GetPeep();
return peep != nullptr ? peep->cash_in_pocket : 0;
}
void cash_set(int32_t value)
{
ThrowIfGameStateNotMutable();
auto peep = GetPeep();
if (peep != nullptr)
{
peep->cash_in_pocket = std::max(0, value);
}
}
Peep* GetPeep() const
{
return get_sprite(_id)->AsPeep();
@@ -167,8 +406,23 @@ namespace OpenRCT2::Scripting
static void Register(duk_context* ctx)
{
dukglue_set_base_class<ScEntity, ScPeep>(ctx);
dukglue_register_property(ctx, &ScPeep::name_get, &ScPeep::name_set, "name");
dukglue_register_property(ctx, &ScPeep::tshirtColour_get, &ScPeep::tshirtColour_set, "tshirtColour");
dukglue_register_property(ctx, &ScPeep::trousersColour_get, &ScPeep::trousersColour_set, "trousersColour");
dukglue_register_property(ctx, &ScPeep::energy_get, &ScPeep::energy_set, "energy");
dukglue_register_property(ctx, &ScPeep::energyTarget_get, &ScPeep::energyTarget_set, "energyTarget");
dukglue_register_property(ctx, &ScPeep::happiness_get, &ScPeep::happiness_set, "happiness");
dukglue_register_property(ctx, &ScPeep::happinessTarget_get, &ScPeep::happinessTarget_set, "happinessTarget");
dukglue_register_property(ctx, &ScPeep::nausea_get, &ScPeep::nausea_set, "nausea");
dukglue_register_property(ctx, &ScPeep::nauseaTarget_get, &ScPeep::nauseaTarget_set, "nauseaTarget");
dukglue_register_property(ctx, &ScPeep::hunger_get, &ScPeep::hunger_set, "hunger");
dukglue_register_property(ctx, &ScPeep::thirst_get, &ScPeep::thirst_set, "thirst");
dukglue_register_property(ctx, &ScPeep::toilet_get, &ScPeep::toilet_set, "toilet");
dukglue_register_property(ctx, &ScPeep::mass_get, &ScPeep::mass_set, "mass");
dukglue_register_property(ctx, &ScPeep::minIntensity_get, &ScPeep::minIntensity_set, "minIntensity");
dukglue_register_property(ctx, &ScPeep::maxIntensity_get, &ScPeep::maxIntensity_set, "maxIntensity");
dukglue_register_property(ctx, &ScPeep::nauseaTolerance_get, &ScPeep::nauseaTolerance_set, "nauseaTolerance");
dukglue_register_property(ctx, &ScPeep::cash_get, &ScPeep::cash_set, "cash");
}
};