mirror of https://github.com/OpenRCT2/OpenRCT2.git
Implement Ride and RideObject API
This commit is contained in:
parent
91043cec51
commit
560be19cdf
|
@ -250,15 +250,19 @@ export interface Tile {
|
||||||
getElement(index: number): TileElement;
|
getElement(index: number): TileElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RideObject {
|
export interface Object {
|
||||||
readonly id: number;
|
readonly identifier: string;
|
||||||
readonly name: string;
|
readonly name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RideObject extends Object {
|
||||||
readonly description: string;
|
readonly description: string;
|
||||||
readonly capacity: string;
|
readonly capacity: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Ride {
|
export interface Ride {
|
||||||
readonly object: RideObject;
|
readonly object: RideObject;
|
||||||
|
readonly id: number;
|
||||||
type: string;
|
type: string;
|
||||||
name: string;
|
name: string;
|
||||||
excitement: number;
|
excitement: number;
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "../ride/Ride.h"
|
#include "../ride/Ride.h"
|
||||||
#include "../world/Map.h"
|
#include "../world/Map.h"
|
||||||
#include "Duktape.hpp"
|
#include "Duktape.hpp"
|
||||||
|
#include "ScRide.hpp"
|
||||||
#include "ScThing.hpp"
|
#include "ScThing.hpp"
|
||||||
#include "ScTile.hpp"
|
#include "ScTile.hpp"
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ namespace OpenRCT2::Scripting
|
||||||
|
|
||||||
int32_t rides_get()
|
int32_t rides_get()
|
||||||
{
|
{
|
||||||
return MAX_RIDES;
|
return static_cast<int32_t>(GetRideManager().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t things_get()
|
int32_t things_get()
|
||||||
|
@ -50,6 +51,20 @@ namespace OpenRCT2::Scripting
|
||||||
return MAX_SPRITES;
|
return MAX_SPRITES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<ScRide> getRide(int32_t id)
|
||||||
|
{
|
||||||
|
auto rideManager = GetRideManager();
|
||||||
|
if (id >= 0 && id < rideManager.size())
|
||||||
|
{
|
||||||
|
auto ride = rideManager[static_cast<ride_id_t>(id)];
|
||||||
|
if (ride != nullptr)
|
||||||
|
{
|
||||||
|
return std::make_shared<ScRide>(ride);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<ScTile> getTile(int32_t x, int32_t y)
|
std::shared_ptr<ScTile> getTile(int32_t x, int32_t y)
|
||||||
{
|
{
|
||||||
auto coords = TileCoordsXY(x, y).ToCoordsXY();
|
auto coords = TileCoordsXY(x, y).ToCoordsXY();
|
||||||
|
@ -75,6 +90,7 @@ namespace OpenRCT2::Scripting
|
||||||
dukglue_register_property(ctx, &ScMap::size_get, nullptr, "size");
|
dukglue_register_property(ctx, &ScMap::size_get, nullptr, "size");
|
||||||
dukglue_register_property(ctx, &ScMap::rides_get, nullptr, "rides");
|
dukglue_register_property(ctx, &ScMap::rides_get, nullptr, "rides");
|
||||||
dukglue_register_property(ctx, &ScMap::things_get, nullptr, "things");
|
dukglue_register_property(ctx, &ScMap::things_get, nullptr, "things");
|
||||||
|
dukglue_register_method(ctx, &ScMap::getRide, "getRide");
|
||||||
dukglue_register_method(ctx, &ScMap::getTile, "getTile");
|
dukglue_register_method(ctx, &ScMap::getTile, "getTile");
|
||||||
dukglue_register_method(ctx, &ScMap::getThing, "getThing");
|
dukglue_register_method(ctx, &ScMap::getThing, "getThing");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* Copyright (c) 2020 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
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../object/RideObject.h"
|
||||||
|
#include "../ride/Ride.h"
|
||||||
|
#include "Duktape.hpp"
|
||||||
|
|
||||||
|
namespace OpenRCT2::Scripting
|
||||||
|
{
|
||||||
|
class ScRideObject
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
rct_ride_entry* _entry;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ScRideObject(rct_ride_entry* entry)
|
||||||
|
{
|
||||||
|
_entry = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Register(duk_context* ctx)
|
||||||
|
{
|
||||||
|
dukglue_register_property(ctx, &id_get, nullptr, "identifier");
|
||||||
|
dukglue_register_property(ctx, &name_get, nullptr, "name");
|
||||||
|
dukglue_register_property(ctx, &description_get, nullptr, "description");
|
||||||
|
dukglue_register_property(ctx, &capacity_get, nullptr, "capacity");
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string id_get()
|
||||||
|
{
|
||||||
|
auto obj = static_cast<Object*>(_entry->obj);
|
||||||
|
if (obj != nullptr)
|
||||||
|
{
|
||||||
|
return obj->GetIdentifier();
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string name_get()
|
||||||
|
{
|
||||||
|
auto obj = static_cast<Object*>(_entry->obj);
|
||||||
|
if (obj != nullptr)
|
||||||
|
{
|
||||||
|
return obj->GetName();
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string description_get()
|
||||||
|
{
|
||||||
|
auto obj = static_cast<RideObject*>(_entry->obj);
|
||||||
|
if (obj != nullptr)
|
||||||
|
{
|
||||||
|
return obj->GetDescription();
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string capacity_get()
|
||||||
|
{
|
||||||
|
auto obj = static_cast<RideObject*>(_entry->obj);
|
||||||
|
if (obj != nullptr)
|
||||||
|
{
|
||||||
|
return obj->GetCapacity();
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ScRide
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
Ride* _ride;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ScRide(Ride* ride)
|
||||||
|
: _ride(ride)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t id_get()
|
||||||
|
{
|
||||||
|
return _ride->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<ScRideObject> object_get()
|
||||||
|
{
|
||||||
|
auto rideEntry = _ride->GetRideEntry();
|
||||||
|
if (rideEntry != nullptr)
|
||||||
|
{
|
||||||
|
return std::make_shared<ScRideObject>(rideEntry);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t type_get()
|
||||||
|
{
|
||||||
|
return _ride->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string name_get()
|
||||||
|
{
|
||||||
|
return _ride->GetName();
|
||||||
|
}
|
||||||
|
void name_set(std::string value)
|
||||||
|
{
|
||||||
|
_ride->custom_name = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t excitement_get()
|
||||||
|
{
|
||||||
|
return _ride->excitement;
|
||||||
|
}
|
||||||
|
void excitement_set(int32_t value)
|
||||||
|
{
|
||||||
|
_ride->excitement = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t intensity_get()
|
||||||
|
{
|
||||||
|
return _ride->intensity;
|
||||||
|
}
|
||||||
|
void intensity_set(int32_t value)
|
||||||
|
{
|
||||||
|
_ride->intensity = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t nausea_get()
|
||||||
|
{
|
||||||
|
return _ride->nausea;
|
||||||
|
}
|
||||||
|
void nausea_set(int32_t value)
|
||||||
|
{
|
||||||
|
_ride->nausea = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t totalCustomers_get()
|
||||||
|
{
|
||||||
|
return _ride->total_customers;
|
||||||
|
}
|
||||||
|
void totalCustomers_set(int32_t value)
|
||||||
|
{
|
||||||
|
_ride->total_customers = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Register(duk_context* ctx)
|
||||||
|
{
|
||||||
|
dukglue_register_property(ctx, &ScRide::id_get, nullptr, "id");
|
||||||
|
dukglue_register_property(ctx, &ScRide::object_get, nullptr, "object");
|
||||||
|
dukglue_register_property(ctx, &ScRide::type_get, nullptr, "type");
|
||||||
|
dukglue_register_property(ctx, &ScRide::name_get, &ScRide::name_set, "name");
|
||||||
|
dukglue_register_property(ctx, &ScRide::excitement_get, &ScRide::excitement_set, "excitement");
|
||||||
|
dukglue_register_property(ctx, &ScRide::intensity_get, &ScRide::intensity_set, "intensity");
|
||||||
|
dukglue_register_property(ctx, &ScRide::nausea_get, &ScRide::nausea_set, "nausea");
|
||||||
|
dukglue_register_property(ctx, &ScRide::totalCustomers_get, &ScRide::totalCustomers_set, "totalCustomers");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace OpenRCT2::Scripting
|
|
@ -22,6 +22,7 @@
|
||||||
#include "ScMap.hpp"
|
#include "ScMap.hpp"
|
||||||
#include "ScNetwork.hpp"
|
#include "ScNetwork.hpp"
|
||||||
#include "ScPark.hpp"
|
#include "ScPark.hpp"
|
||||||
|
#include "ScRide.hpp"
|
||||||
#include "ScThing.hpp"
|
#include "ScThing.hpp"
|
||||||
#include "ScTile.hpp"
|
#include "ScTile.hpp"
|
||||||
|
|
||||||
|
@ -67,6 +68,8 @@ void ScriptEngine::Initialise()
|
||||||
ScPark::Register(ctx);
|
ScPark::Register(ctx);
|
||||||
ScPlayer::Register(ctx);
|
ScPlayer::Register(ctx);
|
||||||
ScPlayerGroup::Register(ctx);
|
ScPlayerGroup::Register(ctx);
|
||||||
|
ScRide::Register(ctx);
|
||||||
|
ScRideObject::Register(ctx);
|
||||||
ScTile::Register(ctx);
|
ScTile::Register(ctx);
|
||||||
ScTileElement::Register(ctx);
|
ScTileElement::Register(ctx);
|
||||||
ScThing::Register(ctx);
|
ScThing::Register(ctx);
|
||||||
|
|
Loading…
Reference in New Issue