mirror of https://github.com/OpenRCT2/OpenRCT2.git
Move ScVehicle into its own files
This commit is contained in:
parent
82451b031a
commit
33e2878d2d
|
@ -772,6 +772,8 @@
|
|||
43D56A4FA1734F25995F4968 /* ScPark.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AB8D336AB654D0280549A89 /* ScPark.hpp */; };
|
||||
0AFABA9549854247A5C61D52 /* ScScenario.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9F55F2291284217BA0E4E51 /* ScScenario.hpp */; };
|
||||
F8A3BFA6806D448B86F1FF6A /* ScTile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 22D7DD798F054A068273739B /* ScTile.hpp */; };
|
||||
73FB2E7C254144D9BAE4925A /* ScVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B734D45D6B1D45E89AD2E6CE /* ScVehicle.cpp */; };
|
||||
D274ADAB9B644AC581EA2299 /* ScVehicle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E2C4C07B668487DA3493122 /* ScVehicle.hpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
|
@ -1846,6 +1848,8 @@
|
|||
9AB8D336AB654D0280549A89 /* ScPark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScPark.hpp; path = src/openrct2/scripting/bindings/world/ScPark.hpp; sourceTree = SOURCE_ROOT; };
|
||||
A9F55F2291284217BA0E4E51 /* ScScenario.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScScenario.hpp; path = src/openrct2/scripting/bindings/world/ScScenario.hpp; sourceTree = SOURCE_ROOT; };
|
||||
22D7DD798F054A068273739B /* ScTile.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScTile.hpp; path = src/openrct2/scripting/bindings/world/ScTile.hpp; sourceTree = SOURCE_ROOT; };
|
||||
B734D45D6B1D45E89AD2E6CE /* ScVehicle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScVehicle.cpp; path = src/openrct2/scripting/bindings/entity/ScVehicle.cpp; sourceTree = SOURCE_ROOT; };
|
||||
8E2C4C07B668487DA3493122 /* ScVehicle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScVehicle.hpp; path = src/openrct2/scripting/bindings/entity/ScVehicle.hpp; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
@ -1977,20 +1981,20 @@
|
|||
93DFD03324521C19001FCBAF /* HookEngine.h */,
|
||||
93DFD03F24521C19001FCBAF /* Plugin.cpp */,
|
||||
93DFD03124521C19001FCBAF /* Plugin.h */,
|
||||
93DFD03724521C19001FCBAF /* ScConfiguration.hpp */,
|
||||
93DFD03C24521C19001FCBAF /* ScConsole.hpp */,
|
||||
93DFD03E24521C19001FCBAF /* ScContext.hpp */,
|
||||
93DFD04124521C19001FCBAF /* ScDate.hpp */,
|
||||
93DFD03924521C19001FCBAF /* ScDisposable.hpp */,
|
||||
93DFD03A24521C19001FCBAF /* ScEntity.hpp */,
|
||||
93DFD04224521C19001FCBAF /* ScMap.hpp */,
|
||||
93DFD03424521C19001FCBAF /* ScNetwork.hpp */,
|
||||
93DFD03224521C19001FCBAF /* ScObject.hpp */,
|
||||
93DFD03D24521C19001FCBAF /* ScPark.hpp */,
|
||||
93DFD04024521C19001FCBAF /* ScRide.hpp */,
|
||||
93DFD03724521C19001FCBAF,
|
||||
93DFD03C24521C19001FCBAF,
|
||||
93DFD03E24521C19001FCBAF,
|
||||
93DFD04124521C19001FCBAF,
|
||||
93DFD03924521C19001FCBAF,
|
||||
93DFD03A24521C19001FCBAF,
|
||||
93DFD04224521C19001FCBAF,
|
||||
93DFD03424521C19001FCBAF,
|
||||
93DFD03224521C19001FCBAF,
|
||||
93DFD03D24521C19001FCBAF,
|
||||
93DFD04024521C19001FCBAF,
|
||||
93DFD03824521C19001FCBAF /* ScriptEngine.cpp */,
|
||||
93DFD04324521C19001FCBAF /* ScriptEngine.h */,
|
||||
93DFD03624521C19001FCBAF /* ScTile.hpp */,
|
||||
93DFD03624521C19001FCBAF,
|
||||
);
|
||||
path = scripting;
|
||||
sourceTree = "<group>";
|
||||
|
@ -3359,6 +3363,8 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
6DF61461D47C40CF92019B24 /* ScEntity.hpp */,
|
||||
B734D45D6B1D45E89AD2E6CE /* ScVehicle.cpp */,
|
||||
8E2C4C07B668487DA3493122 /* ScVehicle.hpp */,
|
||||
);
|
||||
name = entity;
|
||||
sourceTree = "<group>";
|
||||
|
@ -3556,6 +3562,7 @@
|
|||
43D56A4FA1734F25995F4968 /* ScPark.hpp in Headers */,
|
||||
0AFABA9549854247A5C61D52 /* ScScenario.hpp in Headers */,
|
||||
F8A3BFA6806D448B86F1FF6A /* ScTile.hpp in Headers */,
|
||||
D274ADAB9B644AC581EA2299 /* ScVehicle.hpp in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -4361,6 +4368,7 @@
|
|||
E73A781EBC3C440A99D59821 /* EntityTweener.cpp in Sources */,
|
||||
0746674FA0794ABF86E406A1 /* Litter.cpp in Sources */,
|
||||
B9B6F97CE24E4A559C7BBA0A /* RideConstruction.cpp in Sources */,
|
||||
73FB2E7C254144D9BAE4925A /* ScVehicle.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
@ -405,6 +405,7 @@
|
|||
<ClInclude Include="scenario\Scenario.h" />
|
||||
<ClInclude Include="scenario\ScenarioRepository.h" />
|
||||
<ClInclude Include="scenario\ScenarioSources.h" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScVehicle.hpp" />
|
||||
<ClInclude Include="scripting\Duktape.hpp" />
|
||||
<ClInclude Include="scripting\HookEngine.h" />
|
||||
<ClInclude Include="scripting\Plugin.h" />
|
||||
|
@ -849,6 +850,7 @@
|
|||
<ClCompile Include="scenario\Scenario.cpp" />
|
||||
<ClCompile Include="scenario\ScenarioRepository.cpp" />
|
||||
<ClCompile Include="scenario\ScenarioSources.cpp" />
|
||||
<ClCompile Include="scripting\bindings\entity\ScVehicle.cpp" />
|
||||
<ClCompile Include="scripting\HookEngine.cpp" />
|
||||
<ClCompile Include="scripting\Plugin.cpp" />
|
||||
<ClCompile Include="scripting\ScriptEngine.cpp" />
|
||||
|
|
|
@ -0,0 +1,463 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-2021 OpenRCT2 developers
|
||||
*
|
||||
* For a complete list of all authors, please refer to contributors.md
|
||||
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "ScVehicle.hpp"
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static const DukEnumMap<Vehicle::Status> VehicleStatusMap({
|
||||
{ "moving_to_end_of_station", Vehicle::Status::MovingToEndOfStation },
|
||||
{ "waiting_for_passengers", Vehicle::Status::WaitingForPassengers },
|
||||
{ "waiting_to_depart", Vehicle::Status::WaitingToDepart },
|
||||
{ "departing", Vehicle::Status::Departing },
|
||||
{ "travelling", Vehicle::Status::Travelling },
|
||||
{ "arriving", Vehicle::Status::Arriving },
|
||||
{ "unloading_passengers", Vehicle::Status::UnloadingPassengers },
|
||||
{ "travelling_boat", Vehicle::Status::TravellingBoat },
|
||||
{ "crashing", Vehicle::Status::Crashing },
|
||||
{ "crashed", Vehicle::Status::Crashed },
|
||||
{ "travelling_dodgems", Vehicle::Status::TravellingDodgems },
|
||||
{ "swinging", Vehicle::Status::Swinging },
|
||||
{ "rotating", Vehicle::Status::Rotating },
|
||||
{ "ferris_wheel_rotating", Vehicle::Status::FerrisWheelRotating },
|
||||
{ "simulator_operating", Vehicle::Status::SimulatorOperating },
|
||||
{ "showing_film", Vehicle::Status::ShowingFilm },
|
||||
{ "space_rings_operating", Vehicle::Status::SpaceRingsOperating },
|
||||
{ "top_spin_operating", Vehicle::Status::TopSpinOperating },
|
||||
{ "haunted_house_operating", Vehicle::Status::HauntedHouseOperating },
|
||||
{ "doing_circus_show", Vehicle::Status::DoingCircusShow },
|
||||
{ "crooked_house_operating", Vehicle::Status::CrookedHouseOperating },
|
||||
{ "waiting_for_cable_lift", Vehicle::Status::WaitingForCableLift },
|
||||
{ "travelling_cable_lift", Vehicle::Status::TravellingCableLift },
|
||||
{ "stopping", Vehicle::Status::Stopping },
|
||||
{ "waiting_for_passengers_17", Vehicle::Status::WaitingForPassengers17 },
|
||||
{ "waiting_to_start", Vehicle::Status::WaitingToStart },
|
||||
{ "starting", Vehicle::Status::Starting },
|
||||
{ "operating_1a", Vehicle::Status::Operating1A },
|
||||
{ "stopping_1b", Vehicle::Status::Stopping1B },
|
||||
{ "unloading_passengers_1c", Vehicle::Status::UnloadingPassengers1C },
|
||||
{ "stopped_by_block_brake", Vehicle::Status::StoppedByBlockBrakes },
|
||||
});
|
||||
|
||||
ScVehicle::ScVehicle(uint16_t id)
|
||||
: ScEntity(id)
|
||||
{
|
||||
}
|
||||
|
||||
void ScVehicle::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_set_base_class<ScEntity, ScVehicle>(ctx);
|
||||
dukglue_register_property(ctx, &ScVehicle::ride_get, &ScVehicle::ride_set, "ride");
|
||||
dukglue_register_property(ctx, &ScVehicle::rideObject_get, &ScVehicle::rideObject_set, "rideObject");
|
||||
dukglue_register_property(ctx, &ScVehicle::vehicleObject_get, &ScVehicle::vehicleObject_set, "vehicleObject");
|
||||
dukglue_register_property(ctx, &ScVehicle::spriteType_get, &ScVehicle::spriteType_set, "spriteType");
|
||||
dukglue_register_property(ctx, &ScVehicle::numSeats_get, &ScVehicle::numSeats_set, "numSeats");
|
||||
dukglue_register_property(ctx, &ScVehicle::nextCarOnTrain_get, &ScVehicle::nextCarOnTrain_set, "nextCarOnTrain");
|
||||
dukglue_register_property(
|
||||
ctx, &ScVehicle::previousCarOnRide_get, &ScVehicle::previousCarOnRide_set, "previousCarOnRide");
|
||||
dukglue_register_property(ctx, &ScVehicle::nextCarOnRide_get, &ScVehicle::nextCarOnRide_set, "nextCarOnRide");
|
||||
dukglue_register_property(ctx, &ScVehicle::currentStation_get, &ScVehicle::currentStation_set, "currentStation");
|
||||
dukglue_register_property(ctx, &ScVehicle::mass_get, &ScVehicle::mass_set, "mass");
|
||||
dukglue_register_property(ctx, &ScVehicle::acceleration_get, &ScVehicle::acceleration_set, "acceleration");
|
||||
dukglue_register_property(ctx, &ScVehicle::velocity_get, &ScVehicle::velocity_set, "velocity");
|
||||
dukglue_register_property(ctx, &ScVehicle::bankRotation_get, &ScVehicle::bankRotation_set, "bankRotation");
|
||||
dukglue_register_property(ctx, &ScVehicle::colours_get, &ScVehicle::colours_set, "colours");
|
||||
dukglue_register_property(ctx, &ScVehicle::trackLocation_get, &ScVehicle::trackLocation_set, "trackLocation");
|
||||
dukglue_register_property(ctx, &ScVehicle::trackProgress_get, nullptr, "trackProgress");
|
||||
dukglue_register_property(ctx, &ScVehicle::remainingDistance_get, nullptr, "remainingDistance");
|
||||
dukglue_register_property(
|
||||
ctx, &ScVehicle::poweredAcceleration_get, &ScVehicle::poweredAcceleration_set, "poweredAcceleration");
|
||||
dukglue_register_property(ctx, &ScVehicle::poweredMaxSpeed_get, &ScVehicle::poweredMaxSpeed_set, "poweredMaxSpeed");
|
||||
dukglue_register_property(ctx, &ScVehicle::status_get, &ScVehicle::status_set, "status");
|
||||
dukglue_register_property(ctx, &ScVehicle::guests_get, nullptr, "peeps");
|
||||
dukglue_register_property(ctx, &ScVehicle::guests_get, nullptr, "guests");
|
||||
dukglue_register_property(ctx, &ScVehicle::gForces_get, nullptr, "gForces");
|
||||
dukglue_register_method(ctx, &ScVehicle::travelBy, "travelBy");
|
||||
}
|
||||
|
||||
Vehicle* ScVehicle::GetVehicle() const
|
||||
{
|
||||
return ::GetEntity<Vehicle>(_id);
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::rideObject_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->ride_subtype : 0;
|
||||
}
|
||||
void ScVehicle::rideObject_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->ride_subtype = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::vehicleObject_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->vehicle_type : 0;
|
||||
}
|
||||
void ScVehicle::vehicleObject_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->vehicle_type = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::spriteType_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->Pitch : 0;
|
||||
}
|
||||
void ScVehicle::spriteType_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->Pitch = value;
|
||||
}
|
||||
}
|
||||
|
||||
ride_id_t ScVehicle::ride_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->ride : 0;
|
||||
}
|
||||
void ScVehicle::ride_set(ride_id_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->ride = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::numSeats_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->num_seats & VEHICLE_SEAT_NUM_MASK : 0;
|
||||
}
|
||||
void ScVehicle::numSeats_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->num_seats &= ~VEHICLE_SEAT_NUM_MASK;
|
||||
vehicle->num_seats |= value & VEHICLE_SEAT_NUM_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScVehicle::nextCarOnTrain_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL)
|
||||
{
|
||||
return ToDuk<int32_t>(ctx, vehicle->next_vehicle_on_train);
|
||||
}
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
void ScVehicle::nextCarOnTrain_set(DukValue value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
if (value.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
vehicle->next_vehicle_on_train = static_cast<uint16_t>(value.as_int());
|
||||
}
|
||||
else
|
||||
{
|
||||
vehicle->next_vehicle_on_train = SPRITE_INDEX_NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t ScVehicle::previousCarOnRide_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->prev_vehicle_on_ride : 0;
|
||||
}
|
||||
void ScVehicle::previousCarOnRide_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->prev_vehicle_on_ride = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t ScVehicle::nextCarOnRide_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->next_vehicle_on_ride : 0;
|
||||
}
|
||||
void ScVehicle::nextCarOnRide_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->next_vehicle_on_ride = value;
|
||||
}
|
||||
}
|
||||
|
||||
StationIndex ScVehicle::currentStation_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->current_station : 0;
|
||||
}
|
||||
void ScVehicle::currentStation_set(StationIndex value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->current_station = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t ScVehicle::mass_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->mass : 0;
|
||||
}
|
||||
void ScVehicle::mass_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->mass = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScVehicle::acceleration_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->acceleration : 0;
|
||||
}
|
||||
void ScVehicle::acceleration_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->acceleration = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScVehicle::velocity_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->velocity : 0;
|
||||
}
|
||||
void ScVehicle::velocity_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->velocity = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::bankRotation_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->bank_rotation : 0;
|
||||
}
|
||||
void ScVehicle::bankRotation_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->bank_rotation = value;
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScVehicle::colours_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
VehicleColour colours;
|
||||
colours.Body = vehicle->colours.body_colour;
|
||||
colours.Trim = vehicle->colours.trim_colour;
|
||||
colours.Ternary = vehicle->colours_extended;
|
||||
return ToDuk<VehicleColour>(ctx, colours);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
void ScVehicle::colours_set(const DukValue& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
auto colours = FromDuk<VehicleColour>(value);
|
||||
vehicle->colours.body_colour = colours.Body;
|
||||
vehicle->colours.trim_colour = colours.Trim;
|
||||
vehicle->colours_extended = colours.Ternary;
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScVehicle::trackLocation_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
auto coords = CoordsXYZD(vehicle->TrackLocation, vehicle->GetTrackDirection());
|
||||
return ToDuk<CoordsXYZD>(ctx, coords);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
void ScVehicle::trackLocation_set(const DukValue& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
auto coords = FromDuk<CoordsXYZD>(value);
|
||||
vehicle->TrackLocation = CoordsXYZ(coords.x, coords.y, coords.z);
|
||||
vehicle->SetTrackDirection(coords.direction);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t ScVehicle::trackProgress_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->track_progress : 0;
|
||||
}
|
||||
|
||||
int32_t ScVehicle::remainingDistance_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->remaining_distance : 0;
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::poweredAcceleration_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->powered_acceleration : 0;
|
||||
}
|
||||
void ScVehicle::poweredAcceleration_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->powered_acceleration = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScVehicle::poweredMaxSpeed_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
return vehicle != nullptr ? vehicle->speed : 0;
|
||||
}
|
||||
void ScVehicle::poweredMaxSpeed_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->speed = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string ScVehicle::status_get() const
|
||||
{
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
return std::string(VehicleStatusMap[vehicle->status]);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
void ScVehicle::status_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->status = VehicleStatusMap[value];
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<DukValue> ScVehicle::guests_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
std::vector<DukValue> result;
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
size_t len = 0;
|
||||
for (size_t i = 0; i < std::size(vehicle->peep); i++)
|
||||
{
|
||||
auto peep = vehicle->peep[i];
|
||||
if (peep == SPRITE_INDEX_NULL)
|
||||
{
|
||||
result.push_back(ToDuk(ctx, nullptr));
|
||||
}
|
||||
else
|
||||
{
|
||||
result.push_back(ToDuk<int32_t>(ctx, peep));
|
||||
len = i + 1;
|
||||
}
|
||||
}
|
||||
result.resize(len);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
DukValue ScVehicle::gForces_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
GForces gForces = vehicle->GetGForces();
|
||||
return ToDuk<GForces>(ctx, gForces);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void ScVehicle::travelBy(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto vehicle = GetVehicle();
|
||||
if (vehicle != nullptr)
|
||||
{
|
||||
vehicle->MoveRelativeDistance(value);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,96 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-2021 OpenRCT2 developers
|
||||
*
|
||||
* For a complete list of all authors, please refer to contributors.md
|
||||
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "ScEntity.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScVehicle : public ScEntity
|
||||
{
|
||||
public:
|
||||
ScVehicle(uint16_t id);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
Vehicle* GetVehicle() const;
|
||||
|
||||
uint8_t rideObject_get() const;
|
||||
void rideObject_set(uint8_t value);
|
||||
|
||||
uint8_t vehicleObject_get() const;
|
||||
void vehicleObject_set(uint8_t value);
|
||||
|
||||
uint8_t spriteType_get() const;
|
||||
void spriteType_set(uint8_t value);
|
||||
|
||||
ride_id_t ride_get() const;
|
||||
void ride_set(ride_id_t value);
|
||||
|
||||
uint8_t numSeats_get() const;
|
||||
void numSeats_set(uint8_t value);
|
||||
|
||||
DukValue nextCarOnTrain_get() const;
|
||||
void nextCarOnTrain_set(DukValue value);
|
||||
|
||||
uint16_t previousCarOnRide_get() const;
|
||||
void previousCarOnRide_set(uint16_t value);
|
||||
|
||||
uint16_t nextCarOnRide_get() const;
|
||||
void nextCarOnRide_set(uint16_t value);
|
||||
|
||||
StationIndex currentStation_get() const;
|
||||
void currentStation_set(StationIndex value);
|
||||
|
||||
uint16_t mass_get() const;
|
||||
void mass_set(uint16_t value);
|
||||
|
||||
int32_t acceleration_get() const;
|
||||
void acceleration_set(int32_t value);
|
||||
|
||||
int32_t velocity_get() const;
|
||||
void velocity_set(int32_t value);
|
||||
|
||||
uint8_t bankRotation_get() const;
|
||||
void bankRotation_set(uint8_t value);
|
||||
|
||||
DukValue colours_get() const;
|
||||
void colours_set(const DukValue& value);
|
||||
|
||||
DukValue trackLocation_get() const;
|
||||
void trackLocation_set(const DukValue& value);
|
||||
|
||||
uint16_t trackProgress_get() const;
|
||||
|
||||
int32_t remainingDistance_get() const;
|
||||
|
||||
uint8_t poweredAcceleration_get() const;
|
||||
void poweredAcceleration_set(uint8_t value);
|
||||
|
||||
uint8_t poweredMaxSpeed_get() const;
|
||||
void poweredMaxSpeed_set(uint8_t value);
|
||||
|
||||
std::string status_get() const;
|
||||
void status_set(const std::string& value);
|
||||
|
||||
std::vector<DukValue> guests_get() const;
|
||||
|
||||
DukValue gForces_get() const;
|
||||
|
||||
void travelBy(int32_t value);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -24,6 +24,7 @@
|
|||
# include "../../../world/Particle.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../entity/ScEntity.hpp"
|
||||
# include "../entity/ScVehicle.hpp"
|
||||
# include "../ride/ScRide.hpp"
|
||||
# include "../world/ScTile.hpp"
|
||||
|
||||
|
|
Loading…
Reference in New Issue