mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #15189 from ZehMatt/scripting/refactor
Re-arrange structure of scripting
This commit is contained in:
commit
a721ce30e8
|
@ -344,23 +344,11 @@
|
|||
93DFD02E24521BA0001FCBAF /* FileWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD02C24521B9F001FCBAF /* FileWatcher.h */; };
|
||||
93DFD02F24521BA0001FCBAF /* FileWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DFD02D24521BA0001FCBAF /* FileWatcher.cpp */; };
|
||||
93DFD04424521C1A001FCBAF /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03124521C19001FCBAF /* Plugin.h */; };
|
||||
93DFD04524521C1A001FCBAF /* ScObject.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03224521C19001FCBAF /* ScObject.hpp */; };
|
||||
93DFD04624521C1A001FCBAF /* HookEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03324521C19001FCBAF /* HookEngine.h */; };
|
||||
93DFD04724521C1A001FCBAF /* ScNetwork.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03424521C19001FCBAF /* ScNetwork.hpp */; };
|
||||
93DFD04824521C1A001FCBAF /* HookEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DFD03524521C19001FCBAF /* HookEngine.cpp */; };
|
||||
93DFD04924521C1A001FCBAF /* ScTile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03624521C19001FCBAF /* ScTile.hpp */; };
|
||||
93DFD04A24521C1A001FCBAF /* ScConfiguration.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03724521C19001FCBAF /* ScConfiguration.hpp */; };
|
||||
93DFD04B24521C1A001FCBAF /* ScriptEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DFD03824521C19001FCBAF /* ScriptEngine.cpp */; };
|
||||
93DFD04C24521C1A001FCBAF /* ScDisposable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03924521C19001FCBAF /* ScDisposable.hpp */; };
|
||||
93DFD04D24521C1A001FCBAF /* ScEntity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03A24521C19001FCBAF /* ScEntity.hpp */; };
|
||||
93DFD04E24521C1A001FCBAF /* Duktape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03B24521C19001FCBAF /* Duktape.hpp */; };
|
||||
93DFD04F24521C1A001FCBAF /* ScConsole.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03C24521C19001FCBAF /* ScConsole.hpp */; };
|
||||
93DFD05024521C1A001FCBAF /* ScPark.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03D24521C19001FCBAF /* ScPark.hpp */; };
|
||||
93DFD05124521C1A001FCBAF /* ScContext.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD03E24521C19001FCBAF /* ScContext.hpp */; };
|
||||
93DFD05224521C1A001FCBAF /* Plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DFD03F24521C19001FCBAF /* Plugin.cpp */; };
|
||||
93DFD05324521C1A001FCBAF /* ScRide.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD04024521C19001FCBAF /* ScRide.hpp */; };
|
||||
93DFD05424521C1A001FCBAF /* ScDate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD04124521C19001FCBAF /* ScDate.hpp */; };
|
||||
93DFD05524521C1A001FCBAF /* ScMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD04224521C19001FCBAF /* ScMap.hpp */; };
|
||||
93DFD05624521C1A001FCBAF /* ScriptEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DFD04324521C19001FCBAF /* ScriptEngine.h */; };
|
||||
93F6004C213DD7DD00EEB83E /* TerrainSurfaceObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93F60049213DD7DC00EEB83E /* TerrainSurfaceObject.cpp */; };
|
||||
93F6004D213DD7DD00EEB83E /* TerrainEdgeObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93F6004A213DD7DC00EEB83E /* TerrainEdgeObject.cpp */; };
|
||||
|
@ -768,6 +756,46 @@
|
|||
0746674FA0794ABF86E406A1 /* Litter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D3DD6CD73F5421880280D9D /* Litter.cpp */; };
|
||||
B9B6F97CE24E4A559C7BBA0A /* RideConstruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BCCA2EF0F5A40D5B83A83AC /* RideConstruction.cpp */; };
|
||||
317B766A750D4365B22A1682 /* EnumMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BA2317BF6FB54E328DEB7055 /* EnumMap.hpp */; };
|
||||
8C801369C7E44292A5348DFB /* ScEntity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6DF61461D47C40CF92019B24 /* ScEntity.hpp */; };
|
||||
BCCE3EDC711F4F0587F1C359 /* ScCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F68EA974AF941BCAD28A04F /* ScCheats.hpp */; };
|
||||
F396A397541149D6ACA290D2 /* ScConfiguration.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FD736DB2EE1C4C888977BCAF /* ScConfiguration.hpp */; };
|
||||
2EEDD899BAF94706ACED5F6D /* ScConsole.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E4B39FC3EB9C4EFDA82F42D7 /* ScConsole.hpp */; };
|
||||
74E3377F2FC04316959F1AED /* ScContext.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DAF78631DD8D45E3B3C2FDD1 /* ScContext.hpp */; };
|
||||
A10C0EE3C2614B53AFB6ED35 /* ScDisposable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8865B46C60FD434CAD50A2F4 /* ScDisposable.hpp */; };
|
||||
05F6EF4AAFEC4BA4A454046B /* ScNetwork.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BDEB01D4A8144819A82E3CB4 /* ScNetwork.hpp */; };
|
||||
AC4C9184C93A4113A6BEEC60 /* ScSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4DD54E62DAE4E4889E26DF6 /* ScSocket.hpp */; };
|
||||
A962C2EF5FA6429C92318441 /* ScObject.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24F9DF02868247738D05CC40 /* ScObject.hpp */; };
|
||||
E09450B2440E465CBCE62DEB /* ScRide.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AD97B712FDF7454CADC7A328 /* ScRide.hpp */; };
|
||||
A2EC8BBCB8AD49ECB1C22F9D /* ScClimate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C2031084A4E462EB6E5BDE4 /* ScClimate.hpp */; };
|
||||
2AE59B9E2E4D496286970915 /* ScDate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 613ADB50EF0F4D73A66E4538 /* ScDate.hpp */; };
|
||||
7930E9462549403181C5D164 /* ScMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74CDED6B7EF041458032681A /* ScMap.hpp */; };
|
||||
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 */; };
|
||||
BC39D70B9A2249E4B14E99FA /* ScGuest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DB792F5A06849BDAF95B28F /* ScGuest.cpp */; };
|
||||
428B1DADD66C4829894AD0A1 /* ScGuest.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CAFBD63A702F42F2BDB53A39 /* ScGuest.hpp */; };
|
||||
D7B575F07C4D4E42887C72AA /* ScPeep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B63F2F751A3427C9CE9B214 /* ScPeep.hpp */; };
|
||||
7A06F880718F49CA9FB71F52 /* ScStaff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3EFAF58A62B44C4B887559B7 /* ScStaff.cpp */; };
|
||||
9DF65BAE250C4307AE5794DB /* ScStaff.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C30AB6C640464647ABE90EC4 /* ScStaff.hpp */; };
|
||||
8E6484F6C43644F4B644D361 /* ScLitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C67B84754D4FEFA3678AA9 /* ScLitter.cpp */; };
|
||||
359328A3A65D49578912CA40 /* ScLitter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C30388F4F6D34DF59EF7072C /* ScLitter.hpp */; };
|
||||
149D1ACFD5FA42938364C843 /* ScPlayerGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA49170D35604E6A986D09D9 /* ScPlayerGroup.cpp */; };
|
||||
97C222A2A4F543E9AEC3912B /* ScPlayerGroup.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 887EBCE57E4A48C88191346E /* ScPlayerGroup.hpp */; };
|
||||
E436DE7807A74621B7BF2276 /* ScPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E2A4181A243F4B77BA36ACE2 /* ScPlayer.cpp */; };
|
||||
2D0A43F28D5747C9B617F342 /* ScPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A08C451885D4D419FB4820D /* ScPlayer.hpp */; };
|
||||
F08623EA69E7456DB79F3E06 /* ScNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 200F0E6CAD3B41499A3CFC36 /* ScNetwork.cpp */; };
|
||||
CDC72A71A28542F4AD73A91C /* ScRideStation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FE124ED4F4E18BCF79042 /* ScRideStation.cpp */; };
|
||||
63858E295E3F451283987982 /* ScRideStation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1260386710BF4EA4B4FC31D3 /* ScRideStation.hpp */; };
|
||||
705A4B342C7D4F38B26BAFA4 /* ScRide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3B00C9900ED42AFA72764ED /* ScRide.cpp */; };
|
||||
2B8F76B32C944D3C97F0FFAF /* ScMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4BE60702D7549488A32CC0B /* ScMap.cpp */; };
|
||||
BE55C1C86BFE4A0DA61260E2 /* ScParkMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1939C9C3CFDB4FB6BA5DE47E /* ScParkMessage.cpp */; };
|
||||
AD5EC8B5EBF240B3874BC581 /* ScParkMessage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56E37ADCDBD440BD8AC35446 /* ScParkMessage.hpp */; };
|
||||
887B0043454440BAB322A9E8 /* ScPark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C4DE37309A4B5F965D7718 /* ScPark.cpp */; };
|
||||
5B6E418A2F264952BA0CC2F2 /* ScTileElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43D18154E96444749737E3F6 /* ScTileElement.cpp */; };
|
||||
DEC539DE402F4B8993E4C357 /* ScTileElement.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4C26E211F1D44C9ADA70740 /* ScTileElement.hpp */; };
|
||||
6C90BE01D190493295071B23 /* ScTile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B67E36A8620400CA70FBA49 /* ScTile.cpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
|
@ -1462,23 +1490,11 @@
|
|||
93DFD02C24521B9F001FCBAF /* FileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileWatcher.h; sourceTree = "<group>"; };
|
||||
93DFD02D24521BA0001FCBAF /* FileWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileWatcher.cpp; sourceTree = "<group>"; };
|
||||
93DFD03124521C19001FCBAF /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
|
||||
93DFD03224521C19001FCBAF /* ScObject.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScObject.hpp; sourceTree = "<group>"; };
|
||||
93DFD03324521C19001FCBAF /* HookEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HookEngine.h; sourceTree = "<group>"; };
|
||||
93DFD03424521C19001FCBAF /* ScNetwork.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScNetwork.hpp; sourceTree = "<group>"; };
|
||||
93DFD03524521C19001FCBAF /* HookEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HookEngine.cpp; sourceTree = "<group>"; };
|
||||
93DFD03624521C19001FCBAF /* ScTile.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScTile.hpp; sourceTree = "<group>"; };
|
||||
93DFD03724521C19001FCBAF /* ScConfiguration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScConfiguration.hpp; sourceTree = "<group>"; };
|
||||
93DFD03824521C19001FCBAF /* ScriptEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptEngine.cpp; sourceTree = "<group>"; };
|
||||
93DFD03924521C19001FCBAF /* ScDisposable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScDisposable.hpp; sourceTree = "<group>"; };
|
||||
93DFD03A24521C19001FCBAF /* ScEntity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScEntity.hpp; sourceTree = "<group>"; };
|
||||
93DFD03B24521C19001FCBAF /* Duktape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Duktape.hpp; sourceTree = "<group>"; };
|
||||
93DFD03C24521C19001FCBAF /* ScConsole.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScConsole.hpp; sourceTree = "<group>"; };
|
||||
93DFD03D24521C19001FCBAF /* ScPark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScPark.hpp; sourceTree = "<group>"; };
|
||||
93DFD03E24521C19001FCBAF /* ScContext.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScContext.hpp; sourceTree = "<group>"; };
|
||||
93DFD03F24521C19001FCBAF /* Plugin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Plugin.cpp; sourceTree = "<group>"; };
|
||||
93DFD04024521C19001FCBAF /* ScRide.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScRide.hpp; sourceTree = "<group>"; };
|
||||
93DFD04124521C19001FCBAF /* ScDate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScDate.hpp; sourceTree = "<group>"; };
|
||||
93DFD04224521C19001FCBAF /* ScMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ScMap.hpp; sourceTree = "<group>"; };
|
||||
93DFD04324521C19001FCBAF /* ScriptEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptEngine.h; sourceTree = "<group>"; };
|
||||
93F60048213DD7DC00EEB83E /* TerrainSurfaceObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TerrainSurfaceObject.h; sourceTree = "<group>"; };
|
||||
93F60049213DD7DC00EEB83E /* TerrainSurfaceObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TerrainSurfaceObject.cpp; sourceTree = "<group>"; };
|
||||
|
@ -1838,6 +1854,46 @@
|
|||
9D3DD6CD73F5421880280D9D /* Litter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Litter.cpp; path = src/openrct2/world/Litter.cpp; sourceTree = SOURCE_ROOT; };
|
||||
6BCCA2EF0F5A40D5B83A83AC /* RideConstruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RideConstruction.cpp; path = src/openrct2/ride/RideConstruction.cpp; sourceTree = SOURCE_ROOT; };
|
||||
BA2317BF6FB54E328DEB7055 /* EnumMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = EnumMap.hpp; path = src/openrct2/core/EnumMap.hpp; sourceTree = SOURCE_ROOT; };
|
||||
6DF61461D47C40CF92019B24 /* ScEntity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScEntity.hpp; path = src/openrct2/scripting/bindings/entity/ScEntity.hpp; sourceTree = SOURCE_ROOT; };
|
||||
3F68EA974AF941BCAD28A04F /* ScCheats.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScCheats.hpp; path = src/openrct2/scripting/bindings/game/ScCheats.hpp; sourceTree = SOURCE_ROOT; };
|
||||
FD736DB2EE1C4C888977BCAF /* ScConfiguration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScConfiguration.hpp; path = src/openrct2/scripting/bindings/game/ScConfiguration.hpp; sourceTree = SOURCE_ROOT; };
|
||||
E4B39FC3EB9C4EFDA82F42D7 /* ScConsole.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScConsole.hpp; path = src/openrct2/scripting/bindings/game/ScConsole.hpp; sourceTree = SOURCE_ROOT; };
|
||||
DAF78631DD8D45E3B3C2FDD1 /* ScContext.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScContext.hpp; path = src/openrct2/scripting/bindings/game/ScContext.hpp; sourceTree = SOURCE_ROOT; };
|
||||
8865B46C60FD434CAD50A2F4 /* ScDisposable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScDisposable.hpp; path = src/openrct2/scripting/bindings/game/ScDisposable.hpp; sourceTree = SOURCE_ROOT; };
|
||||
BDEB01D4A8144819A82E3CB4 /* ScNetwork.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScNetwork.hpp; path = src/openrct2/scripting/bindings/network/ScNetwork.hpp; sourceTree = SOURCE_ROOT; };
|
||||
D4DD54E62DAE4E4889E26DF6 /* ScSocket.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScSocket.hpp; path = src/openrct2/scripting/bindings/network/ScSocket.hpp; sourceTree = SOURCE_ROOT; };
|
||||
24F9DF02868247738D05CC40 /* ScObject.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScObject.hpp; path = src/openrct2/scripting/bindings/object/ScObject.hpp; sourceTree = SOURCE_ROOT; };
|
||||
AD97B712FDF7454CADC7A328 /* ScRide.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScRide.hpp; path = src/openrct2/scripting/bindings/ride/ScRide.hpp; sourceTree = SOURCE_ROOT; };
|
||||
0C2031084A4E462EB6E5BDE4 /* ScClimate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScClimate.hpp; path = src/openrct2/scripting/bindings/world/ScClimate.hpp; sourceTree = SOURCE_ROOT; };
|
||||
613ADB50EF0F4D73A66E4538 /* ScDate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScDate.hpp; path = src/openrct2/scripting/bindings/world/ScDate.hpp; sourceTree = SOURCE_ROOT; };
|
||||
74CDED6B7EF041458032681A /* ScMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScMap.hpp; path = src/openrct2/scripting/bindings/world/ScMap.hpp; sourceTree = SOURCE_ROOT; };
|
||||
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; };
|
||||
5DB792F5A06849BDAF95B28F /* ScGuest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScGuest.cpp; path = src/openrct2/scripting/bindings/entity/ScGuest.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CAFBD63A702F42F2BDB53A39 /* ScGuest.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScGuest.hpp; path = src/openrct2/scripting/bindings/entity/ScGuest.hpp; sourceTree = SOURCE_ROOT; };
|
||||
2B63F2F751A3427C9CE9B214 /* ScPeep.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScPeep.hpp; path = src/openrct2/scripting/bindings/entity/ScPeep.hpp; sourceTree = SOURCE_ROOT; };
|
||||
3EFAF58A62B44C4B887559B7 /* ScStaff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScStaff.cpp; path = src/openrct2/scripting/bindings/entity/ScStaff.cpp; sourceTree = SOURCE_ROOT; };
|
||||
C30AB6C640464647ABE90EC4 /* ScStaff.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScStaff.hpp; path = src/openrct2/scripting/bindings/entity/ScStaff.hpp; sourceTree = SOURCE_ROOT; };
|
||||
36C67B84754D4FEFA3678AA9 /* ScLitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScLitter.cpp; path = src/openrct2/scripting/bindings/entity/ScLitter.cpp; sourceTree = SOURCE_ROOT; };
|
||||
C30388F4F6D34DF59EF7072C /* ScLitter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScLitter.hpp; path = src/openrct2/scripting/bindings/entity/ScLitter.hpp; sourceTree = SOURCE_ROOT; };
|
||||
DA49170D35604E6A986D09D9 /* ScPlayerGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScPlayerGroup.cpp; path = src/openrct2/scripting/bindings/network/ScPlayerGroup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
887EBCE57E4A48C88191346E /* ScPlayerGroup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScPlayerGroup.hpp; path = src/openrct2/scripting/bindings/network/ScPlayerGroup.hpp; sourceTree = SOURCE_ROOT; };
|
||||
E2A4181A243F4B77BA36ACE2 /* ScPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScPlayer.cpp; path = src/openrct2/scripting/bindings/network/ScPlayer.cpp; sourceTree = SOURCE_ROOT; };
|
||||
7A08C451885D4D419FB4820D /* ScPlayer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScPlayer.hpp; path = src/openrct2/scripting/bindings/network/ScPlayer.hpp; sourceTree = SOURCE_ROOT; };
|
||||
200F0E6CAD3B41499A3CFC36 /* ScNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScNetwork.cpp; path = src/openrct2/scripting/bindings/network/ScNetwork.cpp; sourceTree = SOURCE_ROOT; };
|
||||
522FE124ED4F4E18BCF79042 /* ScRideStation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScRideStation.cpp; path = src/openrct2/scripting/bindings/ride/ScRideStation.cpp; sourceTree = SOURCE_ROOT; };
|
||||
1260386710BF4EA4B4FC31D3 /* ScRideStation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScRideStation.hpp; path = src/openrct2/scripting/bindings/ride/ScRideStation.hpp; sourceTree = SOURCE_ROOT; };
|
||||
F3B00C9900ED42AFA72764ED /* ScRide.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScRide.cpp; path = src/openrct2/scripting/bindings/ride/ScRide.cpp; sourceTree = SOURCE_ROOT; };
|
||||
E4BE60702D7549488A32CC0B /* ScMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScMap.cpp; path = src/openrct2/scripting/bindings/world/ScMap.cpp; sourceTree = SOURCE_ROOT; };
|
||||
1939C9C3CFDB4FB6BA5DE47E /* ScParkMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScParkMessage.cpp; path = src/openrct2/scripting/bindings/world/ScParkMessage.cpp; sourceTree = SOURCE_ROOT; };
|
||||
56E37ADCDBD440BD8AC35446 /* ScParkMessage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScParkMessage.hpp; path = src/openrct2/scripting/bindings/world/ScParkMessage.hpp; sourceTree = SOURCE_ROOT; };
|
||||
E9C4DE37309A4B5F965D7718 /* ScPark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScPark.cpp; path = src/openrct2/scripting/bindings/world/ScPark.cpp; sourceTree = SOURCE_ROOT; };
|
||||
43D18154E96444749737E3F6 /* ScTileElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScTileElement.cpp; path = src/openrct2/scripting/bindings/world/ScTileElement.cpp; sourceTree = SOURCE_ROOT; };
|
||||
F4C26E211F1D44C9ADA70740 /* ScTileElement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ScTileElement.hpp; path = src/openrct2/scripting/bindings/world/ScTileElement.hpp; sourceTree = SOURCE_ROOT; };
|
||||
5B67E36A8620400CA70FBA49 /* ScTile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScTile.cpp; path = src/openrct2/scripting/bindings/world/ScTile.cpp; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
@ -1963,25 +2019,26 @@
|
|||
93DFD03024521C19001FCBAF /* scripting */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
59B0CA75A27A4C5EB9EF6CA7 /* bindings */,
|
||||
93DFD03B24521C19001FCBAF /* Duktape.hpp */,
|
||||
93DFD03524521C19001FCBAF /* HookEngine.cpp */,
|
||||
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>";
|
||||
|
@ -3333,6 +3390,101 @@
|
|||
path = input;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
59B0CA75A27A4C5EB9EF6CA7 /* bindings */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EDFE9D20A43646C7981E7254 /* entity */,
|
||||
C1C271EB7D2B4A3AA23CE0E6 /* game */,
|
||||
9192A7EACCF44110BF1B89BC /* network */,
|
||||
CCCD0912DE2D444FA8DA7222 /* object */,
|
||||
0B69C59376EB45E58BA6ADF5 /* ride */,
|
||||
281760CC5B1249CBA8E771D7 /* world */,
|
||||
);
|
||||
name = bindings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
EDFE9D20A43646C7981E7254 /* entity */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6DF61461D47C40CF92019B24 /* ScEntity.hpp */,
|
||||
B734D45D6B1D45E89AD2E6CE /* ScVehicle.cpp */,
|
||||
8E2C4C07B668487DA3493122 /* ScVehicle.hpp */,
|
||||
5DB792F5A06849BDAF95B28F /* ScGuest.cpp */,
|
||||
CAFBD63A702F42F2BDB53A39 /* ScGuest.hpp */,
|
||||
2B63F2F751A3427C9CE9B214 /* ScPeep.hpp */,
|
||||
3EFAF58A62B44C4B887559B7 /* ScStaff.cpp */,
|
||||
C30AB6C640464647ABE90EC4 /* ScStaff.hpp */,
|
||||
36C67B84754D4FEFA3678AA9 /* ScLitter.cpp */,
|
||||
C30388F4F6D34DF59EF7072C /* ScLitter.hpp */,
|
||||
);
|
||||
name = entity;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C1C271EB7D2B4A3AA23CE0E6 /* game */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3F68EA974AF941BCAD28A04F /* ScCheats.hpp */,
|
||||
FD736DB2EE1C4C888977BCAF /* ScConfiguration.hpp */,
|
||||
E4B39FC3EB9C4EFDA82F42D7 /* ScConsole.hpp */,
|
||||
DAF78631DD8D45E3B3C2FDD1 /* ScContext.hpp */,
|
||||
8865B46C60FD434CAD50A2F4 /* ScDisposable.hpp */,
|
||||
);
|
||||
name = game;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9192A7EACCF44110BF1B89BC /* network */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BDEB01D4A8144819A82E3CB4 /* ScNetwork.hpp */,
|
||||
D4DD54E62DAE4E4889E26DF6 /* ScSocket.hpp */,
|
||||
DA49170D35604E6A986D09D9 /* ScPlayerGroup.cpp */,
|
||||
887EBCE57E4A48C88191346E /* ScPlayerGroup.hpp */,
|
||||
E2A4181A243F4B77BA36ACE2 /* ScPlayer.cpp */,
|
||||
7A08C451885D4D419FB4820D /* ScPlayer.hpp */,
|
||||
200F0E6CAD3B41499A3CFC36 /* ScNetwork.cpp */,
|
||||
);
|
||||
name = network;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CCCD0912DE2D444FA8DA7222 /* object */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
24F9DF02868247738D05CC40 /* ScObject.hpp */,
|
||||
);
|
||||
name = object;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0B69C59376EB45E58BA6ADF5 /* ride */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AD97B712FDF7454CADC7A328 /* ScRide.hpp */,
|
||||
522FE124ED4F4E18BCF79042 /* ScRideStation.cpp */,
|
||||
1260386710BF4EA4B4FC31D3 /* ScRideStation.hpp */,
|
||||
F3B00C9900ED42AFA72764ED /* ScRide.cpp */,
|
||||
);
|
||||
name = ride;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
281760CC5B1249CBA8E771D7 /* world */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0C2031084A4E462EB6E5BDE4 /* ScClimate.hpp */,
|
||||
613ADB50EF0F4D73A66E4538 /* ScDate.hpp */,
|
||||
74CDED6B7EF041458032681A /* ScMap.hpp */,
|
||||
9AB8D336AB654D0280549A89 /* ScPark.hpp */,
|
||||
A9F55F2291284217BA0E4E51 /* ScScenario.hpp */,
|
||||
22D7DD798F054A068273739B /* ScTile.hpp */,
|
||||
E4BE60702D7549488A32CC0B /* ScMap.cpp */,
|
||||
1939C9C3CFDB4FB6BA5DE47E /* ScParkMessage.cpp */,
|
||||
56E37ADCDBD440BD8AC35446 /* ScParkMessage.hpp */,
|
||||
E9C4DE37309A4B5F965D7718 /* ScPark.cpp */,
|
||||
43D18154E96444749737E3F6 /* ScTileElement.cpp */,
|
||||
F4C26E211F1D44C9ADA70740 /* ScTileElement.hpp */,
|
||||
5B67E36A8620400CA70FBA49 /* ScTile.cpp */,
|
||||
);
|
||||
name = world;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
|
@ -3357,7 +3509,6 @@
|
|||
66A10F8D257F1E1800DD651A /* GuestSetFlagsAction.h in Headers */,
|
||||
66A10FA7257F1E1800DD651A /* PeepPickupAction.h in Headers */,
|
||||
939A359C20C12FC800630B3F /* Paint.Sprite.h in Headers */,
|
||||
93DFD05524521C1A001FCBAF /* ScMap.hpp in Headers */,
|
||||
9308DA04209908090079EE96 /* TileElement.h in Headers */,
|
||||
C67B28152002D67A00109C93 /* Widget.h in Headers */,
|
||||
66A10F99257F1E1800DD651A /* LargeScenerySetColourAction.h in Headers */,
|
||||
|
@ -3370,7 +3521,6 @@
|
|||
C6352B851F477022006CCEE3 /* DataSerialiserTraits.h in Headers */,
|
||||
66A10F50257F1E1700DD651A /* ParkEntranceRemoveAction.h in Headers */,
|
||||
66A10F4D257F1E1700DD651A /* StaffSetNameAction.h in Headers */,
|
||||
93DFD05124521C1A001FCBAF /* ScContext.hpp in Headers */,
|
||||
66A10FD6257F1E3000DD651A /* WallRemoveAction.h in Headers */,
|
||||
939A359F20C12FDE00630B3F /* Paint.Surface.h in Headers */,
|
||||
66A10F7B257F1E1800DD651A /* MazeSetTrackAction.h in Headers */,
|
||||
|
@ -3378,14 +3528,12 @@
|
|||
66A10F53257F1E1700DD651A /* LandLowerAction.h in Headers */,
|
||||
66A10F5E257F1E1700DD651A /* LargeSceneryRemoveAction.h in Headers */,
|
||||
66A10F5D257F1E1700DD651A /* RideSetStatusAction.h in Headers */,
|
||||
93DFD05024521C1A001FCBAF /* ScPark.hpp in Headers */,
|
||||
93B4DC1625487CDF008D63FF /* Formatting.h in Headers */,
|
||||
66A10F86257F1E1800DD651A /* LoadOrQuitAction.h in Headers */,
|
||||
93DFD02E24521BA0001FCBAF /* FileWatcher.h in Headers */,
|
||||
2ADE2F28224418B2002598AF /* DataSerialiserTag.h in Headers */,
|
||||
66A10F74257F1E1800DD651A /* RideEntranceExitRemoveAction.h in Headers */,
|
||||
66A10F9A257F1E1800DD651A /* StaffFireAction.h in Headers */,
|
||||
93DFD04C24521C1A001FCBAF /* ScDisposable.hpp in Headers */,
|
||||
66A10FAC257F1E1800DD651A /* RideSetSettingAction.h in Headers */,
|
||||
2ADE2F2E224418E7002598AF /* ConversionTables.h in Headers */,
|
||||
933F2CBB20935668001B33FD /* LocalisationService.h in Headers */,
|
||||
|
@ -3399,7 +3547,6 @@
|
|||
66A10F77257F1E1800DD651A /* StaffSetOrdersAction.h in Headers */,
|
||||
2ADE2F2C224418B2002598AF /* FileIndex.hpp in Headers */,
|
||||
66A10FAF257F1E1800DD651A /* RideSetNameAction.h in Headers */,
|
||||
93DFD04A24521C1A001FCBAF /* ScConfiguration.hpp in Headers */,
|
||||
93CBA4CC20A7504500867D56 /* ImageImporter.h in Headers */,
|
||||
66A10F62257F1E1700DD651A /* SurfaceSetStyleAction.h in Headers */,
|
||||
66A10EC1257F1DF800DD651A /* FootpathAdditionRemoveAction.h in Headers */,
|
||||
|
@ -3408,11 +3555,9 @@
|
|||
66A10F96257F1E1800DD651A /* SignSetStyleAction.h in Headers */,
|
||||
2ADE2F29224418B2002598AF /* Numerics.hpp in Headers */,
|
||||
66A10FD5257F1E3000DD651A /* WaterRaiseAction.h in Headers */,
|
||||
93DFD04924521C1A001FCBAF /* ScTile.hpp in Headers */,
|
||||
936F412B24CE030F00E07BCF /* NetworkBase.h in Headers */,
|
||||
66A10EC2257F1DF800DD651A /* FootpathRemoveAction.h in Headers */,
|
||||
66A10EA3257F1DE100DD651A /* BalloonPressAction.h in Headers */,
|
||||
93DFD04524521C1A001FCBAF /* ScObject.hpp in Headers */,
|
||||
2ADE2F382244198B002598AF /* SpriteBase.h in Headers */,
|
||||
66A10EC8257F1DF800DD651A /* BannerPlaceAction.h in Headers */,
|
||||
C62D838B1FD36D6F008C04F1 /* EditorObjectSelectionSession.h in Headers */,
|
||||
|
@ -3422,17 +3567,13 @@
|
|||
66A10FD7257F1E3000DD651A /* WaterLowerAction.h in Headers */,
|
||||
939A35A220C12FFD00630B3F /* InteractiveConsole.h in Headers */,
|
||||
93CBA4C320A7502E00867D56 /* Imaging.h in Headers */,
|
||||
93DFD04D24521C1A001FCBAF /* ScEntity.hpp in Headers */,
|
||||
66A10F4E257F1E1700DD651A /* PauseToggleAction.h in Headers */,
|
||||
93DFD04E24521C1A001FCBAF /* Duktape.hpp in Headers */,
|
||||
66A10FA2257F1E1800DD651A /* LargeSceneryPlaceAction.h in Headers */,
|
||||
2ADE2F3622441960002598AF /* RideTypes.h in Headers */,
|
||||
66A10F68257F1E1800DD651A /* NetworkModifyGroupAction.h in Headers */,
|
||||
93DFD05324521C1A001FCBAF /* ScRide.hpp in Headers */,
|
||||
66A10F88257F1E1800DD651A /* SignSetNameAction.h in Headers */,
|
||||
93AE2389252F948A00CD03C3 /* Formatter.h in Headers */,
|
||||
93DFD05424521C1A001FCBAF /* ScDate.hpp in Headers */,
|
||||
93DFD04F24521C1A001FCBAF /* ScConsole.hpp in Headers */,
|
||||
66A10F91257F1E1800DD651A /* StaffHireNewAction.h in Headers */,
|
||||
9308DA05209908090079EE96 /* Surface.h in Headers */,
|
||||
66A10F9F257F1E1800DD651A /* LandBuyRightsAction.h in Headers */,
|
||||
|
@ -3455,7 +3596,6 @@
|
|||
66A10F84257F1E1800DD651A /* StaffSetPatrolAreaAction.h in Headers */,
|
||||
66A10F56257F1E1700DD651A /* SmallSceneryRemoveAction.h in Headers */,
|
||||
66A10F5C257F1E1700DD651A /* SetParkEntranceFeeAction.h in Headers */,
|
||||
93DFD04724521C1A001FCBAF /* ScNetwork.hpp in Headers */,
|
||||
66A10F8F257F1E1800DD651A /* StaffSetCostumeAction.h in Headers */,
|
||||
66A10ED5257F1DF800DD651A /* BannerSetStyleAction.h in Headers */,
|
||||
66A10F97257F1E1800DD651A /* SetCheatAction.h in Headers */,
|
||||
|
@ -3472,6 +3612,32 @@
|
|||
66A10F8B257F1E1800DD651A /* LandSmoothAction.h in Headers */,
|
||||
F42186C5840D4196981ADD16 /* EntityTweener.h in Headers */,
|
||||
317B766A750D4365B22A1682 /* EnumMap.hpp in Headers */,
|
||||
8C801369C7E44292A5348DFB /* ScEntity.hpp in Headers */,
|
||||
BCCE3EDC711F4F0587F1C359 /* ScCheats.hpp in Headers */,
|
||||
F396A397541149D6ACA290D2 /* ScConfiguration.hpp in Headers */,
|
||||
2EEDD899BAF94706ACED5F6D /* ScConsole.hpp in Headers */,
|
||||
74E3377F2FC04316959F1AED /* ScContext.hpp in Headers */,
|
||||
A10C0EE3C2614B53AFB6ED35 /* ScDisposable.hpp in Headers */,
|
||||
05F6EF4AAFEC4BA4A454046B /* ScNetwork.hpp in Headers */,
|
||||
AC4C9184C93A4113A6BEEC60 /* ScSocket.hpp in Headers */,
|
||||
A962C2EF5FA6429C92318441 /* ScObject.hpp in Headers */,
|
||||
E09450B2440E465CBCE62DEB /* ScRide.hpp in Headers */,
|
||||
A2EC8BBCB8AD49ECB1C22F9D /* ScClimate.hpp in Headers */,
|
||||
2AE59B9E2E4D496286970915 /* ScDate.hpp in Headers */,
|
||||
7930E9462549403181C5D164 /* ScMap.hpp in Headers */,
|
||||
43D56A4FA1734F25995F4968 /* ScPark.hpp in Headers */,
|
||||
0AFABA9549854247A5C61D52 /* ScScenario.hpp in Headers */,
|
||||
F8A3BFA6806D448B86F1FF6A /* ScTile.hpp in Headers */,
|
||||
D274ADAB9B644AC581EA2299 /* ScVehicle.hpp in Headers */,
|
||||
428B1DADD66C4829894AD0A1 /* ScGuest.hpp in Headers */,
|
||||
D7B575F07C4D4E42887C72AA /* ScPeep.hpp in Headers */,
|
||||
9DF65BAE250C4307AE5794DB /* ScStaff.hpp in Headers */,
|
||||
359328A3A65D49578912CA40 /* ScLitter.hpp in Headers */,
|
||||
97C222A2A4F543E9AEC3912B /* ScPlayerGroup.hpp in Headers */,
|
||||
2D0A43F28D5747C9B617F342 /* ScPlayer.hpp in Headers */,
|
||||
63858E295E3F451283987982 /* ScRideStation.hpp in Headers */,
|
||||
AD5EC8B5EBF240B3874BC581 /* ScParkMessage.hpp in Headers */,
|
||||
DEC539DE402F4B8993E4C357 /* ScTileElement.hpp in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -4277,6 +4443,20 @@
|
|||
E73A781EBC3C440A99D59821 /* EntityTweener.cpp in Sources */,
|
||||
0746674FA0794ABF86E406A1 /* Litter.cpp in Sources */,
|
||||
B9B6F97CE24E4A559C7BBA0A /* RideConstruction.cpp in Sources */,
|
||||
73FB2E7C254144D9BAE4925A /* ScVehicle.cpp in Sources */,
|
||||
BC39D70B9A2249E4B14E99FA /* ScGuest.cpp in Sources */,
|
||||
7A06F880718F49CA9FB71F52 /* ScStaff.cpp in Sources */,
|
||||
8E6484F6C43644F4B644D361 /* ScLitter.cpp in Sources */,
|
||||
149D1ACFD5FA42938364C843 /* ScPlayerGroup.cpp in Sources */,
|
||||
E436DE7807A74621B7BF2276 /* ScPlayer.cpp in Sources */,
|
||||
F08623EA69E7456DB79F3E06 /* ScNetwork.cpp in Sources */,
|
||||
CDC72A71A28542F4AD73A91C /* ScRideStation.cpp in Sources */,
|
||||
705A4B342C7D4F38B26BAFA4 /* ScRide.cpp in Sources */,
|
||||
2B8F76B32C944D3C97F0FFAF /* ScMap.cpp in Sources */,
|
||||
BE55C1C86BFE4A0DA61260E2 /* ScParkMessage.cpp in Sources */,
|
||||
887B0043454440BAB322A9E8 /* ScPark.cpp in Sources */,
|
||||
5B6E418A2F264952BA0CC2F2 /* ScTileElement.cpp in Sources */,
|
||||
6C90BE01D190493295071B23 /* ScTile.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
@ -405,26 +405,36 @@
|
|||
<ClInclude Include="scenario\Scenario.h" />
|
||||
<ClInclude Include="scenario\ScenarioRepository.h" />
|
||||
<ClInclude Include="scenario\ScenarioSources.h" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScGuest.hpp" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScLitter.hpp" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScPeep.hpp" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScStaff.hpp" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScVehicle.hpp" />
|
||||
<ClInclude Include="scripting\bindings\network\ScPlayer.hpp" />
|
||||
<ClInclude Include="scripting\bindings\network\ScPlayerGroup.hpp" />
|
||||
<ClInclude Include="scripting\bindings\ride\ScRideStation.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScParkMessage.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScTileElement.hpp" />
|
||||
<ClInclude Include="scripting\Duktape.hpp" />
|
||||
<ClInclude Include="scripting\HookEngine.h" />
|
||||
<ClInclude Include="scripting\Plugin.h" />
|
||||
<ClInclude Include="scripting\ScCheats.hpp" />
|
||||
<ClInclude Include="scripting\ScClimate.hpp" />
|
||||
<ClInclude Include="scripting\ScConfiguration.hpp" />
|
||||
<ClInclude Include="scripting\ScConsole.hpp" />
|
||||
<ClInclude Include="scripting\ScContext.hpp" />
|
||||
<ClInclude Include="scripting\ScDate.hpp" />
|
||||
<ClInclude Include="scripting\ScDisposable.hpp" />
|
||||
<ClInclude Include="scripting\ScEntity.hpp" />
|
||||
<ClInclude Include="scripting\ScMap.hpp" />
|
||||
<ClInclude Include="scripting\ScNetwork.hpp" />
|
||||
<ClInclude Include="scripting\ScObject.hpp" />
|
||||
<ClInclude Include="scripting\ScPark.hpp" />
|
||||
<ClInclude Include="scripting\ScRide.hpp" />
|
||||
<ClInclude Include="scripting\bindings\game\ScCheats.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScClimate.hpp" />
|
||||
<ClInclude Include="scripting\bindings\game\ScConfiguration.hpp" />
|
||||
<ClInclude Include="scripting\bindings\game\ScConsole.hpp" />
|
||||
<ClInclude Include="scripting\bindings\game\ScContext.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScDate.hpp" />
|
||||
<ClInclude Include="scripting\bindings\game\ScDisposable.hpp" />
|
||||
<ClInclude Include="scripting\bindings\entity\ScEntity.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScMap.hpp" />
|
||||
<ClInclude Include="scripting\bindings\network\ScNetwork.hpp" />
|
||||
<ClInclude Include="scripting\bindings\object\ScObject.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScPark.hpp" />
|
||||
<ClInclude Include="scripting\bindings\ride\ScRide.hpp" />
|
||||
<ClInclude Include="scripting\ScriptEngine.h" />
|
||||
<ClInclude Include="scripting\ScScenario.hpp" />
|
||||
<ClInclude Include="scripting\ScSocket.hpp" />
|
||||
<ClInclude Include="scripting\ScTile.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScScenario.hpp" />
|
||||
<ClInclude Include="scripting\bindings\network\ScSocket.hpp" />
|
||||
<ClInclude Include="scripting\bindings\world\ScTile.hpp" />
|
||||
<ClInclude Include="sprites.h" />
|
||||
<ClInclude Include="title\TitleScreen.h" />
|
||||
<ClInclude Include="title\TitleSequence.h" />
|
||||
|
@ -849,6 +859,20 @@
|
|||
<ClCompile Include="scenario\Scenario.cpp" />
|
||||
<ClCompile Include="scenario\ScenarioRepository.cpp" />
|
||||
<ClCompile Include="scenario\ScenarioSources.cpp" />
|
||||
<ClCompile Include="scripting\bindings\entity\ScGuest.cpp" />
|
||||
<ClCompile Include="scripting\bindings\entity\ScLitter.cpp" />
|
||||
<ClCompile Include="scripting\bindings\entity\ScStaff.cpp" />
|
||||
<ClCompile Include="scripting\bindings\entity\ScVehicle.cpp" />
|
||||
<ClCompile Include="scripting\bindings\network\ScNetwork.cpp" />
|
||||
<ClCompile Include="scripting\bindings\network\ScPlayer.cpp" />
|
||||
<ClCompile Include="scripting\bindings\network\ScPlayerGroup.cpp" />
|
||||
<ClCompile Include="scripting\bindings\ride\ScRide.cpp" />
|
||||
<ClCompile Include="scripting\bindings\ride\ScRideStation.cpp" />
|
||||
<ClCompile Include="scripting\bindings\world\ScMap.cpp" />
|
||||
<ClCompile Include="scripting\bindings\world\ScPark.cpp" />
|
||||
<ClCompile Include="scripting\bindings\world\ScParkMessage.cpp" />
|
||||
<ClCompile Include="scripting\bindings\world\ScTile.cpp" />
|
||||
<ClCompile Include="scripting\bindings\world\ScTileElement.cpp" />
|
||||
<ClCompile Include="scripting\HookEngine.cpp" />
|
||||
<ClCompile Include="scripting\Plugin.cpp" />
|
||||
<ClCompile Include="scripting\ScriptEngine.cpp" />
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,277 +0,0 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../common.h"
|
||||
# include "../ride/Ride.h"
|
||||
# include "../ride/TrainManager.h"
|
||||
# include "../world/Balloon.h"
|
||||
# include "../world/Duck.h"
|
||||
# include "../world/EntityList.h"
|
||||
# include "../world/Fountain.h"
|
||||
# include "../world/Litter.h"
|
||||
# include "../world/Map.h"
|
||||
# include "../world/MoneyEffect.h"
|
||||
# include "../world/Particle.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScEntity.hpp"
|
||||
# include "ScRide.hpp"
|
||||
# include "ScTile.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScMap
|
||||
{
|
||||
private:
|
||||
duk_context* _context;
|
||||
|
||||
public:
|
||||
ScMap(duk_context* ctx)
|
||||
: _context(ctx)
|
||||
{
|
||||
}
|
||||
|
||||
DukValue size_get() const
|
||||
{
|
||||
return ToDuk(_context, CoordsXY{ gMapSize, gMapSize });
|
||||
}
|
||||
|
||||
int32_t numRides_get() const
|
||||
{
|
||||
return static_cast<int32_t>(GetRideManager().size());
|
||||
}
|
||||
|
||||
int32_t numEntities_get() const
|
||||
{
|
||||
return MAX_ENTITIES;
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScRide>> rides_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScRide>> result;
|
||||
auto rideManager = GetRideManager();
|
||||
for (const auto& ride : rideManager)
|
||||
{
|
||||
result.push_back(std::make_shared<ScRide>(ride.id));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScRide> getRide(int32_t id) const
|
||||
{
|
||||
auto rideManager = GetRideManager();
|
||||
auto ride = rideManager[static_cast<ride_id_t>(id)];
|
||||
if (ride != nullptr)
|
||||
{
|
||||
return std::make_shared<ScRide>(ride->id);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
std::shared_ptr<ScTile> getTile(int32_t x, int32_t y) const
|
||||
{
|
||||
auto coords = TileCoordsXY(x, y).ToCoordsXY();
|
||||
return std::make_shared<ScTile>(coords);
|
||||
}
|
||||
|
||||
DukValue getEntity(int32_t id) const
|
||||
{
|
||||
if (id >= 0 && id < MAX_ENTITIES)
|
||||
{
|
||||
auto spriteId = static_cast<uint16_t>(id);
|
||||
auto sprite = GetEntity(spriteId);
|
||||
if (sprite != nullptr && sprite->Type != EntityType::Null)
|
||||
{
|
||||
return GetEntityAsDukValue(sprite);
|
||||
}
|
||||
}
|
||||
duk_push_null(_context);
|
||||
return DukValue::take_from_stack(_context);
|
||||
}
|
||||
|
||||
std::vector<DukValue> getAllEntities(const std::string& type) const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
if (type == "balloon")
|
||||
{
|
||||
for (auto sprite : EntityList<Balloon>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "car")
|
||||
{
|
||||
for (auto trainHead : TrainManager::View())
|
||||
{
|
||||
for (auto carId = trainHead->sprite_index; carId != SPRITE_INDEX_NULL;)
|
||||
{
|
||||
auto car = GetEntity<Vehicle>(carId);
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScVehicle>(carId)));
|
||||
carId = car->next_vehicle_on_train;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == "litter")
|
||||
{
|
||||
for (auto sprite : EntityList<Litter>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "duck")
|
||||
{
|
||||
for (auto sprite : EntityList<Duck>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "peep")
|
||||
{
|
||||
for (auto sprite : EntityList<Guest>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScGuest>(sprite->sprite_index)));
|
||||
}
|
||||
for (auto sprite : EntityList<Staff>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScStaff>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "guest")
|
||||
{
|
||||
for (auto sprite : EntityList<Guest>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScGuest>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "staff")
|
||||
{
|
||||
for (auto sprite : EntityList<Staff>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScStaff>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Invalid entity type.");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename TEntityType, typename TScriptType> DukValue createEntityType(const DukValue& initializer)
|
||||
{
|
||||
TEntityType* entity = CreateEntity<TEntityType>();
|
||||
|
||||
auto entityPos = CoordsXYZ{ AsOrDefault(initializer["x"], 0), AsOrDefault(initializer["y"], 0),
|
||||
AsOrDefault(initializer["z"], 0) };
|
||||
entity->MoveTo(entityPos);
|
||||
|
||||
return GetObjectAsDukValue(_context, std::make_shared<TScriptType>(entity->sprite_index));
|
||||
}
|
||||
|
||||
DukValue createEntity(const std::string& type, const DukValue& initializer)
|
||||
{
|
||||
if (type == "car")
|
||||
{
|
||||
return createEntityType<Vehicle, ScVehicle>(initializer);
|
||||
}
|
||||
else if (type == "staff")
|
||||
{
|
||||
return createEntityType<Staff, ScStaff>(initializer);
|
||||
}
|
||||
else if (type == "guest")
|
||||
{
|
||||
return createEntityType<Guest, ScGuest>(initializer);
|
||||
}
|
||||
else if (type == "steam_particle")
|
||||
{
|
||||
return createEntityType<SteamParticle, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "money_effect")
|
||||
{
|
||||
return createEntityType<MoneyEffect, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "crashed_vehicle_particle")
|
||||
{
|
||||
return createEntityType<VehicleCrashParticle, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "explosion_cloud")
|
||||
{
|
||||
return createEntityType<ExplosionCloud, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "crash_splash")
|
||||
{
|
||||
return createEntityType<CrashSplashParticle, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "explosion_flare")
|
||||
{
|
||||
return createEntityType<ExplosionFlare, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "balloon")
|
||||
{
|
||||
return createEntityType<Balloon, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "duck")
|
||||
{
|
||||
return createEntityType<Duck, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "jumping_fountain")
|
||||
{
|
||||
return createEntityType<JumpingFountain, ScEntity>(initializer);
|
||||
}
|
||||
else if (type == "litter")
|
||||
{
|
||||
return createEntityType<Litter, ScLitter>(initializer);
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Invalid entity type.");
|
||||
}
|
||||
|
||||
return DukValue();
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScMap::size_get, nullptr, "size");
|
||||
dukglue_register_property(ctx, &ScMap::numRides_get, nullptr, "numRides");
|
||||
dukglue_register_property(ctx, &ScMap::numEntities_get, nullptr, "numEntities");
|
||||
dukglue_register_property(ctx, &ScMap::rides_get, nullptr, "rides");
|
||||
dukglue_register_method(ctx, &ScMap::getRide, "getRide");
|
||||
dukglue_register_method(ctx, &ScMap::getTile, "getTile");
|
||||
dukglue_register_method(ctx, &ScMap::getEntity, "getEntity");
|
||||
dukglue_register_method(ctx, &ScMap::getAllEntities, "getAllEntities");
|
||||
dukglue_register_method(ctx, &ScMap::createEntity, "createEntity");
|
||||
}
|
||||
|
||||
private:
|
||||
DukValue GetEntityAsDukValue(const SpriteBase* sprite) const
|
||||
{
|
||||
auto spriteId = sprite->sprite_index;
|
||||
switch (sprite->Type)
|
||||
{
|
||||
case EntityType::Vehicle:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScVehicle>(spriteId));
|
||||
case EntityType::Staff:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScStaff>(spriteId));
|
||||
case EntityType::Guest:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScGuest>(spriteId));
|
||||
case EntityType::Litter:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScLitter>(spriteId));
|
||||
default:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScEntity>(spriteId));
|
||||
}
|
||||
}
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -1,540 +0,0 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../actions/NetworkModifyGroupAction.h"
|
||||
# include "../actions/PlayerKickAction.h"
|
||||
# include "../actions/PlayerSetGroupAction.h"
|
||||
# include "../network/NetworkAction.h"
|
||||
# include "../network/network.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScSocket.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScPlayerGroup
|
||||
{
|
||||
private:
|
||||
int32_t _id;
|
||||
|
||||
public:
|
||||
ScPlayerGroup(int32_t id)
|
||||
: _id(id)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t id_get()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
std::string name_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_group_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_group_name(index);
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
void name_set(std::string value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto action = NetworkModifyGroupAction(ModifyGroupType::SetName, _id, value);
|
||||
GameActions::Execute(&action);
|
||||
# endif
|
||||
}
|
||||
|
||||
std::vector<std::string> permissions_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_group_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
|
||||
// Create array of permissions
|
||||
std::vector<std::string> result;
|
||||
auto permissionIndex = 0;
|
||||
for (const auto& action : NetworkActions::Actions)
|
||||
{
|
||||
if (network_can_perform_action(index, static_cast<NetworkPermission>(permissionIndex)))
|
||||
{
|
||||
result.push_back(TransformPermissionKeyToJS(action.PermissionName));
|
||||
}
|
||||
permissionIndex++;
|
||||
}
|
||||
return result;
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
void permissions_set(std::vector<std::string> value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto groupIndex = network_get_group_index(_id);
|
||||
if (groupIndex == -1)
|
||||
return;
|
||||
|
||||
// First clear all permissions
|
||||
auto networkAction = NetworkModifyGroupAction(
|
||||
ModifyGroupType::SetPermissions, _id, "", 0, PermissionState::ClearAll);
|
||||
GameActions::Execute(&networkAction);
|
||||
|
||||
std::vector<bool> enabledPermissions;
|
||||
enabledPermissions.resize(NetworkActions::Actions.size());
|
||||
for (const auto& p : value)
|
||||
{
|
||||
auto permissionName = TransformPermissionKeyToInternal(p);
|
||||
|
||||
auto permissionIndex = 0;
|
||||
for (const auto& action : NetworkActions::Actions)
|
||||
{
|
||||
if (action.PermissionName == permissionName)
|
||||
{
|
||||
enabledPermissions[permissionIndex] = true;
|
||||
}
|
||||
permissionIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < enabledPermissions.size(); i++)
|
||||
{
|
||||
auto toggle
|
||||
= (enabledPermissions[i]
|
||||
!= (network_can_perform_action(groupIndex, static_cast<NetworkPermission>(i)) != 0));
|
||||
if (toggle)
|
||||
{
|
||||
auto networkAction2 = NetworkModifyGroupAction(
|
||||
ModifyGroupType::SetPermissions, _id, "", static_cast<uint32_t>(i), PermissionState::Toggle);
|
||||
GameActions::Execute(&networkAction2);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::id_get, nullptr, "id");
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::name_get, &ScPlayerGroup::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::permissions_get, &ScPlayerGroup::permissions_set, "permissions");
|
||||
}
|
||||
|
||||
private:
|
||||
static std::string TransformPermissionKeyToJS(const std::string& s)
|
||||
{
|
||||
auto result = s.substr(sizeof("PERMISSION_") - 1);
|
||||
for (auto& c : result)
|
||||
{
|
||||
c = std::tolower(c);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static std::string TransformPermissionKeyToInternal(const std::string& s)
|
||||
{
|
||||
auto result = "PERMISSION_" + s;
|
||||
for (auto& c : result)
|
||||
{
|
||||
c = std::toupper(c);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
class ScPlayer
|
||||
{
|
||||
private:
|
||||
int32_t _id;
|
||||
|
||||
public:
|
||||
ScPlayer(int32_t id)
|
||||
: _id(id)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t id_get() const
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
std::string name_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_name(index);
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t group_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_group(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
void group_set(int32_t value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto playerSetGroupAction = PlayerSetGroupAction(_id, value);
|
||||
GameActions::Execute(&playerSetGroupAction);
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ping_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_ping(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t commandsRan_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_commands_ran(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t moneySpent_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_money_spent(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
std::string ipAddress_get() const
|
||||
{
|
||||
return network_get_player_ip_address(_id);
|
||||
}
|
||||
|
||||
std::string publicKeyHash_get() const
|
||||
{
|
||||
return network_get_player_public_key_hash(_id);
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPlayer::id_get, nullptr, "id");
|
||||
dukglue_register_property(ctx, &ScPlayer::name_get, nullptr, "name");
|
||||
dukglue_register_property(ctx, &ScPlayer::group_get, &ScPlayer::group_set, "group");
|
||||
dukglue_register_property(ctx, &ScPlayer::ping_get, nullptr, "ping");
|
||||
dukglue_register_property(ctx, &ScPlayer::commandsRan_get, nullptr, "commandsRan");
|
||||
dukglue_register_property(ctx, &ScPlayer::moneySpent_get, nullptr, "moneySpent");
|
||||
dukglue_register_property(ctx, &ScPlayer::ipAddress_get, nullptr, "ipAddress");
|
||||
dukglue_register_property(ctx, &ScPlayer::publicKeyHash_get, nullptr, "publicKeyHash");
|
||||
}
|
||||
};
|
||||
|
||||
class ScNetwork
|
||||
{
|
||||
private:
|
||||
# ifdef __clang__
|
||||
[[maybe_unused]]
|
||||
# endif
|
||||
duk_context* _context;
|
||||
|
||||
public:
|
||||
ScNetwork(duk_context* ctx)
|
||||
: _context(ctx)
|
||||
{
|
||||
}
|
||||
|
||||
std::string mode_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
switch (network_get_mode())
|
||||
{
|
||||
case NETWORK_MODE_SERVER:
|
||||
return "server";
|
||||
case NETWORK_MODE_CLIENT:
|
||||
return "client";
|
||||
}
|
||||
# endif
|
||||
return "none";
|
||||
}
|
||||
int32_t numPlayers_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_num_players();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
int32_t numGroups_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_num_groups();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
int32_t defaultGroup_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_default_group();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
void defaultGroup_set(int32_t value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto action = NetworkModifyGroupAction(ModifyGroupType::SetDefault, value);
|
||||
GameActions::Execute(&action);
|
||||
# endif
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayerGroup>> groups_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScPlayerGroup>> groups;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
for (int32_t i = 0; i < numGroups; i++)
|
||||
{
|
||||
auto groupId = network_get_group_id(i);
|
||||
groups.push_back(std::make_shared<ScPlayerGroup>(groupId));
|
||||
}
|
||||
# endif
|
||||
return groups;
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayer>> players_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScPlayer>> players;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
for (int32_t i = 0; i < numPlayers; i++)
|
||||
{
|
||||
auto playerId = network_get_player_id(i);
|
||||
players.push_back(std::make_shared<ScPlayer>(playerId));
|
||||
}
|
||||
# endif
|
||||
return players;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayer> currentPlayer_get() const
|
||||
{
|
||||
std::shared_ptr<ScPlayer> player;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto playerId = network_get_current_player_id();
|
||||
player = std::make_shared<ScPlayer>(playerId);
|
||||
# endif
|
||||
return player;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayer> getPlayer(int32_t index) const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
if (index < numPlayers)
|
||||
{
|
||||
auto playerId = network_get_player_id(index);
|
||||
return std::make_shared<ScPlayer>(playerId);
|
||||
}
|
||||
# endif
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DukValue stats_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto obj = OpenRCT2::Scripting::DukObject(_context);
|
||||
auto networkStats = network_get_stats();
|
||||
{
|
||||
duk_push_array(_context);
|
||||
duk_uarridx_t index = 0;
|
||||
for (auto v : networkStats.bytesReceived)
|
||||
{
|
||||
duk_push_number(_context, v);
|
||||
duk_put_prop_index(_context, -2, index);
|
||||
index++;
|
||||
}
|
||||
obj.Set("bytesReceived", DukValue::take_from_stack(_context));
|
||||
}
|
||||
{
|
||||
duk_push_array(_context);
|
||||
duk_uarridx_t index = 0;
|
||||
for (auto v : networkStats.bytesSent)
|
||||
{
|
||||
duk_push_number(_context, v);
|
||||
duk_put_prop_index(_context, -2, index);
|
||||
index++;
|
||||
}
|
||||
obj.Set("bytesSent", DukValue::take_from_stack(_context));
|
||||
}
|
||||
return obj.Take();
|
||||
# else
|
||||
return ToDuk(_context, nullptr);
|
||||
# endif
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayerGroup> getGroup(int32_t index) const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
if (index < numGroups)
|
||||
{
|
||||
auto groupId = network_get_group_id(index);
|
||||
return std::make_shared<ScPlayerGroup>(groupId);
|
||||
}
|
||||
# endif
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void addGroup()
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto networkModifyGroup = NetworkModifyGroupAction(ModifyGroupType::AddGroup);
|
||||
GameActions::Execute(&networkModifyGroup);
|
||||
# endif
|
||||
}
|
||||
|
||||
void removeGroup(int32_t index)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
if (index < numGroups)
|
||||
{
|
||||
auto groupId = network_get_group_id(index);
|
||||
auto networkAction = NetworkModifyGroupAction(ModifyGroupType::RemoveGroup, groupId);
|
||||
GameActions::Execute(&networkAction);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void kickPlayer(int32_t index)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
if (index < numPlayers)
|
||||
{
|
||||
auto playerId = network_get_player_id(index);
|
||||
auto kickPlayerAction = PlayerKickAction(playerId);
|
||||
GameActions::Execute(&kickPlayerAction);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void sendMessage(std::string message, DukValue players)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
if (players.is_array())
|
||||
{
|
||||
if (network_get_mode() == NETWORK_MODE_SERVER)
|
||||
{
|
||||
std::vector<uint8_t> playerIds;
|
||||
auto playerArray = players.as_array();
|
||||
for (const auto& item : playerArray)
|
||||
{
|
||||
if (item.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
playerIds.push_back(static_cast<uint8_t>(item.as_int()));
|
||||
}
|
||||
}
|
||||
if (!playerArray.empty())
|
||||
{
|
||||
network_send_chat(message.c_str(), playerIds);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_error(players.context(), DUK_ERR_ERROR, "Only servers can send private messages.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
network_send_chat(message.c_str());
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScListener> createListener()
|
||||
{
|
||||
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||
auto plugin = scriptEngine.GetExecInfo().GetCurrentPlugin();
|
||||
auto socket = std::make_shared<ScListener>(plugin);
|
||||
scriptEngine.AddSocket(socket);
|
||||
return socket;
|
||||
}
|
||||
# else
|
||||
void createListener()
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Networking has been disabled.");
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScSocket> createSocket()
|
||||
{
|
||||
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||
auto plugin = scriptEngine.GetExecInfo().GetCurrentPlugin();
|
||||
auto socket = std::make_shared<ScSocket>(plugin);
|
||||
scriptEngine.AddSocket(socket);
|
||||
return socket;
|
||||
}
|
||||
# else
|
||||
void createSocket()
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Networking has been disabled.");
|
||||
}
|
||||
# endif
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScNetwork::mode_get, nullptr, "mode");
|
||||
dukglue_register_property(ctx, &ScNetwork::numGroups_get, nullptr, "numGroups");
|
||||
dukglue_register_property(ctx, &ScNetwork::numPlayers_get, nullptr, "numPlayers");
|
||||
dukglue_register_property(ctx, &ScNetwork::groups_get, nullptr, "groups");
|
||||
dukglue_register_property(ctx, &ScNetwork::players_get, nullptr, "players");
|
||||
dukglue_register_property(ctx, &ScNetwork::currentPlayer_get, nullptr, "currentPlayer");
|
||||
dukglue_register_property(ctx, &ScNetwork::defaultGroup_get, &ScNetwork::defaultGroup_set, "defaultGroup");
|
||||
dukglue_register_property(ctx, &ScNetwork::stats_get, nullptr, "stats");
|
||||
dukglue_register_method(ctx, &ScNetwork::addGroup, "addGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::getGroup, "getGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::removeGroup, "removeGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::getPlayer, "getPlayer");
|
||||
dukglue_register_method(ctx, &ScNetwork::kickPlayer, "kickPlayer");
|
||||
dukglue_register_method(ctx, &ScNetwork::sendMessage, "sendMessage");
|
||||
|
||||
dukglue_register_method(ctx, &ScNetwork::createListener, "createListener");
|
||||
dukglue_register_method(ctx, &ScNetwork::createSocket, "createSocket");
|
||||
}
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -1,621 +0,0 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../GameState.h"
|
||||
# include "../common.h"
|
||||
# include "../core/String.hpp"
|
||||
# include "../management/Finance.h"
|
||||
# include "../management/NewsItem.h"
|
||||
# include "../peep/Peep.h"
|
||||
# include "../windows/Intent.h"
|
||||
# include "../world/Park.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static constexpr const char* ParkMessageTypeStrings[] = {
|
||||
"attraction", "peep_on_attraction", "peep", "money", "blank", "research", "guests", "award", "chart",
|
||||
};
|
||||
|
||||
inline News::ItemType GetParkMessageType(const std::string& key)
|
||||
{
|
||||
// Get the first ItemType that appears in ParkMessageTypeStrings that isn't Null
|
||||
auto firstType = static_cast<uint8_t>(News::ItemType::Ride);
|
||||
|
||||
auto begin = std::begin(ParkMessageTypeStrings);
|
||||
auto end = std::end(ParkMessageTypeStrings);
|
||||
|
||||
auto it = std::find(begin, end, key);
|
||||
return it != end ? static_cast<News::ItemType>(firstType + std::distance(begin, it)) : News::ItemType::Blank;
|
||||
}
|
||||
|
||||
inline std::string GetParkMessageType(News::ItemType type)
|
||||
{
|
||||
// Decrement 1 as ParkMessageTypeStrings doesn't contain the null type
|
||||
auto scriptType = static_cast<size_t>(type) - 1;
|
||||
|
||||
if (scriptType < std::size(ParkMessageTypeStrings))
|
||||
{
|
||||
return ParkMessageTypeStrings[scriptType];
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template<> inline News::Item FromDuk(const DukValue& value)
|
||||
{
|
||||
News::Item result{};
|
||||
result.Type = GetParkMessageType(value["type"].as_string());
|
||||
result.Assoc = value["subject"].as_int();
|
||||
result.Ticks = value["tickCount"].as_int();
|
||||
result.MonthYear = value["month"].as_int();
|
||||
result.Day = value["day"].as_int();
|
||||
result.Text = value["text"].as_string();
|
||||
return result;
|
||||
}
|
||||
|
||||
class ScParkMessage
|
||||
{
|
||||
private:
|
||||
size_t _index{};
|
||||
|
||||
public:
|
||||
ScParkMessage(size_t index)
|
||||
: _index(index)
|
||||
{
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScParkMessage::isArchived_get, nullptr, "isArchived");
|
||||
dukglue_register_property(ctx, &ScParkMessage::month_get, &ScParkMessage::month_set, "month");
|
||||
dukglue_register_property(ctx, &ScParkMessage::day_get, &ScParkMessage::day_set, "day");
|
||||
dukglue_register_property(ctx, &ScParkMessage::tickCount_get, &ScParkMessage::tickCount_set, "tickCount");
|
||||
dukglue_register_property(ctx, &ScParkMessage::type_get, &ScParkMessage::type_set, "type");
|
||||
dukglue_register_property(ctx, &ScParkMessage::subject_get, &ScParkMessage::subject_set, "subject");
|
||||
dukglue_register_property(ctx, &ScParkMessage::text_get, &ScParkMessage::text_set, "text");
|
||||
dukglue_register_method(ctx, &ScParkMessage::remove, "remove");
|
||||
}
|
||||
|
||||
private:
|
||||
News::Item* GetMessage() const
|
||||
{
|
||||
return &gNewsItems[_index];
|
||||
}
|
||||
|
||||
bool isArchived_get() const
|
||||
{
|
||||
return _index >= News::ItemHistoryStart;
|
||||
}
|
||||
|
||||
uint16_t month_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->MonthYear;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void month_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->MonthYear = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t day_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Day;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void day_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Day = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t tickCount_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Ticks;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tickCount_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Ticks = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string type_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return GetParkMessageType(msg->Type);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void type_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Type = GetParkMessageType(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t subject_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Assoc;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void subject_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Assoc = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string text_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Text;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void text_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Text = value;
|
||||
}
|
||||
}
|
||||
|
||||
void remove()
|
||||
{
|
||||
News::RemoveItem(static_cast<int32_t>(_index));
|
||||
}
|
||||
};
|
||||
|
||||
static const DukEnumMap<uint64_t> ParkFlagMap({
|
||||
{ "open", PARK_FLAGS_PARK_OPEN },
|
||||
{ "scenarioCompleteNameInput", PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT },
|
||||
{ "forbidLandscapeChanges", PARK_FLAGS_FORBID_LANDSCAPE_CHANGES },
|
||||
{ "forbidTreeRemoval", PARK_FLAGS_FORBID_TREE_REMOVAL },
|
||||
{ "forbidHighConstruction", PARK_FLAGS_FORBID_HIGH_CONSTRUCTION },
|
||||
{ "preferLessIntenseRides", PARK_FLAGS_PREF_LESS_INTENSE_RIDES },
|
||||
{ "forbidMarketingCampaigns", PARK_FLAGS_FORBID_MARKETING_CAMPAIGN },
|
||||
{ "preferMoreIntenseRides", PARK_FLAGS_PREF_MORE_INTENSE_RIDES },
|
||||
{ "noMoney", PARK_FLAGS_NO_MONEY },
|
||||
{ "difficultGuestGeneration", PARK_FLAGS_DIFFICULT_GUEST_GENERATION },
|
||||
{ "freeParkEntry", PARK_FLAGS_PARK_FREE_ENTRY },
|
||||
{ "difficultParkRating", PARK_FLAGS_DIFFICULT_PARK_RATING },
|
||||
{ "noMoney", PARK_FLAGS_NO_MONEY_SCENARIO },
|
||||
{ "unlockAllPrices", PARK_FLAGS_UNLOCK_ALL_PRICES },
|
||||
});
|
||||
|
||||
class ScPark
|
||||
{
|
||||
public:
|
||||
money64 cash_get() const
|
||||
{
|
||||
return gCash;
|
||||
}
|
||||
void cash_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gCash != value)
|
||||
{
|
||||
gCash = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t rating_get() const
|
||||
{
|
||||
return gParkRating;
|
||||
}
|
||||
void rating_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
auto valueClamped = std::min(std::max(0, value), 999);
|
||||
if (gParkRating != valueClamped)
|
||||
{
|
||||
gParkRating = std::min(std::max(0, value), 999);
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 bankLoan_get() const
|
||||
{
|
||||
return gBankLoan;
|
||||
}
|
||||
void bankLoan_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gBankLoan != value)
|
||||
{
|
||||
gBankLoan = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 maxBankLoan_get() const
|
||||
{
|
||||
return gMaxBankLoan;
|
||||
}
|
||||
void maxBankLoan_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gMaxBankLoan != value)
|
||||
{
|
||||
gMaxBankLoan = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money16 entranceFee_get() const
|
||||
{
|
||||
return gParkEntranceFee;
|
||||
}
|
||||
void entranceFee_set(money16 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gParkEntranceFee != value)
|
||||
{
|
||||
gParkEntranceFee = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t guests_get() const
|
||||
{
|
||||
return gNumGuestsInPark;
|
||||
}
|
||||
|
||||
uint32_t suggestedGuestMaximum_get() const
|
||||
{
|
||||
return _suggestedGuestMaximum;
|
||||
}
|
||||
|
||||
int32_t guestGenerationProbability_get() const
|
||||
{
|
||||
return _guestGenerationProbability;
|
||||
}
|
||||
|
||||
money16 guestInitialCash_get() const
|
||||
{
|
||||
return gGuestInitialCash;
|
||||
}
|
||||
|
||||
uint8_t guestInitialHappiness_get() const
|
||||
{
|
||||
return gGuestInitialHappiness;
|
||||
}
|
||||
|
||||
uint8_t guestInitialHunger_get() const
|
||||
{
|
||||
return gGuestInitialHunger;
|
||||
}
|
||||
|
||||
uint8_t guestInitialThirst_get() const
|
||||
{
|
||||
return gGuestInitialThirst;
|
||||
}
|
||||
|
||||
money64 value_get() const
|
||||
{
|
||||
return gParkValue;
|
||||
}
|
||||
void value_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gParkValue != value)
|
||||
{
|
||||
gParkValue = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 companyValue_get() const
|
||||
{
|
||||
return gCompanyValue;
|
||||
}
|
||||
void companyValue_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gCompanyValue != value)
|
||||
{
|
||||
gCompanyValue = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money16 totalRideValueForMoney_get() const
|
||||
{
|
||||
return gTotalRideValueForMoney;
|
||||
}
|
||||
|
||||
uint32_t totalAdmissions_get() const
|
||||
{
|
||||
return gTotalAdmissions;
|
||||
}
|
||||
void totalAdmissions_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gTotalAdmissions != value)
|
||||
{
|
||||
gTotalAdmissions = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
money64 totalIncomeFromAdmissions_get() const
|
||||
{
|
||||
return gTotalIncomeFromAdmissions;
|
||||
}
|
||||
void totalIncomeFromAdmissions_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gTotalIncomeFromAdmissions != value)
|
||||
{
|
||||
gTotalIncomeFromAdmissions = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
money32 landPrice_get() const
|
||||
{
|
||||
return gLandPrice;
|
||||
}
|
||||
void landPrice_set(money32 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gLandPrice = value;
|
||||
}
|
||||
|
||||
money32 constructionRightsPrice_get() const
|
||||
{
|
||||
return gConstructionRightsPrice;
|
||||
}
|
||||
void constructionRightsPrice_set(money32 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gConstructionRightsPrice = value;
|
||||
}
|
||||
|
||||
int16_t casualtyPenalty_get() const
|
||||
{
|
||||
return gParkRatingCasualtyPenalty;
|
||||
}
|
||||
void casualtyPenalty_set(int16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gParkRatingCasualtyPenalty = value;
|
||||
}
|
||||
|
||||
uint16_t parkSize_get() const
|
||||
{
|
||||
return gParkSize;
|
||||
}
|
||||
|
||||
std::string name_get() const
|
||||
{
|
||||
return GetContext()->GetGameState()->GetPark().Name;
|
||||
}
|
||||
void name_set(std::string value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
auto& park = GetContext()->GetGameState()->GetPark();
|
||||
if (park.Name != value)
|
||||
{
|
||||
park.Name = value;
|
||||
gfx_invalidate_screen();
|
||||
}
|
||||
}
|
||||
|
||||
bool getFlag(const std::string& key) const
|
||||
{
|
||||
auto mask = ParkFlagMap[key];
|
||||
return (gParkFlags & mask) != 0;
|
||||
}
|
||||
|
||||
void setFlag(const std::string& key, bool value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto mask = ParkFlagMap[key];
|
||||
if (value)
|
||||
gParkFlags |= mask;
|
||||
else
|
||||
gParkFlags &= ~mask;
|
||||
gfx_invalidate_screen();
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScParkMessage>> messages_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScParkMessage>> result;
|
||||
for (size_t i = 0, newsSize = gNewsItems.GetRecent().size(); i < newsSize; i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScParkMessage>(i));
|
||||
}
|
||||
for (size_t i = 0, newsSize = gNewsItems.GetArchived().size(); i < newsSize; i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScParkMessage>(i + News::ItemHistoryStart));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void messages_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
int32_t index = 0;
|
||||
int32_t archiveIndex = News::ItemHistoryStart;
|
||||
for (const auto& item : value)
|
||||
{
|
||||
auto isArchived = item["isArchived"].as_bool();
|
||||
auto newsItem = FromDuk<News::Item>(item);
|
||||
if (isArchived)
|
||||
{
|
||||
if (archiveIndex < News::MaxItems)
|
||||
{
|
||||
gNewsItems[archiveIndex] = newsItem;
|
||||
archiveIndex++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (index < News::ItemHistoryStart)
|
||||
{
|
||||
gNewsItems[index] = newsItem;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End the lists by setting next item to null
|
||||
if (index < News::ItemHistoryStart)
|
||||
{
|
||||
gNewsItems[index].Type = News::ItemType::Null;
|
||||
}
|
||||
if (archiveIndex < News::MaxItems)
|
||||
{
|
||||
gNewsItems[archiveIndex].Type = News::ItemType::Null;
|
||||
}
|
||||
}
|
||||
|
||||
void postMessage(DukValue message)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
try
|
||||
{
|
||||
uint32_t assoc = std::numeric_limits<uint32_t>::max();
|
||||
auto type = News::ItemType::Blank;
|
||||
std::string text;
|
||||
if (message.type() == DukValue::Type::STRING)
|
||||
{
|
||||
text = message.as_string();
|
||||
}
|
||||
else
|
||||
{
|
||||
type = GetParkMessageType(message["type"].as_string());
|
||||
text = message["text"].as_string();
|
||||
if (type == News::ItemType::Blank)
|
||||
{
|
||||
assoc = static_cast<uint32_t>(((COORDS_NULL & 0xFFFF) << 16) | (COORDS_NULL & 0xFFFF));
|
||||
}
|
||||
|
||||
auto dukSubject = message["subject"];
|
||||
if (dukSubject.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
assoc = static_cast<uint32_t>(dukSubject.as_int());
|
||||
}
|
||||
}
|
||||
News::AddItemToQueue(type, text.c_str(), assoc);
|
||||
}
|
||||
catch (const DukException&)
|
||||
{
|
||||
duk_error(message.context(), DUK_ERR_ERROR, "Invalid message argument.");
|
||||
}
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPark::cash_get, &ScPark::cash_set, "cash");
|
||||
dukglue_register_property(ctx, &ScPark::rating_get, &ScPark::rating_set, "rating");
|
||||
dukglue_register_property(ctx, &ScPark::bankLoan_get, &ScPark::bankLoan_set, "bankLoan");
|
||||
dukglue_register_property(ctx, &ScPark::maxBankLoan_get, &ScPark::maxBankLoan_set, "maxBankLoan");
|
||||
dukglue_register_property(ctx, &ScPark::entranceFee_get, &ScPark::entranceFee_set, "entranceFee");
|
||||
dukglue_register_property(ctx, &ScPark::guests_get, nullptr, "guests");
|
||||
dukglue_register_property(ctx, &ScPark::suggestedGuestMaximum_get, nullptr, "suggestedGuestMaximum");
|
||||
dukglue_register_property(ctx, &ScPark::guestGenerationProbability_get, nullptr, "guestGenerationProbability");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialCash_get, nullptr, "guestInitialCash");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialHappiness_get, nullptr, "guestInitialHappiness");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialHunger_get, nullptr, "guestInitialHunger");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialThirst_get, nullptr, "guestInitialThirst");
|
||||
dukglue_register_property(ctx, &ScPark::value_get, &ScPark::value_set, "value");
|
||||
dukglue_register_property(ctx, &ScPark::companyValue_get, &ScPark::companyValue_set, "companyValue");
|
||||
dukglue_register_property(ctx, &ScPark::totalRideValueForMoney_get, nullptr, "totalRideValueForMoney");
|
||||
dukglue_register_property(ctx, &ScPark::totalAdmissions_get, &ScPark::totalAdmissions_set, "totalAdmissions");
|
||||
dukglue_register_property(
|
||||
ctx, &ScPark::totalIncomeFromAdmissions_get, &ScPark::totalIncomeFromAdmissions_set,
|
||||
"totalIncomeFromAdmissions");
|
||||
dukglue_register_property(ctx, &ScPark::landPrice_get, &ScPark::landPrice_set, "landPrice");
|
||||
dukglue_register_property(
|
||||
ctx, &ScPark::constructionRightsPrice_get, &ScPark::constructionRightsPrice_set, "constructionRightsPrice");
|
||||
dukglue_register_property(ctx, &ScPark::parkSize_get, nullptr, "parkSize");
|
||||
dukglue_register_property(ctx, &ScPark::name_get, &ScPark::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScPark::messages_get, &ScPark::messages_set, "messages");
|
||||
dukglue_register_property(ctx, &ScPark::casualtyPenalty_get, &ScPark::casualtyPenalty_set, "casualtyPenalty");
|
||||
dukglue_register_method(ctx, &ScPark::getFlag, "getFlag");
|
||||
dukglue_register_method(ctx, &ScPark::setFlag, "setFlag");
|
||||
dukglue_register_method(ctx, &ScPark::postMessage, "postMessage");
|
||||
}
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -1,695 +0,0 @@
|
|||
/*****************************************************************************
|
||||
* 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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../common.h"
|
||||
# include "../ride/Ride.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScObject.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
template<> inline DukValue ToDuk(duk_context* ctx, const TrackColour& value)
|
||||
{
|
||||
DukObject obj(ctx);
|
||||
obj.Set("main", value.main);
|
||||
obj.Set("additional", value.additional);
|
||||
obj.Set("supports", value.supports);
|
||||
return obj.Take();
|
||||
}
|
||||
|
||||
template<> TrackColour FromDuk(const DukValue& s)
|
||||
{
|
||||
TrackColour result{};
|
||||
result.main = AsOrDefault(s["main"], 0);
|
||||
result.additional = AsOrDefault(s["additional"], 0);
|
||||
result.supports = AsOrDefault(s["supports"], 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
template<> inline DukValue ToDuk(duk_context* ctx, const VehicleColour& value)
|
||||
{
|
||||
DukObject obj(ctx);
|
||||
obj.Set("body", value.Body);
|
||||
obj.Set("trim", value.Trim);
|
||||
obj.Set("ternary", value.Ternary);
|
||||
return obj.Take();
|
||||
}
|
||||
|
||||
template<> VehicleColour FromDuk(const DukValue& s)
|
||||
{
|
||||
VehicleColour result{};
|
||||
result.Body = AsOrDefault(s["body"], 0);
|
||||
result.Trim = AsOrDefault(s["trim"], 0);
|
||||
result.Ternary = AsOrDefault(s["ternary"], 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
class ScRideStation
|
||||
{
|
||||
private:
|
||||
ride_id_t _rideId = RIDE_ID_NULL;
|
||||
StationIndex _stationIndex{};
|
||||
|
||||
public:
|
||||
ScRideStation(ride_id_t rideId, StationIndex stationIndex)
|
||||
: _rideId(rideId)
|
||||
, _stationIndex(stationIndex)
|
||||
{
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScRideStation::start_get, &ScRideStation::start_set, "start");
|
||||
dukglue_register_property(ctx, &ScRideStation::length_get, &ScRideStation::length_set, "length");
|
||||
dukglue_register_property(ctx, &ScRideStation::entrance_get, &ScRideStation::entrance_set, "entrance");
|
||||
dukglue_register_property(ctx, &ScRideStation::exit_get, &ScRideStation::exit_set, "exit");
|
||||
}
|
||||
|
||||
private:
|
||||
DukValue start_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
auto start = CoordsXYZ(station->Start, station->GetBaseZ());
|
||||
return ToDuk(ctx, start);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void start_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
auto start = FromDuk<CoordsXYZ>(value);
|
||||
station->Start = { start.x, start.y };
|
||||
station->SetBaseZ(start.z);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t length_get() const
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return station->Length;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void length_set(int32_t value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Length = value;
|
||||
}
|
||||
}
|
||||
|
||||
DukValue entrance_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return ToDuk(ctx, station->Entrance.ToCoordsXYZD());
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void entrance_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Entrance = FromDuk<CoordsXYZD>(value);
|
||||
}
|
||||
}
|
||||
|
||||
DukValue exit_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return ToDuk(ctx, station->Exit.ToCoordsXYZD());
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void exit_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Exit = FromDuk<CoordsXYZD>(value);
|
||||
}
|
||||
}
|
||||
|
||||
RideStation* GetRideStation() const
|
||||
{
|
||||
auto ride = get_ride(_rideId);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (_stationIndex < std::size(ride->stations))
|
||||
{
|
||||
return &ride->stations[_stationIndex];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
class ScRide
|
||||
{
|
||||
private:
|
||||
ride_id_t _rideId = RIDE_ID_NULL;
|
||||
|
||||
public:
|
||||
ScRide(ride_id_t rideId)
|
||||
: _rideId(rideId)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t id_get() const
|
||||
{
|
||||
return _rideId;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScRideObject> object_get()
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto rideObject = GetContext()->GetObjectManager().GetLoadedObject(ObjectType::Ride, ride->subtype);
|
||||
if (rideObject != nullptr)
|
||||
{
|
||||
return std::make_shared<ScRideObject>(ObjectType::Ride, ride->subtype);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int32_t type_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->type : 0;
|
||||
}
|
||||
|
||||
std::string classification_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
switch (ride->GetClassification())
|
||||
{
|
||||
case RideClassification::Ride:
|
||||
return "ride";
|
||||
case RideClassification::ShopOrStall:
|
||||
return "stall";
|
||||
case RideClassification::KioskOrFacility:
|
||||
return "facility";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string name_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->GetName() : std::string();
|
||||
}
|
||||
void name_set(std::string value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->custom_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string status_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
switch (ride->status)
|
||||
{
|
||||
case RideStatus::Closed:
|
||||
return "closed";
|
||||
case RideStatus::Open:
|
||||
return "open";
|
||||
case RideStatus::Testing:
|
||||
return "testing";
|
||||
case RideStatus::Simulating:
|
||||
return "simulating";
|
||||
case RideStatus::Count: // Meaningless but necessary to satisfy -Wswitch
|
||||
return "count";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
uint32_t lifecycleFlags_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->lifecycle_flags : 0;
|
||||
}
|
||||
|
||||
void lifecycleFlags_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->lifecycle_flags = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t mode_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? static_cast<uint8_t>(ride->mode) : 0;
|
||||
}
|
||||
|
||||
void mode_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->mode = static_cast<RideMode>(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t departFlags_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->depart_flags : 0;
|
||||
}
|
||||
|
||||
void departFlags_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->depart_flags = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t minimumWaitingTime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->min_waiting_time : 0;
|
||||
}
|
||||
|
||||
void minimumWaitingTime_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->min_waiting_time = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t maximumWaitingTime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->max_waiting_time : 0;
|
||||
}
|
||||
|
||||
void maximumWaitingTime_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->max_waiting_time = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<uint16_t> vehicles_get() const
|
||||
{
|
||||
std::vector<uint16_t> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
result.insert(result.begin(), std::begin(ride->vehicles), std::begin(ride->vehicles) + ride->num_vehicles);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<DukValue> vehicleColours_get() const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
for (const auto& vehicleColour : ride->vehicle_colours)
|
||||
{
|
||||
result.push_back(ToDuk(ctx, vehicleColour));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void vehicleColours_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto count = std::min(value.size(), std::size(ride->vehicle_colours));
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
ride->vehicle_colours[i] = FromDuk<VehicleColour>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<DukValue> colourSchemes_get() const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
for (const auto& trackColour : ride->track_colour)
|
||||
{
|
||||
result.push_back(ToDuk(ctx, trackColour));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void colourSchemes_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto count = std::min(value.size(), std::size(ride->track_colour));
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
ride->track_colour[i] = FromDuk<TrackColour>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t stationStyle_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->entrance_style : 0;
|
||||
}
|
||||
|
||||
void stationStyle_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->entrance_style = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t music_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->music : 0;
|
||||
}
|
||||
|
||||
void music_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->music = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScRideStation>> stations_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScRideStation>> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
for (size_t i = 0; i < std::size(ride->stations); i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScRideStation>(ride->id, static_cast<StationIndex>(i)));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<int32_t> price_get() const
|
||||
{
|
||||
std::vector<int32_t> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto numPrices = ride->GetNumPrices();
|
||||
for (size_t i = 0; i < numPrices; i++)
|
||||
{
|
||||
result.push_back(ride->price[i]);
|
||||
};
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void price_set(const std::vector<int32_t>& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto numPrices = std::min(value.size(), ride->GetNumPrices());
|
||||
for (size_t i = 0; i < numPrices; i++)
|
||||
{
|
||||
ride->price[i] = static_cast<money16>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int32_t excitement_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->excitement : 0;
|
||||
}
|
||||
void excitement_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->excitement = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t intensity_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->intensity : 0;
|
||||
}
|
||||
void intensity_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->intensity = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t nausea_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->nausea : 0;
|
||||
}
|
||||
void nausea_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->nausea = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t totalCustomers_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->total_customers : 0;
|
||||
}
|
||||
void totalCustomers_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->total_customers = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t buildDate_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->build_date : 0;
|
||||
}
|
||||
void buildDate_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->build_date = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t age_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->GetAge() : 0;
|
||||
}
|
||||
|
||||
int16_t runningCost_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->upkeep_cost : 0;
|
||||
}
|
||||
void runningCost_set(int16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->upkeep_cost = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t totalProfit_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->total_profit : 0;
|
||||
}
|
||||
void totalProfit_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->total_profit = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t inspectionInterval_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->inspection_interval : 0;
|
||||
}
|
||||
void inspectionInterval_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->inspection_interval = std::clamp<uint8_t>(value, RIDE_INSPECTION_EVERY_10_MINUTES, RIDE_INSPECTION_NEVER);
|
||||
}
|
||||
}
|
||||
|
||||
DukValue value_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr && ride->value != RIDE_VALUE_UNDEFINED)
|
||||
{
|
||||
return ToDuk<int32_t>(ctx, ride->value);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void value_set(const DukValue& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (value.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
ride->value = value.as_int();
|
||||
}
|
||||
else
|
||||
{
|
||||
ride->value = RIDE_VALUE_UNDEFINED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t downtime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->downtime : 0;
|
||||
}
|
||||
|
||||
Ride* GetRide() const
|
||||
{
|
||||
return get_ride(_rideId);
|
||||
}
|
||||
|
||||
public:
|
||||
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::classification_get, nullptr, "classification");
|
||||
dukglue_register_property(ctx, &ScRide::name_get, &ScRide::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScRide::status_get, nullptr, "status");
|
||||
dukglue_register_property(ctx, &ScRide::lifecycleFlags_get, &ScRide::lifecycleFlags_set, "lifecycleFlags");
|
||||
dukglue_register_property(ctx, &ScRide::mode_get, &ScRide::mode_set, "mode");
|
||||
dukglue_register_property(ctx, &ScRide::departFlags_get, &ScRide::departFlags_set, "departFlags");
|
||||
dukglue_register_property(
|
||||
ctx, &ScRide::minimumWaitingTime_get, &ScRide::minimumWaitingTime_set, "minimumWaitingTime");
|
||||
dukglue_register_property(
|
||||
ctx, &ScRide::maximumWaitingTime_get, &ScRide::maximumWaitingTime_set, "maximumWaitingTime");
|
||||
dukglue_register_property(ctx, &ScRide::vehicles_get, nullptr, "vehicles");
|
||||
dukglue_register_property(ctx, &ScRide::vehicleColours_get, &ScRide::vehicleColours_set, "vehicleColours");
|
||||
dukglue_register_property(ctx, &ScRide::colourSchemes_get, &ScRide::colourSchemes_set, "colourSchemes");
|
||||
dukglue_register_property(ctx, &ScRide::stationStyle_get, &ScRide::stationStyle_set, "stationStyle");
|
||||
dukglue_register_property(ctx, &ScRide::music_get, &ScRide::music_set, "music");
|
||||
dukglue_register_property(ctx, &ScRide::stations_get, nullptr, "stations");
|
||||
dukglue_register_property(ctx, &ScRide::price_get, &ScRide::price_set, "price");
|
||||
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");
|
||||
dukglue_register_property(ctx, &ScRide::buildDate_get, &ScRide::buildDate_set, "buildDate");
|
||||
dukglue_register_property(ctx, &ScRide::age_get, nullptr, "age");
|
||||
dukglue_register_property(ctx, &ScRide::runningCost_get, &ScRide::runningCost_set, "runningCost");
|
||||
dukglue_register_property(ctx, &ScRide::totalProfit_get, &ScRide::totalProfit_set, "totalProfit");
|
||||
dukglue_register_property(
|
||||
ctx, &ScRide::inspectionInterval_get, &ScRide::inspectionInterval_set, "inspectionInterval");
|
||||
dukglue_register_property(ctx, &ScRide::value_get, &ScRide::value_set, "value");
|
||||
dukglue_register_property(ctx, &ScRide::downtime_get, nullptr, "downtime");
|
||||
}
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -24,21 +24,31 @@
|
|||
# include "../interface/InteractiveConsole.h"
|
||||
# include "../platform/Platform2.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScCheats.hpp"
|
||||
# include "ScClimate.hpp"
|
||||
# include "ScConsole.hpp"
|
||||
# include "ScContext.hpp"
|
||||
# include "ScDate.hpp"
|
||||
# include "ScDisposable.hpp"
|
||||
# include "ScEntity.hpp"
|
||||
# include "ScMap.hpp"
|
||||
# include "ScNetwork.hpp"
|
||||
# include "ScObject.hpp"
|
||||
# include "ScPark.hpp"
|
||||
# include "ScRide.hpp"
|
||||
# include "ScScenario.hpp"
|
||||
# include "ScSocket.hpp"
|
||||
# include "ScTile.hpp"
|
||||
# include "bindings/entity/ScEntity.hpp"
|
||||
# include "bindings/entity/ScGuest.hpp"
|
||||
# include "bindings/entity/ScLitter.hpp"
|
||||
# include "bindings/entity/ScPeep.hpp"
|
||||
# include "bindings/entity/ScStaff.hpp"
|
||||
# include "bindings/entity/ScVehicle.hpp"
|
||||
# include "bindings/game/ScCheats.hpp"
|
||||
# include "bindings/game/ScConsole.hpp"
|
||||
# include "bindings/game/ScContext.hpp"
|
||||
# include "bindings/game/ScDisposable.hpp"
|
||||
# include "bindings/network/ScNetwork.hpp"
|
||||
# include "bindings/network/ScPlayer.hpp"
|
||||
# include "bindings/network/ScPlayerGroup.hpp"
|
||||
# include "bindings/network/ScSocket.hpp"
|
||||
# include "bindings/object/ScObject.hpp"
|
||||
# include "bindings/ride/ScRide.hpp"
|
||||
# include "bindings/ride/ScRideStation.hpp"
|
||||
# include "bindings/world/ScClimate.hpp"
|
||||
# include "bindings/world/ScDate.hpp"
|
||||
# include "bindings/world/ScMap.hpp"
|
||||
# include "bindings/world/ScPark.hpp"
|
||||
# include "bindings/world/ScParkMessage.hpp"
|
||||
# include "bindings/world/ScScenario.hpp"
|
||||
# include "bindings/world/ScTile.hpp"
|
||||
# include "bindings/world/ScTileElement.hpp"
|
||||
|
||||
# include <iostream>
|
||||
# include <stdexcept>
|
||||
|
|
|
@ -0,0 +1,212 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../peep/Peep.h"
|
||||
# include "../../../util/Util.h"
|
||||
# include "../../../world/EntityList.h"
|
||||
# include "../../../world/Sprite.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
# include <string_view>
|
||||
# include <unordered_map>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScEntity
|
||||
{
|
||||
protected:
|
||||
uint16_t _id = SPRITE_INDEX_NULL;
|
||||
|
||||
public:
|
||||
ScEntity(uint16_t id)
|
||||
: _id(id)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t id_get() const
|
||||
{
|
||||
auto entity = GetEntity();
|
||||
return entity != nullptr ? entity->sprite_index : 0;
|
||||
}
|
||||
|
||||
std::string type_get() const
|
||||
{
|
||||
const auto targetApiVersion = GetTargetAPIVersion();
|
||||
|
||||
auto entity = GetEntity();
|
||||
if (entity != nullptr)
|
||||
{
|
||||
switch (entity->Type)
|
||||
{
|
||||
case EntityType::Vehicle:
|
||||
return "car";
|
||||
case EntityType::Guest:
|
||||
if (targetApiVersion <= API_VERSION_33_PEEP_DEPRECATION)
|
||||
return "peep";
|
||||
else
|
||||
return "guest";
|
||||
case EntityType::Staff:
|
||||
if (targetApiVersion <= API_VERSION_33_PEEP_DEPRECATION)
|
||||
return "peep";
|
||||
else
|
||||
return "staff";
|
||||
case EntityType::SteamParticle:
|
||||
return "steam_particle";
|
||||
case EntityType::MoneyEffect:
|
||||
return "money_effect";
|
||||
case EntityType::CrashedVehicleParticle:
|
||||
return "crashed_vehicle_particle";
|
||||
case EntityType::ExplosionCloud:
|
||||
return "explosion_cloud";
|
||||
case EntityType::CrashSplash:
|
||||
return "crash_splash";
|
||||
case EntityType::ExplosionFlare:
|
||||
return "explosion_flare";
|
||||
case EntityType::Balloon:
|
||||
return "balloon";
|
||||
case EntityType::Duck:
|
||||
return "duck";
|
||||
case EntityType::JumpingFountain:
|
||||
return "jumping_fountain";
|
||||
case EntityType::Litter:
|
||||
return "litter";
|
||||
case EntityType::Null:
|
||||
return "unknown";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
// x getter and setter
|
||||
int32_t x_get() const
|
||||
{
|
||||
auto entity = GetEntity();
|
||||
return entity != nullptr ? entity->x : 0;
|
||||
}
|
||||
void x_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto entity = GetEntity();
|
||||
if (entity != nullptr)
|
||||
{
|
||||
entity->MoveTo({ value, entity->y, entity->z });
|
||||
}
|
||||
}
|
||||
|
||||
// y getter and setter
|
||||
int32_t y_get() const
|
||||
{
|
||||
auto entity = GetEntity();
|
||||
return entity != nullptr ? entity->y : 0;
|
||||
}
|
||||
void y_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto entity = GetEntity();
|
||||
if (entity != nullptr)
|
||||
{
|
||||
entity->MoveTo({ entity->x, value, entity->z });
|
||||
}
|
||||
}
|
||||
|
||||
// z getter and setter
|
||||
int16_t z_get() const
|
||||
{
|
||||
auto entity = GetEntity();
|
||||
return entity != nullptr ? entity->z : 0;
|
||||
}
|
||||
void z_set(int16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto entity = GetEntity();
|
||||
if (entity != nullptr)
|
||||
{
|
||||
entity->MoveTo({ entity->x, entity->y, value });
|
||||
}
|
||||
}
|
||||
|
||||
void remove()
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto entity = GetEntity();
|
||||
if (entity != nullptr)
|
||||
{
|
||||
entity->Invalidate();
|
||||
switch (entity->Type)
|
||||
{
|
||||
case EntityType::Vehicle:
|
||||
duk_error(ctx, DUK_ERR_ERROR, "Removing a vehicle is currently unsupported.");
|
||||
break;
|
||||
case EntityType::Guest:
|
||||
case EntityType::Staff:
|
||||
{
|
||||
auto peep = entity->As<Peep>();
|
||||
// We can't remove a single peep from a ride at the moment as this can cause complications with the
|
||||
// vehicle car having an unsupported peep capacity.
|
||||
if (peep == nullptr || peep->State == PeepState::OnRide || peep->State == PeepState::EnteringRide)
|
||||
{
|
||||
duk_error(ctx, DUK_ERR_ERROR, "Removing a peep that is on a ride is currently unsupported.");
|
||||
}
|
||||
else
|
||||
{
|
||||
peep->Remove();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EntityType::SteamParticle:
|
||||
case EntityType::MoneyEffect:
|
||||
case EntityType::CrashedVehicleParticle:
|
||||
case EntityType::ExplosionCloud:
|
||||
case EntityType::CrashSplash:
|
||||
case EntityType::ExplosionFlare:
|
||||
case EntityType::JumpingFountain:
|
||||
case EntityType::Balloon:
|
||||
case EntityType::Duck:
|
||||
case EntityType::Litter:
|
||||
sprite_remove(entity);
|
||||
break;
|
||||
case EntityType::Null:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SpriteBase* GetEntity() const
|
||||
{
|
||||
return ::GetEntity(_id);
|
||||
}
|
||||
|
||||
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");
|
||||
dukglue_register_property(ctx, &ScEntity::z_get, &ScEntity::z_set, "z");
|
||||
dukglue_register_method(ctx, &ScEntity::remove, "remove");
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,340 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScGuest.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScGuest::ScGuest(uint16_t id)
|
||||
: ScPeep(id)
|
||||
{
|
||||
}
|
||||
|
||||
void ScGuest::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_set_base_class<ScPeep, ScGuest>(ctx);
|
||||
dukglue_register_property(ctx, &ScGuest::tshirtColour_get, &ScGuest::tshirtColour_set, "tshirtColour");
|
||||
dukglue_register_property(ctx, &ScGuest::trousersColour_get, &ScGuest::trousersColour_set, "trousersColour");
|
||||
dukglue_register_property(ctx, &ScGuest::balloonColour_get, &ScGuest::balloonColour_set, "balloonColour");
|
||||
dukglue_register_property(ctx, &ScGuest::hatColour_get, &ScGuest::hatColour_set, "hatColour");
|
||||
dukglue_register_property(ctx, &ScGuest::umbrellaColour_get, &ScGuest::umbrellaColour_set, "umbrellaColour");
|
||||
dukglue_register_property(ctx, &ScGuest::happiness_get, &ScGuest::happiness_set, "happiness");
|
||||
dukglue_register_property(ctx, &ScGuest::happinessTarget_get, &ScGuest::happinessTarget_set, "happinessTarget");
|
||||
dukglue_register_property(ctx, &ScGuest::nausea_get, &ScGuest::nausea_set, "nausea");
|
||||
dukglue_register_property(ctx, &ScGuest::nauseaTarget_get, &ScGuest::nauseaTarget_set, "nauseaTarget");
|
||||
dukglue_register_property(ctx, &ScGuest::hunger_get, &ScGuest::hunger_set, "hunger");
|
||||
dukglue_register_property(ctx, &ScGuest::thirst_get, &ScGuest::thirst_set, "thirst");
|
||||
dukglue_register_property(ctx, &ScGuest::toilet_get, &ScGuest::toilet_set, "toilet");
|
||||
dukglue_register_property(ctx, &ScGuest::mass_get, &ScGuest::mass_set, "mass");
|
||||
dukglue_register_property(ctx, &ScGuest::minIntensity_get, &ScGuest::minIntensity_set, "minIntensity");
|
||||
dukglue_register_property(ctx, &ScGuest::maxIntensity_get, &ScGuest::maxIntensity_set, "maxIntensity");
|
||||
dukglue_register_property(ctx, &ScGuest::nauseaTolerance_get, &ScGuest::nauseaTolerance_set, "nauseaTolerance");
|
||||
dukglue_register_property(ctx, &ScGuest::cash_get, &ScGuest::cash_set, "cash");
|
||||
dukglue_register_property(ctx, &ScGuest::isInPark_get, nullptr, "isInPark");
|
||||
dukglue_register_property(ctx, &ScGuest::isLost_get, nullptr, "isLost");
|
||||
dukglue_register_property(ctx, &ScGuest::lostCountdown_get, &ScGuest::lostCountdown_set, "lostCountdown");
|
||||
}
|
||||
|
||||
Guest* ScGuest::GetGuest() const
|
||||
{
|
||||
return ::GetEntity<Guest>(_id);
|
||||
}
|
||||
|
||||
uint8_t ScGuest::tshirtColour_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->TshirtColour : 0;
|
||||
}
|
||||
void ScGuest::tshirtColour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->TshirtColour = value;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::trousersColour_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->TrousersColour : 0;
|
||||
}
|
||||
void ScGuest::trousersColour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->TrousersColour = value;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::balloonColour_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->BalloonColour : 0;
|
||||
}
|
||||
void ScGuest::balloonColour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->BalloonColour = value;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::hatColour_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->HatColour : 0;
|
||||
}
|
||||
void ScGuest::hatColour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->HatColour = value;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::umbrellaColour_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->UmbrellaColour : 0;
|
||||
}
|
||||
void ScGuest::umbrellaColour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->UmbrellaColour = value;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::happiness_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Happiness : 0;
|
||||
}
|
||||
void ScGuest::happiness_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Happiness = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::happinessTarget_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->HappinessTarget : 0;
|
||||
}
|
||||
void ScGuest::happinessTarget_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->HappinessTarget = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::nausea_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Nausea : 0;
|
||||
}
|
||||
void ScGuest::nausea_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Nausea = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::nauseaTarget_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->NauseaTarget : 0;
|
||||
}
|
||||
void ScGuest::nauseaTarget_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->NauseaTarget = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::hunger_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Hunger : 0;
|
||||
}
|
||||
void ScGuest::hunger_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Hunger = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::thirst_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Thirst : 0;
|
||||
}
|
||||
void ScGuest::thirst_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Thirst = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::toilet_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Toilet : 0;
|
||||
}
|
||||
void ScGuest::toilet_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Toilet = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::mass_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Mass : 0;
|
||||
}
|
||||
void ScGuest::mass_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Mass = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::minIntensity_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Intensity.GetMinimum() : 0;
|
||||
}
|
||||
void ScGuest::minIntensity_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Intensity = peep->Intensity.WithMinimum(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::maxIntensity_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->Intensity.GetMaximum() : 0;
|
||||
}
|
||||
void ScGuest::maxIntensity_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->Intensity = peep->Intensity.WithMaximum(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScGuest::nauseaTolerance_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? EnumValue(peep->NauseaTolerance) : 0;
|
||||
}
|
||||
void ScGuest::nauseaTolerance_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->NauseaTolerance = static_cast<PeepNauseaTolerance>(std::min<uint8_t>(value, 3));
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScGuest::cash_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->CashInPocket : 0;
|
||||
}
|
||||
void ScGuest::cash_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->CashInPocket = std::max(0, value);
|
||||
}
|
||||
}
|
||||
|
||||
bool ScGuest::isInPark_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return (peep != nullptr && !peep->OutsideOfPark);
|
||||
}
|
||||
|
||||
bool ScGuest::isLost_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return (peep != nullptr && peep->GuestIsLostCountdown < 90);
|
||||
}
|
||||
|
||||
uint8_t ScGuest::lostCountdown_get() const
|
||||
{
|
||||
auto peep = GetGuest();
|
||||
return peep != nullptr ? peep->GuestIsLostCountdown : 0;
|
||||
}
|
||||
void ScGuest::lostCountdown_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetGuest();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->GuestIsLostCountdown = value;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,89 @@
|
|||
/*****************************************************************************
|
||||
* 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 "ScPeep.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScGuest : public ScPeep
|
||||
{
|
||||
public:
|
||||
ScGuest(uint16_t id);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
Guest* GetGuest() const;
|
||||
|
||||
uint8_t tshirtColour_get() const;
|
||||
void tshirtColour_set(uint8_t value);
|
||||
|
||||
uint8_t trousersColour_get() const;
|
||||
void trousersColour_set(uint8_t value);
|
||||
|
||||
uint8_t balloonColour_get() const;
|
||||
void balloonColour_set(uint8_t value);
|
||||
|
||||
uint8_t hatColour_get() const;
|
||||
void hatColour_set(uint8_t value);
|
||||
|
||||
uint8_t umbrellaColour_get() const;
|
||||
void umbrellaColour_set(uint8_t value);
|
||||
|
||||
uint8_t happiness_get() const;
|
||||
void happiness_set(uint8_t value);
|
||||
|
||||
uint8_t happinessTarget_get() const;
|
||||
void happinessTarget_set(uint8_t value);
|
||||
|
||||
uint8_t nausea_get() const;
|
||||
void nausea_set(uint8_t value);
|
||||
|
||||
uint8_t nauseaTarget_get() const;
|
||||
void nauseaTarget_set(uint8_t value);
|
||||
|
||||
uint8_t hunger_get() const;
|
||||
void hunger_set(uint8_t value);
|
||||
|
||||
uint8_t thirst_get() const;
|
||||
void thirst_set(uint8_t value);
|
||||
|
||||
uint8_t toilet_get() const;
|
||||
void toilet_set(uint8_t value);
|
||||
|
||||
uint8_t mass_get() const;
|
||||
void mass_set(uint8_t value);
|
||||
|
||||
uint8_t minIntensity_get() const;
|
||||
void minIntensity_set(uint8_t value);
|
||||
|
||||
uint8_t maxIntensity_get() const;
|
||||
void maxIntensity_set(uint8_t value);
|
||||
|
||||
uint8_t nauseaTolerance_get() const;
|
||||
void nauseaTolerance_set(uint8_t value);
|
||||
|
||||
int32_t cash_get() const;
|
||||
void cash_set(int32_t value);
|
||||
|
||||
bool isInPark_get() const;
|
||||
|
||||
bool isLost_get() const;
|
||||
|
||||
uint8_t lostCountdown_get() const;
|
||||
void lostCountdown_set(uint8_t value);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,78 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScLitter.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static const DukEnumMap<Litter::Type> LitterTypeMap({
|
||||
{ "vomit", Litter::Type::Vomit },
|
||||
{ "vomit_alt", Litter::Type::VomitAlt },
|
||||
{ "empty_can", Litter::Type::EmptyCan },
|
||||
{ "rubbish", Litter::Type::Rubbish },
|
||||
{ "burger_box", Litter::Type::BurgerBox },
|
||||
{ "empty_cup", Litter::Type::EmptyCup },
|
||||
{ "empty_box", Litter::Type::EmptyBox },
|
||||
{ "empty_bottle", Litter::Type::EmptyBottle },
|
||||
{ "empty_bowl_red", Litter::Type::EmptyBowlRed },
|
||||
{ "empty_drink_carton", Litter::Type::EmptyDrinkCarton },
|
||||
{ "empty_juice_cup", Litter::Type::EmptyJuiceCup },
|
||||
{ "empty_bowl_blue", Litter::Type::EmptyBowlBlue },
|
||||
});
|
||||
|
||||
ScLitter::ScLitter(uint16_t Id)
|
||||
: ScEntity(Id)
|
||||
{
|
||||
}
|
||||
|
||||
void ScLitter::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_set_base_class<ScEntity, ScLitter>(ctx);
|
||||
dukglue_register_property(ctx, &ScLitter::litterType_get, &ScLitter::litterType_set, "litterType");
|
||||
dukglue_register_property(ctx, &ScLitter::creationTick_get, nullptr, "creationTick");
|
||||
}
|
||||
|
||||
Litter* ScLitter::GetLitter() const
|
||||
{
|
||||
return ::GetEntity<Litter>(_id);
|
||||
}
|
||||
|
||||
std::string ScLitter::litterType_get() const
|
||||
{
|
||||
auto* litter = GetLitter();
|
||||
auto it = LitterTypeMap.find(litter->SubType);
|
||||
if (it == LitterTypeMap.end())
|
||||
return "";
|
||||
return std::string{ it->first };
|
||||
}
|
||||
|
||||
void ScLitter::litterType_set(const std::string& litterType)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
auto it = LitterTypeMap.find(litterType);
|
||||
if (it == LitterTypeMap.end())
|
||||
return;
|
||||
auto* litter = GetLitter();
|
||||
litter->SubType = it->second;
|
||||
}
|
||||
|
||||
uint32_t ScLitter::creationTick_get() const
|
||||
{
|
||||
auto* litter = GetLitter();
|
||||
if (litter == nullptr)
|
||||
return 0;
|
||||
return litter->creationTick;
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,36 @@
|
|||
/*****************************************************************************
|
||||
* 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 "ScEntity.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScLitter : public ScEntity
|
||||
{
|
||||
public:
|
||||
ScLitter(uint16_t Id);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
Litter* GetLitter() const;
|
||||
|
||||
std::string litterType_get() const;
|
||||
void litterType_set(const std::string& litterType);
|
||||
|
||||
uint32_t creationTick_get() const;
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,180 @@
|
|||
/*****************************************************************************
|
||||
* 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 "ScEntity.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static const DukEnumMap<uint32_t> PeepFlagMap({
|
||||
{ "leavingPark", PEEP_FLAGS_LEAVING_PARK },
|
||||
{ "slowWalk", PEEP_FLAGS_SLOW_WALK },
|
||||
{ "tracking", PEEP_FLAGS_TRACKING },
|
||||
{ "waving", PEEP_FLAGS_WAVING },
|
||||
{ "hasPaidForParkEntry", PEEP_FLAGS_HAS_PAID_FOR_PARK_ENTRY },
|
||||
{ "photo", PEEP_FLAGS_PHOTO },
|
||||
{ "painting", PEEP_FLAGS_PAINTING },
|
||||
{ "wow", PEEP_FLAGS_WOW },
|
||||
{ "litter", PEEP_FLAGS_LITTER },
|
||||
{ "lost", PEEP_FLAGS_LOST },
|
||||
{ "hunger", PEEP_FLAGS_HUNGER },
|
||||
{ "toilet", PEEP_FLAGS_TOILET },
|
||||
{ "crowded", PEEP_FLAGS_CROWDED },
|
||||
{ "happiness", PEEP_FLAGS_HAPPINESS },
|
||||
{ "nausea", PEEP_FLAGS_NAUSEA },
|
||||
{ "purple", PEEP_FLAGS_PURPLE },
|
||||
{ "pizza", PEEP_FLAGS_PIZZA },
|
||||
{ "explode", PEEP_FLAGS_EXPLODE },
|
||||
{ "rideShouldBeMarkedAsFavourite", PEEP_FLAGS_RIDE_SHOULD_BE_MARKED_AS_FAVOURITE },
|
||||
{ "parkEntranceChosen", PEEP_FLAGS_PARK_ENTRANCE_CHOSEN },
|
||||
{ "contagious", PEEP_FLAGS_CONTAGIOUS },
|
||||
{ "joy", PEEP_FLAGS_JOY },
|
||||
{ "angry", PEEP_FLAGS_ANGRY },
|
||||
{ "iceCream", PEEP_FLAGS_ICE_CREAM },
|
||||
{ "hereWeAre", PEEP_FLAGS_HERE_WE_ARE },
|
||||
});
|
||||
|
||||
class ScPeep : public ScEntity
|
||||
{
|
||||
public:
|
||||
ScPeep(uint16_t id)
|
||||
: ScEntity(id)
|
||||
{
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_set_base_class<ScEntity, ScPeep>(ctx);
|
||||
dukglue_register_property(ctx, &ScPeep::peepType_get, nullptr, "peepType");
|
||||
dukglue_register_property(ctx, &ScPeep::name_get, &ScPeep::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScPeep::destination_get, &ScPeep::destination_set, "destination");
|
||||
dukglue_register_property(ctx, &ScPeep::energy_get, &ScPeep::energy_set, "energy");
|
||||
dukglue_register_property(ctx, &ScPeep::energyTarget_get, &ScPeep::energyTarget_set, "energyTarget");
|
||||
dukglue_register_method(ctx, &ScPeep::getFlag, "getFlag");
|
||||
dukglue_register_method(ctx, &ScPeep::setFlag, "setFlag");
|
||||
}
|
||||
|
||||
private:
|
||||
std::string peepType_get() const
|
||||
{
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
return peep->Is<Staff>() ? "staff" : "guest";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
bool getFlag(const std::string& key) const
|
||||
{
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
auto mask = PeepFlagMap[key];
|
||||
return (peep->PeepFlags & mask) != 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void setFlag(const std::string& key, bool value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
auto mask = PeepFlagMap[key];
|
||||
if (value)
|
||||
peep->PeepFlags |= mask;
|
||||
else
|
||||
peep->PeepFlags &= ~mask;
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
DukValue destination_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
return ToDuk(ctx, peep->GetDestination());
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void destination_set(const DukValue& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
auto pos = FromDuk<CoordsXY>(value);
|
||||
peep->SetDestination(pos);
|
||||
peep->Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
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->EnergyTarget : 0;
|
||||
}
|
||||
void energyTarget_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetPeep();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->EnergyTarget = value;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
Peep* GetPeep() const
|
||||
{
|
||||
return ::GetEntity<Peep>(_id);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,141 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScStaff.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScStaff::ScStaff(uint16_t Id)
|
||||
: ScPeep(Id)
|
||||
{
|
||||
}
|
||||
|
||||
void ScStaff::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_set_base_class<ScPeep, ScStaff>(ctx);
|
||||
dukglue_register_property(ctx, &ScStaff::staffType_get, &ScStaff::staffType_set, "staffType");
|
||||
dukglue_register_property(ctx, &ScStaff::colour_get, &ScStaff::colour_set, "colour");
|
||||
dukglue_register_property(ctx, &ScStaff::costume_get, &ScStaff::costume_set, "costume");
|
||||
dukglue_register_property(ctx, &ScStaff::orders_get, &ScStaff::orders_set, "orders");
|
||||
}
|
||||
|
||||
Staff* ScStaff::GetStaff() const
|
||||
{
|
||||
return ::GetEntity<Staff>(_id);
|
||||
}
|
||||
|
||||
std::string ScStaff::staffType_get() const
|
||||
{
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
switch (peep->AssignedStaffType)
|
||||
{
|
||||
case StaffType::Handyman:
|
||||
return "handyman";
|
||||
case StaffType::Mechanic:
|
||||
return "mechanic";
|
||||
case StaffType::Security:
|
||||
return "security";
|
||||
case StaffType::Entertainer:
|
||||
return "entertainer";
|
||||
case StaffType::Count:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void ScStaff::staffType_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
if (value == "handyman" && peep->AssignedStaffType != StaffType::Handyman)
|
||||
{
|
||||
peep->AssignedStaffType = StaffType::Handyman;
|
||||
peep->SpriteType = PeepSpriteType::Handyman;
|
||||
}
|
||||
else if (value == "mechanic" && peep->AssignedStaffType != StaffType::Mechanic)
|
||||
{
|
||||
peep->AssignedStaffType = StaffType::Mechanic;
|
||||
peep->SpriteType = PeepSpriteType::Mechanic;
|
||||
}
|
||||
else if (value == "security" && peep->AssignedStaffType != StaffType::Security)
|
||||
{
|
||||
peep->AssignedStaffType = StaffType::Security;
|
||||
peep->SpriteType = PeepSpriteType::Security;
|
||||
}
|
||||
else if (value == "entertainer" && peep->AssignedStaffType != StaffType::Entertainer)
|
||||
{
|
||||
peep->AssignedStaffType = StaffType::Entertainer;
|
||||
peep->SpriteType = PeepSpriteType::EntertainerPanda;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScStaff::colour_get() const
|
||||
{
|
||||
auto peep = GetStaff();
|
||||
return peep != nullptr ? peep->TshirtColour : 0;
|
||||
}
|
||||
|
||||
void ScStaff::colour_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->TshirtColour = value;
|
||||
peep->TrousersColour = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScStaff::costume_get() const
|
||||
{
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr && peep->AssignedStaffType == StaffType::Entertainer)
|
||||
{
|
||||
return peep->GetCostume();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScStaff::costume_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->SetCostume(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScStaff::orders_get() const
|
||||
{
|
||||
auto peep = GetStaff();
|
||||
return peep != nullptr ? peep->StaffOrders : 0;
|
||||
}
|
||||
|
||||
void ScStaff::orders_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto peep = GetStaff();
|
||||
if (peep != nullptr)
|
||||
{
|
||||
peep->StaffOrders = value;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,43 @@
|
|||
/*****************************************************************************
|
||||
* 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 "ScPeep.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScStaff : public ScPeep
|
||||
{
|
||||
public:
|
||||
ScStaff(uint16_t Id);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
Staff* GetStaff() const;
|
||||
|
||||
std::string staffType_get() const;
|
||||
void staffType_set(const std::string& value);
|
||||
|
||||
uint8_t colour_get() const;
|
||||
void colour_set(uint8_t value);
|
||||
|
||||
uint8_t costume_get() const;
|
||||
void costume_set(uint8_t value);
|
||||
|
||||
uint8_t orders_get() const;
|
||||
void orders_set(uint8_t value);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,465 @@
|
|||
/*****************************************************************************
|
||||
* 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"
|
||||
|
||||
#include "../ride/ScRide.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
|
|
@ -11,9 +11,9 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Cheats.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Cheats.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
|
@ -11,11 +11,11 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../config/Config.h"
|
||||
# include "../localisation/LocalisationService.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../config/Config.h"
|
||||
# include "../../../localisation/LocalisationService.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
|
@ -11,9 +11,9 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../interface/InteractiveConsole.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../interface/InteractiveConsole.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
|
@ -11,17 +11,17 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../actions/GameAction.h"
|
||||
# include "../interface/Screenshot.h"
|
||||
# include "../localisation/Formatting.h"
|
||||
# include "../object/ObjectManager.h"
|
||||
# include "../scenario/Scenario.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "HookEngine.h"
|
||||
# include "ScConfiguration.hpp"
|
||||
# include "ScDisposable.hpp"
|
||||
# include "ScObject.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../actions/GameAction.h"
|
||||
# include "../../../interface/Screenshot.h"
|
||||
# include "../../../localisation/Formatting.h"
|
||||
# include "../../../object/ObjectManager.h"
|
||||
# include "../../../scenario/Scenario.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../HookEngine.h"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "../game/ScConfiguration.hpp"
|
||||
# include "../game/ScDisposable.hpp"
|
||||
# include "../object/ScObject.hpp"
|
||||
|
||||
# include <cstdio>
|
||||
# include <memory>
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "Duktape.hpp"
|
||||
# include "../../Duktape.hpp"
|
||||
|
||||
# include <functional>
|
||||
|
|
@ -0,0 +1,295 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScNetwork.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../actions/NetworkModifyGroupAction.h"
|
||||
# include "../../../actions/PlayerKickAction.h"
|
||||
# include "../../../network/NetworkAction.h"
|
||||
# include "../../../network/network.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScNetwork::ScNetwork(duk_context* ctx)
|
||||
: _context(ctx)
|
||||
{
|
||||
}
|
||||
|
||||
std::string ScNetwork::mode_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
switch (network_get_mode())
|
||||
{
|
||||
case NETWORK_MODE_SERVER:
|
||||
return "server";
|
||||
case NETWORK_MODE_CLIENT:
|
||||
return "client";
|
||||
}
|
||||
# endif
|
||||
return "none";
|
||||
}
|
||||
|
||||
int32_t ScNetwork::numPlayers_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_num_players();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScNetwork::numGroups_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_num_groups();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScNetwork::defaultGroup_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
return network_get_default_group();
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScNetwork::defaultGroup_set(int32_t value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto action = NetworkModifyGroupAction(ModifyGroupType::SetDefault, value);
|
||||
GameActions::Execute(&action);
|
||||
# endif
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayerGroup>> ScNetwork::groups_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScPlayerGroup>> groups;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
for (int32_t i = 0; i < numGroups; i++)
|
||||
{
|
||||
auto groupId = network_get_group_id(i);
|
||||
groups.push_back(std::make_shared<ScPlayerGroup>(groupId));
|
||||
}
|
||||
# endif
|
||||
return groups;
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayer>> ScNetwork::players_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScPlayer>> players;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
for (int32_t i = 0; i < numPlayers; i++)
|
||||
{
|
||||
auto playerId = network_get_player_id(i);
|
||||
players.push_back(std::make_shared<ScPlayer>(playerId));
|
||||
}
|
||||
# endif
|
||||
return players;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayer> ScNetwork::currentPlayer_get() const
|
||||
{
|
||||
std::shared_ptr<ScPlayer> player;
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto playerId = network_get_current_player_id();
|
||||
player = std::make_shared<ScPlayer>(playerId);
|
||||
# endif
|
||||
return player;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayer> ScNetwork::getPlayer(int32_t index) const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
if (index < numPlayers)
|
||||
{
|
||||
auto playerId = network_get_player_id(index);
|
||||
return std::make_shared<ScPlayer>(playerId);
|
||||
}
|
||||
# endif
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DukValue ScNetwork::stats_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto obj = OpenRCT2::Scripting::DukObject(_context);
|
||||
auto networkStats = network_get_stats();
|
||||
{
|
||||
duk_push_array(_context);
|
||||
duk_uarridx_t index = 0;
|
||||
for (auto v : networkStats.bytesReceived)
|
||||
{
|
||||
duk_push_number(_context, v);
|
||||
duk_put_prop_index(_context, -2, index);
|
||||
index++;
|
||||
}
|
||||
obj.Set("bytesReceived", DukValue::take_from_stack(_context));
|
||||
}
|
||||
{
|
||||
duk_push_array(_context);
|
||||
duk_uarridx_t index = 0;
|
||||
for (auto v : networkStats.bytesSent)
|
||||
{
|
||||
duk_push_number(_context, v);
|
||||
duk_put_prop_index(_context, -2, index);
|
||||
index++;
|
||||
}
|
||||
obj.Set("bytesSent", DukValue::take_from_stack(_context));
|
||||
}
|
||||
return obj.Take();
|
||||
# else
|
||||
return ToDuk(_context, nullptr);
|
||||
# endif
|
||||
}
|
||||
|
||||
std::shared_ptr<ScPlayerGroup> ScNetwork::getGroup(int32_t index) const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
if (index < numGroups)
|
||||
{
|
||||
auto groupId = network_get_group_id(index);
|
||||
return std::make_shared<ScPlayerGroup>(groupId);
|
||||
}
|
||||
# endif
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ScNetwork::addGroup()
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto networkModifyGroup = NetworkModifyGroupAction(ModifyGroupType::AddGroup);
|
||||
GameActions::Execute(&networkModifyGroup);
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScNetwork::removeGroup(int32_t index)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numGroups = network_get_num_groups();
|
||||
if (index < numGroups)
|
||||
{
|
||||
auto groupId = network_get_group_id(index);
|
||||
auto networkAction = NetworkModifyGroupAction(ModifyGroupType::RemoveGroup, groupId);
|
||||
GameActions::Execute(&networkAction);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScNetwork::kickPlayer(int32_t index)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto numPlayers = network_get_num_players();
|
||||
if (index < numPlayers)
|
||||
{
|
||||
auto playerId = network_get_player_id(index);
|
||||
auto kickPlayerAction = PlayerKickAction(playerId);
|
||||
GameActions::Execute(&kickPlayerAction);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScNetwork::sendMessage(std::string message, DukValue players)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
if (players.is_array())
|
||||
{
|
||||
if (network_get_mode() == NETWORK_MODE_SERVER)
|
||||
{
|
||||
std::vector<uint8_t> playerIds;
|
||||
auto playerArray = players.as_array();
|
||||
for (const auto& item : playerArray)
|
||||
{
|
||||
if (item.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
playerIds.push_back(static_cast<uint8_t>(item.as_int()));
|
||||
}
|
||||
}
|
||||
if (!playerArray.empty())
|
||||
{
|
||||
network_send_chat(message.c_str(), playerIds);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_error(players.context(), DUK_ERR_ERROR, "Only servers can send private messages.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
network_send_chat(message.c_str());
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScListener> ScNetwork::createListener()
|
||||
{
|
||||
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||
auto plugin = scriptEngine.GetExecInfo().GetCurrentPlugin();
|
||||
auto socket = std::make_shared<ScListener>(plugin);
|
||||
scriptEngine.AddSocket(socket);
|
||||
return socket;
|
||||
}
|
||||
# else
|
||||
void ScNetwork::createListener()
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Networking has been disabled.");
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScSocket> ScNetwork::createSocket()
|
||||
{
|
||||
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||
auto plugin = scriptEngine.GetExecInfo().GetCurrentPlugin();
|
||||
auto socket = std::make_shared<ScSocket>(plugin);
|
||||
scriptEngine.AddSocket(socket);
|
||||
return socket;
|
||||
}
|
||||
# else
|
||||
void ScNetwork::createSocket()
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Networking has been disabled.");
|
||||
}
|
||||
# endif
|
||||
|
||||
void ScNetwork::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScNetwork::mode_get, nullptr, "mode");
|
||||
dukglue_register_property(ctx, &ScNetwork::numGroups_get, nullptr, "numGroups");
|
||||
dukglue_register_property(ctx, &ScNetwork::numPlayers_get, nullptr, "numPlayers");
|
||||
dukglue_register_property(ctx, &ScNetwork::groups_get, nullptr, "groups");
|
||||
dukglue_register_property(ctx, &ScNetwork::players_get, nullptr, "players");
|
||||
dukglue_register_property(ctx, &ScNetwork::currentPlayer_get, nullptr, "currentPlayer");
|
||||
dukglue_register_property(ctx, &ScNetwork::defaultGroup_get, &ScNetwork::defaultGroup_set, "defaultGroup");
|
||||
dukglue_register_property(ctx, &ScNetwork::stats_get, nullptr, "stats");
|
||||
dukglue_register_method(ctx, &ScNetwork::addGroup, "addGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::getGroup, "getGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::removeGroup, "removeGroup");
|
||||
dukglue_register_method(ctx, &ScNetwork::getPlayer, "getPlayer");
|
||||
dukglue_register_method(ctx, &ScNetwork::kickPlayer, "kickPlayer");
|
||||
dukglue_register_method(ctx, &ScNetwork::sendMessage, "sendMessage");
|
||||
|
||||
dukglue_register_method(ctx, &ScNetwork::createListener, "createListener");
|
||||
dukglue_register_method(ctx, &ScNetwork::createSocket, "createSocket");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,74 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../Duktape.hpp"
|
||||
# include "ScPlayer.hpp"
|
||||
# include "ScPlayerGroup.hpp"
|
||||
# include "ScSocket.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScNetwork
|
||||
{
|
||||
private:
|
||||
# ifdef __clang__
|
||||
[[maybe_unused]]
|
||||
# endif
|
||||
duk_context* _context;
|
||||
|
||||
public:
|
||||
ScNetwork(duk_context* ctx);
|
||||
|
||||
std::string mode_get() const;
|
||||
int32_t numPlayers_get() const;
|
||||
int32_t numGroups_get() const;
|
||||
int32_t defaultGroup_get() const;
|
||||
void defaultGroup_set(int32_t value);
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayerGroup>> groups_get() const;
|
||||
|
||||
std::vector<std::shared_ptr<ScPlayer>> players_get() const;
|
||||
|
||||
std::shared_ptr<ScPlayer> currentPlayer_get() const;
|
||||
|
||||
std::shared_ptr<ScPlayer> getPlayer(int32_t index) const;
|
||||
|
||||
DukValue stats_get() const;
|
||||
|
||||
std::shared_ptr<ScPlayerGroup> getGroup(int32_t index) const;
|
||||
|
||||
void addGroup();
|
||||
|
||||
void removeGroup(int32_t index);
|
||||
|
||||
void kickPlayer(int32_t index);
|
||||
|
||||
void sendMessage(std::string message, DukValue players);
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScListener> createListener();
|
||||
# else
|
||||
void createListener();
|
||||
# endif
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
std::shared_ptr<ScSocket> createSocket();
|
||||
# else
|
||||
void createSocket();
|
||||
# endif
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,122 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScPlayer.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../actions/PlayerSetGroupAction.h"
|
||||
# include "../../../network/NetworkAction.h"
|
||||
# include "../../../network/network.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScPlayer::ScPlayer(int32_t id)
|
||||
: _id(id)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t ScPlayer::id_get() const
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
std::string ScPlayer::name_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_name(index);
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScPlayer::group_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_group(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
void ScPlayer::group_set(int32_t value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto playerSetGroupAction = PlayerSetGroupAction(_id, value);
|
||||
GameActions::Execute(&playerSetGroupAction);
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScPlayer::ping_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_ping(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScPlayer::commandsRan_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_commands_ran(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
int32_t ScPlayer::moneySpent_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_player_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_player_money_spent(index);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
std::string ScPlayer::ipAddress_get() const
|
||||
{
|
||||
return network_get_player_ip_address(_id);
|
||||
}
|
||||
|
||||
std::string ScPlayer::publicKeyHash_get() const
|
||||
{
|
||||
return network_get_player_public_key_hash(_id);
|
||||
}
|
||||
|
||||
void ScPlayer::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPlayer::id_get, nullptr, "id");
|
||||
dukglue_register_property(ctx, &ScPlayer::name_get, nullptr, "name");
|
||||
dukglue_register_property(ctx, &ScPlayer::group_get, &ScPlayer::group_set, "group");
|
||||
dukglue_register_property(ctx, &ScPlayer::ping_get, nullptr, "ping");
|
||||
dukglue_register_property(ctx, &ScPlayer::commandsRan_get, nullptr, "commandsRan");
|
||||
dukglue_register_property(ctx, &ScPlayer::moneySpent_get, nullptr, "moneySpent");
|
||||
dukglue_register_property(ctx, &ScPlayer::ipAddress_get, nullptr, "ipAddress");
|
||||
dukglue_register_property(ctx, &ScPlayer::publicKeyHash_get, nullptr, "publicKeyHash");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,50 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../Duktape.hpp"
|
||||
|
||||
# include <string.h>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScPlayer
|
||||
{
|
||||
private:
|
||||
int32_t _id;
|
||||
|
||||
public:
|
||||
ScPlayer(int32_t id);
|
||||
|
||||
int32_t id_get() const;
|
||||
|
||||
std::string name_get() const;
|
||||
|
||||
int32_t group_get() const;
|
||||
void group_set(int32_t value);
|
||||
|
||||
int32_t ping_get() const;
|
||||
|
||||
int32_t commandsRan_get() const;
|
||||
|
||||
int32_t moneySpent_get() const;
|
||||
|
||||
std::string ipAddress_get() const;
|
||||
|
||||
std::string publicKeyHash_get() const;
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,150 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScPlayerGroup.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../actions/NetworkModifyGroupAction.h"
|
||||
# include "../../../actions/PlayerSetGroupAction.h"
|
||||
# include "../../../network/NetworkAction.h"
|
||||
# include "../../../network/network.h"
|
||||
# include "../../Duktape.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScPlayerGroup::ScPlayerGroup(int32_t id)
|
||||
: _id(id)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t ScPlayerGroup::id_get()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
std::string ScPlayerGroup::name_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_group_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
return network_get_group_name(index);
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScPlayerGroup::name_set(std::string value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto action = NetworkModifyGroupAction(ModifyGroupType::SetName, _id, value);
|
||||
GameActions::Execute(&action);
|
||||
# endif
|
||||
}
|
||||
|
||||
# ifndef DISABLE_NETWORK
|
||||
static std::string TransformPermissionKeyToJS(const std::string& s)
|
||||
{
|
||||
auto result = s.substr(sizeof("PERMISSION_") - 1);
|
||||
for (auto& c : result)
|
||||
{
|
||||
c = std::tolower(c);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static std::string TransformPermissionKeyToInternal(const std::string& s)
|
||||
{
|
||||
auto result = "PERMISSION_" + s;
|
||||
for (auto& c : result)
|
||||
{
|
||||
c = std::toupper(c);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
# endif
|
||||
|
||||
std::vector<std::string> ScPlayerGroup::permissions_get() const
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto index = network_get_group_index(_id);
|
||||
if (index == -1)
|
||||
return {};
|
||||
|
||||
// Create array of permissions
|
||||
std::vector<std::string> result;
|
||||
auto permissionIndex = 0;
|
||||
for (const auto& action : NetworkActions::Actions)
|
||||
{
|
||||
if (network_can_perform_action(index, static_cast<NetworkPermission>(permissionIndex)))
|
||||
{
|
||||
result.push_back(TransformPermissionKeyToJS(action.PermissionName));
|
||||
}
|
||||
permissionIndex++;
|
||||
}
|
||||
return result;
|
||||
# else
|
||||
return {};
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScPlayerGroup::permissions_set(std::vector<std::string> value)
|
||||
{
|
||||
# ifndef DISABLE_NETWORK
|
||||
auto groupIndex = network_get_group_index(_id);
|
||||
if (groupIndex == -1)
|
||||
return;
|
||||
|
||||
// First clear all permissions
|
||||
auto networkAction = NetworkModifyGroupAction(ModifyGroupType::SetPermissions, _id, "", 0, PermissionState::ClearAll);
|
||||
GameActions::Execute(&networkAction);
|
||||
|
||||
std::vector<bool> enabledPermissions;
|
||||
enabledPermissions.resize(NetworkActions::Actions.size());
|
||||
for (const auto& p : value)
|
||||
{
|
||||
auto permissionName = TransformPermissionKeyToInternal(p);
|
||||
|
||||
auto permissionIndex = 0;
|
||||
for (const auto& action : NetworkActions::Actions)
|
||||
{
|
||||
if (action.PermissionName == permissionName)
|
||||
{
|
||||
enabledPermissions[permissionIndex] = true;
|
||||
}
|
||||
permissionIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < enabledPermissions.size(); i++)
|
||||
{
|
||||
auto toggle
|
||||
= (enabledPermissions[i] != (network_can_perform_action(groupIndex, static_cast<NetworkPermission>(i)) != 0));
|
||||
if (toggle)
|
||||
{
|
||||
auto networkAction2 = NetworkModifyGroupAction(
|
||||
ModifyGroupType::SetPermissions, _id, "", static_cast<uint32_t>(i), PermissionState::Toggle);
|
||||
GameActions::Execute(&networkAction2);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void ScPlayerGroup::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::id_get, nullptr, "id");
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::name_get, &ScPlayerGroup::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScPlayerGroup::permissions_get, &ScPlayerGroup::permissions_set, "permissions");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,41 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../Duktape.hpp"
|
||||
|
||||
# include <string>
|
||||
# include <vector>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScPlayerGroup
|
||||
{
|
||||
int32_t _id;
|
||||
|
||||
public:
|
||||
ScPlayerGroup(int32_t id);
|
||||
|
||||
int32_t id_get();
|
||||
|
||||
std::string name_get() const;
|
||||
void name_set(std::string value);
|
||||
|
||||
std::vector<std::string> permissions_get() const;
|
||||
void permissions_set(std::vector<std::string> value);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -12,11 +12,11 @@
|
|||
#ifdef ENABLE_SCRIPTING
|
||||
# ifndef DISABLE_NETWORK
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../config/Config.h"
|
||||
# include "../network/Socket.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../config/Config.h"
|
||||
# include "../../../network/Socket.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
# include <vector>
|
|
@ -11,13 +11,13 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../common.h"
|
||||
# include "../object/ObjectManager.h"
|
||||
# include "../object/RideObject.h"
|
||||
# include "../object/SmallSceneryObject.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../object/ObjectManager.h"
|
||||
# include "../../../object/RideObject.h"
|
||||
# include "../../../object/SmallSceneryObject.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <optional>
|
||||
|
|
@ -0,0 +1,530 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScRide.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "../object/ScObject.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScRide::ScRide(ride_id_t rideId)
|
||||
: _rideId(rideId)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t ScRide::id_get() const
|
||||
{
|
||||
return _rideId;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScRideObject> ScRide::object_get()
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto rideObject = GetContext()->GetObjectManager().GetLoadedObject(ObjectType::Ride, ride->subtype);
|
||||
if (rideObject != nullptr)
|
||||
{
|
||||
return std::make_shared<ScRideObject>(ObjectType::Ride, ride->subtype);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int32_t ScRide::type_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->type : 0;
|
||||
}
|
||||
|
||||
std::string ScRide::classification_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
switch (ride->GetClassification())
|
||||
{
|
||||
case RideClassification::Ride:
|
||||
return "ride";
|
||||
case RideClassification::ShopOrStall:
|
||||
return "stall";
|
||||
case RideClassification::KioskOrFacility:
|
||||
return "facility";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string ScRide::name_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->GetName() : std::string();
|
||||
}
|
||||
void ScRide::name_set(std::string value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->custom_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string ScRide::status_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
switch (ride->status)
|
||||
{
|
||||
case RideStatus::Closed:
|
||||
return "closed";
|
||||
case RideStatus::Open:
|
||||
return "open";
|
||||
case RideStatus::Testing:
|
||||
return "testing";
|
||||
case RideStatus::Simulating:
|
||||
return "simulating";
|
||||
case RideStatus::Count: // Meaningless but necessary to satisfy -Wswitch
|
||||
return "count";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
uint32_t ScRide::lifecycleFlags_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->lifecycle_flags : 0;
|
||||
}
|
||||
|
||||
void ScRide::lifecycleFlags_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->lifecycle_flags = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::mode_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? static_cast<uint8_t>(ride->mode) : 0;
|
||||
}
|
||||
|
||||
void ScRide::mode_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->mode = static_cast<RideMode>(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::departFlags_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->depart_flags : 0;
|
||||
}
|
||||
|
||||
void ScRide::departFlags_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->depart_flags = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::minimumWaitingTime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->min_waiting_time : 0;
|
||||
}
|
||||
|
||||
void ScRide::minimumWaitingTime_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->min_waiting_time = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::maximumWaitingTime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->max_waiting_time : 0;
|
||||
}
|
||||
|
||||
void ScRide::maximumWaitingTime_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->max_waiting_time = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<uint16_t> ScRide::vehicles_get() const
|
||||
{
|
||||
std::vector<uint16_t> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
result.insert(result.begin(), std::begin(ride->vehicles), std::begin(ride->vehicles) + ride->num_vehicles);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<DukValue> ScRide::vehicleColours_get() const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
for (const auto& vehicleColour : ride->vehicle_colours)
|
||||
{
|
||||
result.push_back(ToDuk(ctx, vehicleColour));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScRide::vehicleColours_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto count = std::min(value.size(), std::size(ride->vehicle_colours));
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
ride->vehicle_colours[i] = FromDuk<VehicleColour>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<DukValue> ScRide::colourSchemes_get() const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
for (const auto& trackColour : ride->track_colour)
|
||||
{
|
||||
result.push_back(ToDuk(ctx, trackColour));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScRide::colourSchemes_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto count = std::min(value.size(), std::size(ride->track_colour));
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
ride->track_colour[i] = FromDuk<TrackColour>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::stationStyle_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->entrance_style : 0;
|
||||
}
|
||||
|
||||
void ScRide::stationStyle_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->entrance_style = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::music_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->music : 0;
|
||||
}
|
||||
|
||||
void ScRide::music_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->music = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScRideStation>> ScRide::stations_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScRideStation>> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
for (size_t i = 0; i < std::size(ride->stations); i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScRideStation>(ride->id, static_cast<StationIndex>(i)));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<int32_t> ScRide::price_get() const
|
||||
{
|
||||
std::vector<int32_t> result;
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto numPrices = ride->GetNumPrices();
|
||||
for (size_t i = 0; i < numPrices; i++)
|
||||
{
|
||||
result.push_back(ride->price[i]);
|
||||
};
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScRide::price_set(const std::vector<int32_t>& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
auto numPrices = std::min(value.size(), ride->GetNumPrices());
|
||||
for (size_t i = 0; i < numPrices; i++)
|
||||
{
|
||||
ride->price[i] = static_cast<money16>(value[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::excitement_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->excitement : 0;
|
||||
}
|
||||
void ScRide::excitement_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->excitement = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::intensity_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->intensity : 0;
|
||||
}
|
||||
void ScRide::intensity_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->intensity = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::nausea_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->nausea : 0;
|
||||
}
|
||||
void ScRide::nausea_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->nausea = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::totalCustomers_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->total_customers : 0;
|
||||
}
|
||||
void ScRide::totalCustomers_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->total_customers = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::buildDate_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->build_date : 0;
|
||||
}
|
||||
void ScRide::buildDate_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->build_date = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::age_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->GetAge() : 0;
|
||||
}
|
||||
|
||||
int16_t ScRide::runningCost_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->upkeep_cost : 0;
|
||||
}
|
||||
void ScRide::runningCost_set(int16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->upkeep_cost = value;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRide::totalProfit_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->total_profit : 0;
|
||||
}
|
||||
void ScRide::totalProfit_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->total_profit = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScRide::inspectionInterval_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->inspection_interval : 0;
|
||||
}
|
||||
void ScRide::inspectionInterval_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->inspection_interval = std::clamp<uint8_t>(value, RIDE_INSPECTION_EVERY_10_MINUTES, RIDE_INSPECTION_NEVER);
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScRide::value_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr && ride->value != RIDE_VALUE_UNDEFINED)
|
||||
{
|
||||
return ToDuk<int32_t>(ctx, ride->value);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void ScRide::value_set(const DukValue& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ride = GetRide();
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (value.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
ride->value = value.as_int();
|
||||
}
|
||||
else
|
||||
{
|
||||
ride->value = RIDE_VALUE_UNDEFINED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ride* ScRide::GetRide() const
|
||||
{
|
||||
return get_ride(_rideId);
|
||||
}
|
||||
|
||||
uint8_t ScRide::downtime_get() const
|
||||
{
|
||||
auto ride = GetRide();
|
||||
return ride != nullptr ? ride->downtime : 0;
|
||||
}
|
||||
|
||||
void ScRide::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::classification_get, nullptr, "classification");
|
||||
dukglue_register_property(ctx, &ScRide::name_get, &ScRide::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScRide::status_get, nullptr, "status");
|
||||
dukglue_register_property(ctx, &ScRide::lifecycleFlags_get, &ScRide::lifecycleFlags_set, "lifecycleFlags");
|
||||
dukglue_register_property(ctx, &ScRide::mode_get, &ScRide::mode_set, "mode");
|
||||
dukglue_register_property(ctx, &ScRide::departFlags_get, &ScRide::departFlags_set, "departFlags");
|
||||
dukglue_register_property(ctx, &ScRide::minimumWaitingTime_get, &ScRide::minimumWaitingTime_set, "minimumWaitingTime");
|
||||
dukglue_register_property(ctx, &ScRide::maximumWaitingTime_get, &ScRide::maximumWaitingTime_set, "maximumWaitingTime");
|
||||
dukglue_register_property(ctx, &ScRide::vehicles_get, nullptr, "vehicles");
|
||||
dukglue_register_property(ctx, &ScRide::vehicleColours_get, &ScRide::vehicleColours_set, "vehicleColours");
|
||||
dukglue_register_property(ctx, &ScRide::colourSchemes_get, &ScRide::colourSchemes_set, "colourSchemes");
|
||||
dukglue_register_property(ctx, &ScRide::stationStyle_get, &ScRide::stationStyle_set, "stationStyle");
|
||||
dukglue_register_property(ctx, &ScRide::music_get, &ScRide::music_set, "music");
|
||||
dukglue_register_property(ctx, &ScRide::stations_get, nullptr, "stations");
|
||||
dukglue_register_property(ctx, &ScRide::price_get, &ScRide::price_set, "price");
|
||||
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");
|
||||
dukglue_register_property(ctx, &ScRide::buildDate_get, &ScRide::buildDate_set, "buildDate");
|
||||
dukglue_register_property(ctx, &ScRide::age_get, nullptr, "age");
|
||||
dukglue_register_property(ctx, &ScRide::runningCost_get, &ScRide::runningCost_set, "runningCost");
|
||||
dukglue_register_property(ctx, &ScRide::totalProfit_get, &ScRide::totalProfit_set, "totalProfit");
|
||||
dukglue_register_property(ctx, &ScRide::inspectionInterval_get, &ScRide::inspectionInterval_set, "inspectionInterval");
|
||||
dukglue_register_property(ctx, &ScRide::value_get, &ScRide::value_set, "value");
|
||||
dukglue_register_property(ctx, &ScRide::downtime_get, nullptr, "downtime");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,165 @@
|
|||
/*****************************************************************************
|
||||
* 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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "../object/ScObject.hpp"
|
||||
# include "ScRideStation.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
template<> inline DukValue ToDuk(duk_context* ctx, const TrackColour& value)
|
||||
{
|
||||
DukObject obj(ctx);
|
||||
obj.Set("main", value.main);
|
||||
obj.Set("additional", value.additional);
|
||||
obj.Set("supports", value.supports);
|
||||
return obj.Take();
|
||||
}
|
||||
|
||||
template<> inline TrackColour FromDuk(const DukValue& s)
|
||||
{
|
||||
TrackColour result{};
|
||||
result.main = AsOrDefault(s["main"], 0);
|
||||
result.additional = AsOrDefault(s["additional"], 0);
|
||||
result.supports = AsOrDefault(s["supports"], 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
template<> inline DukValue ToDuk(duk_context* ctx, const VehicleColour& value)
|
||||
{
|
||||
DukObject obj(ctx);
|
||||
obj.Set("body", value.Body);
|
||||
obj.Set("trim", value.Trim);
|
||||
obj.Set("ternary", value.Ternary);
|
||||
return obj.Take();
|
||||
}
|
||||
|
||||
template<> inline VehicleColour FromDuk(const DukValue& s)
|
||||
{
|
||||
VehicleColour result{};
|
||||
result.Body = AsOrDefault(s["body"], 0);
|
||||
result.Trim = AsOrDefault(s["trim"], 0);
|
||||
result.Ternary = AsOrDefault(s["ternary"], 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
class ScRide
|
||||
{
|
||||
private:
|
||||
ride_id_t _rideId = RIDE_ID_NULL;
|
||||
|
||||
public:
|
||||
ScRide(ride_id_t rideId);
|
||||
|
||||
private:
|
||||
int32_t id_get() const;
|
||||
|
||||
std::shared_ptr<ScRideObject> object_get();
|
||||
|
||||
int32_t type_get() const;
|
||||
|
||||
std::string classification_get() const;
|
||||
|
||||
std::string name_get() const;
|
||||
void name_set(std::string value);
|
||||
|
||||
std::string status_get() const;
|
||||
|
||||
uint32_t lifecycleFlags_get() const;
|
||||
|
||||
void lifecycleFlags_set(uint32_t value);
|
||||
|
||||
uint8_t mode_get() const;
|
||||
|
||||
void mode_set(uint8_t value);
|
||||
|
||||
uint8_t departFlags_get() const;
|
||||
|
||||
void departFlags_set(uint8_t value);
|
||||
|
||||
uint8_t minimumWaitingTime_get() const;
|
||||
|
||||
void minimumWaitingTime_set(uint8_t value);
|
||||
|
||||
uint8_t maximumWaitingTime_get() const;
|
||||
|
||||
void maximumWaitingTime_set(uint8_t value);
|
||||
|
||||
std::vector<uint16_t> vehicles_get() const;
|
||||
|
||||
std::vector<DukValue> vehicleColours_get() const;
|
||||
|
||||
void vehicleColours_set(const std::vector<DukValue>& value);
|
||||
|
||||
std::vector<DukValue> colourSchemes_get() const;
|
||||
|
||||
void colourSchemes_set(const std::vector<DukValue>& value);
|
||||
|
||||
uint8_t stationStyle_get() const;
|
||||
|
||||
void stationStyle_set(uint8_t value);
|
||||
|
||||
uint8_t music_get() const;
|
||||
|
||||
void music_set(uint8_t value);
|
||||
|
||||
std::vector<std::shared_ptr<ScRideStation>> stations_get() const;
|
||||
|
||||
std::vector<int32_t> price_get() const;
|
||||
|
||||
void price_set(const std::vector<int32_t>& value);
|
||||
|
||||
int32_t excitement_get() const;
|
||||
void excitement_set(int32_t value);
|
||||
|
||||
int32_t intensity_get() const;
|
||||
void intensity_set(int32_t value);
|
||||
|
||||
int32_t nausea_get() const;
|
||||
void nausea_set(int32_t value);
|
||||
|
||||
int32_t totalCustomers_get() const;
|
||||
void totalCustomers_set(int32_t value);
|
||||
|
||||
int32_t buildDate_get() const;
|
||||
void buildDate_set(int32_t value);
|
||||
|
||||
int32_t age_get() const;
|
||||
|
||||
int16_t runningCost_get() const;
|
||||
void runningCost_set(int16_t value);
|
||||
|
||||
int32_t totalProfit_get() const;
|
||||
void totalProfit_set(int32_t value);
|
||||
|
||||
uint8_t inspectionInterval_get() const;
|
||||
void inspectionInterval_set(uint8_t value);
|
||||
|
||||
DukValue value_get() const;
|
||||
|
||||
void value_set(const DukValue& value);
|
||||
|
||||
uint8_t downtime_get() const;
|
||||
|
||||
Ride* GetRide() const;
|
||||
|
||||
public:
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,134 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScRideStation.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "../object/ScObject.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScRideStation::ScRideStation(ride_id_t rideId, StationIndex stationIndex)
|
||||
: _rideId(rideId)
|
||||
, _stationIndex(stationIndex)
|
||||
{
|
||||
}
|
||||
|
||||
void ScRideStation::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScRideStation::start_get, &ScRideStation::start_set, "start");
|
||||
dukglue_register_property(ctx, &ScRideStation::length_get, &ScRideStation::length_set, "length");
|
||||
dukglue_register_property(ctx, &ScRideStation::entrance_get, &ScRideStation::entrance_set, "entrance");
|
||||
dukglue_register_property(ctx, &ScRideStation::exit_get, &ScRideStation::exit_set, "exit");
|
||||
}
|
||||
|
||||
DukValue ScRideStation::start_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
auto start = CoordsXYZ(station->Start, station->GetBaseZ());
|
||||
return ToDuk(ctx, start);
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void ScRideStation::start_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
auto start = FromDuk<CoordsXYZ>(value);
|
||||
station->Start = { start.x, start.y };
|
||||
station->SetBaseZ(start.z);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScRideStation::length_get() const
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return station->Length;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScRideStation::length_set(int32_t value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Length = value;
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScRideStation::entrance_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return ToDuk(ctx, station->Entrance.ToCoordsXYZD());
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void ScRideStation::entrance_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Entrance = FromDuk<CoordsXYZD>(value);
|
||||
}
|
||||
}
|
||||
|
||||
DukValue ScRideStation::exit_get() const
|
||||
{
|
||||
auto ctx = GetContext()->GetScriptEngine().GetContext();
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
return ToDuk(ctx, station->Exit.ToCoordsXYZD());
|
||||
}
|
||||
return ToDuk(ctx, nullptr);
|
||||
}
|
||||
|
||||
void ScRideStation::exit_set(const DukValue& value)
|
||||
{
|
||||
auto station = GetRideStation();
|
||||
if (station != nullptr)
|
||||
{
|
||||
station->Exit = FromDuk<CoordsXYZD>(value);
|
||||
}
|
||||
}
|
||||
|
||||
RideStation* ScRideStation::GetRideStation() const
|
||||
{
|
||||
auto ride = get_ride(_rideId);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (_stationIndex < std::size(ride->stations))
|
||||
{
|
||||
return &ride->stations[_stationIndex];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,54 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 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 "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "../../Duktape.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScRideStation
|
||||
{
|
||||
private:
|
||||
ride_id_t _rideId = RIDE_ID_NULL;
|
||||
StationIndex _stationIndex{};
|
||||
|
||||
public:
|
||||
ScRideStation(ride_id_t rideId, StationIndex stationIndex);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
DukValue start_get() const;
|
||||
|
||||
void start_set(const DukValue& value);
|
||||
|
||||
int32_t length_get() const;
|
||||
|
||||
void length_set(int32_t value);
|
||||
|
||||
DukValue entrance_get() const;
|
||||
|
||||
void entrance_set(const DukValue& value);
|
||||
|
||||
DukValue exit_get() const;
|
||||
|
||||
void exit_set(const DukValue& value);
|
||||
|
||||
RideStation* GetRideStation() const;
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -11,12 +11,12 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../common.h"
|
||||
# include "../core/String.hpp"
|
||||
# include "../world/Climate.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/String.hpp"
|
||||
# include "../../../world/Climate.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
|
@ -11,14 +11,14 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../Date.h"
|
||||
# include "../Game.h"
|
||||
# include "../GameState.h"
|
||||
# include "../common.h"
|
||||
# include "../localisation/Date.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../Date.h"
|
||||
# include "../../../Game.h"
|
||||
# include "../../../GameState.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../localisation/Date.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
|
@ -0,0 +1,272 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScMap.hpp"
|
||||
|
||||
# include "../../../common.h"
|
||||
# include "../../../ride/Ride.h"
|
||||
# include "../../../ride/TrainManager.h"
|
||||
# include "../../../world/Balloon.h"
|
||||
# include "../../../world/Duck.h"
|
||||
# include "../../../world/EntityList.h"
|
||||
# include "../../../world/Fountain.h"
|
||||
# include "../../../world/Litter.h"
|
||||
# include "../../../world/Map.h"
|
||||
# include "../../../world/MoneyEffect.h"
|
||||
# include "../../../world/Particle.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../entity/ScEntity.hpp"
|
||||
# include "../entity/ScGuest.hpp"
|
||||
# include "../entity/ScLitter.hpp"
|
||||
# include "../entity/ScStaff.hpp"
|
||||
# include "../entity/ScVehicle.hpp"
|
||||
# include "../ride/ScRide.hpp"
|
||||
# include "../world/ScTile.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScMap::ScMap(duk_context* ctx)
|
||||
: _context(ctx)
|
||||
{
|
||||
}
|
||||
|
||||
DukValue ScMap::size_get() const
|
||||
{
|
||||
return ToDuk(_context, CoordsXY{ gMapSize, gMapSize });
|
||||
}
|
||||
|
||||
int32_t ScMap::numRides_get() const
|
||||
{
|
||||
return static_cast<int32_t>(GetRideManager().size());
|
||||
}
|
||||
|
||||
int32_t ScMap::numEntities_get() const
|
||||
{
|
||||
return MAX_ENTITIES;
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScRide>> ScMap::rides_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScRide>> result;
|
||||
auto rideManager = GetRideManager();
|
||||
for (const auto& ride : rideManager)
|
||||
{
|
||||
result.push_back(std::make_shared<ScRide>(ride.id));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScRide> ScMap::getRide(int32_t id) const
|
||||
{
|
||||
auto rideManager = GetRideManager();
|
||||
auto ride = rideManager[static_cast<ride_id_t>(id)];
|
||||
if (ride != nullptr)
|
||||
{
|
||||
return std::make_shared<ScRide>(ride->id);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
std::shared_ptr<ScTile> ScMap::getTile(int32_t x, int32_t y) const
|
||||
{
|
||||
auto coords = TileCoordsXY(x, y).ToCoordsXY();
|
||||
return std::make_shared<ScTile>(coords);
|
||||
}
|
||||
|
||||
DukValue ScMap::getEntity(int32_t id) const
|
||||
{
|
||||
if (id >= 0 && id < MAX_ENTITIES)
|
||||
{
|
||||
auto spriteId = static_cast<uint16_t>(id);
|
||||
auto sprite = GetEntity(spriteId);
|
||||
if (sprite != nullptr && sprite->Type != EntityType::Null)
|
||||
{
|
||||
return GetEntityAsDukValue(sprite);
|
||||
}
|
||||
}
|
||||
duk_push_null(_context);
|
||||
return DukValue::take_from_stack(_context);
|
||||
}
|
||||
|
||||
std::vector<DukValue> ScMap::getAllEntities(const std::string& type) const
|
||||
{
|
||||
std::vector<DukValue> result;
|
||||
if (type == "balloon")
|
||||
{
|
||||
for (auto sprite : EntityList<Balloon>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "car")
|
||||
{
|
||||
for (auto trainHead : TrainManager::View())
|
||||
{
|
||||
for (auto carId = trainHead->sprite_index; carId != SPRITE_INDEX_NULL;)
|
||||
{
|
||||
auto car = GetEntity<Vehicle>(carId);
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScVehicle>(carId)));
|
||||
carId = car->next_vehicle_on_train;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == "litter")
|
||||
{
|
||||
for (auto sprite : EntityList<Litter>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "duck")
|
||||
{
|
||||
for (auto sprite : EntityList<Duck>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScEntity>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "peep")
|
||||
{
|
||||
for (auto sprite : EntityList<Guest>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScGuest>(sprite->sprite_index)));
|
||||
}
|
||||
for (auto sprite : EntityList<Staff>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScStaff>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "guest")
|
||||
{
|
||||
for (auto sprite : EntityList<Guest>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScGuest>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else if (type == "staff")
|
||||
{
|
||||
for (auto sprite : EntityList<Staff>())
|
||||
{
|
||||
result.push_back(GetObjectAsDukValue(_context, std::make_shared<ScStaff>(sprite->sprite_index)));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_error(_context, DUK_ERR_ERROR, "Invalid entity type.");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename TEntityType, typename TScriptType>
|
||||
DukValue createEntityType(duk_context* ctx, const DukValue& initializer)
|
||||
{
|
||||
TEntityType* entity = CreateEntity<TEntityType>();
|
||||
|
||||
auto entityPos = CoordsXYZ{ AsOrDefault(initializer["x"], 0), AsOrDefault(initializer["y"], 0),
|
||||
AsOrDefault(initializer["z"], 0) };
|
||||
entity->MoveTo(entityPos);
|
||||
|
||||
return GetObjectAsDukValue(ctx, std::make_shared<TScriptType>(entity->sprite_index));
|
||||
}
|
||||
|
||||
DukValue ScMap::createEntity(const std::string& type, const DukValue& initializer)
|
||||
{
|
||||
if (type == "car")
|
||||
{
|
||||
return createEntityType<Vehicle, ScVehicle>(_context, initializer);
|
||||
}
|
||||
else if (type == "staff")
|
||||
{
|
||||
return createEntityType<Staff, ScStaff>(_context, initializer);
|
||||
}
|
||||
else if (type == "guest")
|
||||
{
|
||||
return createEntityType<Guest, ScGuest>(_context, initializer);
|
||||
}
|
||||
else if (type == "steam_particle")
|
||||
{
|
||||
return createEntityType<SteamParticle, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "money_effect")
|
||||
{
|
||||
return createEntityType<MoneyEffect, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "crashed_vehicle_particle")
|
||||
{
|
||||
return createEntityType<VehicleCrashParticle, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "explosion_cloud")
|
||||
{
|
||||
return createEntityType<ExplosionCloud, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "crash_splash")
|
||||
{
|
||||
return createEntityType<CrashSplashParticle, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "explosion_flare")
|
||||
{
|
||||
return createEntityType<ExplosionFlare, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "balloon")
|
||||
{
|
||||
return createEntityType<Balloon, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "duck")
|
||||
{
|
||||
return createEntityType<Duck, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "jumping_fountain")
|
||||
{
|
||||
return createEntityType<JumpingFountain, ScEntity>(_context, initializer);
|
||||
}
|
||||
else if (type == "litter")
|
||||
{
|
||||
return createEntityType<Litter, ScLitter>(_context, initializer);
|
||||
}
|
||||
|
||||
duk_error(_context, DUK_ERR_ERROR, "Invalid entity type.");
|
||||
return DukValue{};
|
||||
}
|
||||
|
||||
void ScMap::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScMap::size_get, nullptr, "size");
|
||||
dukglue_register_property(ctx, &ScMap::numRides_get, nullptr, "numRides");
|
||||
dukglue_register_property(ctx, &ScMap::numEntities_get, nullptr, "numEntities");
|
||||
dukglue_register_property(ctx, &ScMap::rides_get, nullptr, "rides");
|
||||
dukglue_register_method(ctx, &ScMap::getRide, "getRide");
|
||||
dukglue_register_method(ctx, &ScMap::getTile, "getTile");
|
||||
dukglue_register_method(ctx, &ScMap::getEntity, "getEntity");
|
||||
dukglue_register_method(ctx, &ScMap::getAllEntities, "getAllEntities");
|
||||
dukglue_register_method(ctx, &ScMap::createEntity, "createEntity");
|
||||
}
|
||||
|
||||
DukValue ScMap::GetEntityAsDukValue(const SpriteBase* sprite) const
|
||||
{
|
||||
auto spriteId = sprite->sprite_index;
|
||||
switch (sprite->Type)
|
||||
{
|
||||
case EntityType::Vehicle:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScVehicle>(spriteId));
|
||||
case EntityType::Staff:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScStaff>(spriteId));
|
||||
case EntityType::Guest:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScGuest>(spriteId));
|
||||
case EntityType::Litter:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScLitter>(spriteId));
|
||||
default:
|
||||
return GetObjectAsDukValue(_context, std::make_shared<ScEntity>(spriteId));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../../common.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../ride/ScRide.hpp"
|
||||
# include "../world/ScTile.hpp"
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScMap
|
||||
{
|
||||
private:
|
||||
duk_context* _context;
|
||||
|
||||
public:
|
||||
ScMap(duk_context* ctx);
|
||||
|
||||
DukValue size_get() const;
|
||||
|
||||
int32_t numRides_get() const;
|
||||
|
||||
int32_t numEntities_get() const;
|
||||
|
||||
std::vector<std::shared_ptr<ScRide>> rides_get() const;
|
||||
|
||||
std::shared_ptr<ScRide> getRide(int32_t id) const;
|
||||
|
||||
std::shared_ptr<ScTile> getTile(int32_t x, int32_t y) const;
|
||||
|
||||
DukValue getEntity(int32_t id) const;
|
||||
|
||||
std::vector<DukValue> getAllEntities(const std::string& type) const;
|
||||
|
||||
DukValue createEntity(const std::string& type, const DukValue& initializer);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
DukValue GetEntityAsDukValue(const SpriteBase* sprite) const;
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,418 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScPark.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../GameState.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/String.hpp"
|
||||
# include "../../../management/Finance.h"
|
||||
# include "../../../management/NewsItem.h"
|
||||
# include "../../../peep/Peep.h"
|
||||
# include "../../../windows/Intent.h"
|
||||
# include "../../../world/Park.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "ScParkMessage.hpp"
|
||||
|
||||
# include <algorithm>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static const DukEnumMap<uint64_t> ParkFlagMap({
|
||||
{ "open", PARK_FLAGS_PARK_OPEN },
|
||||
{ "scenarioCompleteNameInput", PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT },
|
||||
{ "forbidLandscapeChanges", PARK_FLAGS_FORBID_LANDSCAPE_CHANGES },
|
||||
{ "forbidTreeRemoval", PARK_FLAGS_FORBID_TREE_REMOVAL },
|
||||
{ "forbidHighConstruction", PARK_FLAGS_FORBID_HIGH_CONSTRUCTION },
|
||||
{ "preferLessIntenseRides", PARK_FLAGS_PREF_LESS_INTENSE_RIDES },
|
||||
{ "forbidMarketingCampaigns", PARK_FLAGS_FORBID_MARKETING_CAMPAIGN },
|
||||
{ "preferMoreIntenseRides", PARK_FLAGS_PREF_MORE_INTENSE_RIDES },
|
||||
{ "noMoney", PARK_FLAGS_NO_MONEY },
|
||||
{ "difficultGuestGeneration", PARK_FLAGS_DIFFICULT_GUEST_GENERATION },
|
||||
{ "freeParkEntry", PARK_FLAGS_PARK_FREE_ENTRY },
|
||||
{ "difficultParkRating", PARK_FLAGS_DIFFICULT_PARK_RATING },
|
||||
{ "noMoney", PARK_FLAGS_NO_MONEY_SCENARIO },
|
||||
{ "unlockAllPrices", PARK_FLAGS_UNLOCK_ALL_PRICES },
|
||||
});
|
||||
|
||||
money64 ScPark::cash_get() const
|
||||
{
|
||||
return gCash;
|
||||
}
|
||||
void ScPark::cash_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gCash != value)
|
||||
{
|
||||
gCash = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t ScPark::rating_get() const
|
||||
{
|
||||
return gParkRating;
|
||||
}
|
||||
void ScPark::rating_set(int32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
auto valueClamped = std::min(std::max(0, value), 999);
|
||||
if (gParkRating != valueClamped)
|
||||
{
|
||||
gParkRating = std::min(std::max(0, value), 999);
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 ScPark::bankLoan_get() const
|
||||
{
|
||||
return gBankLoan;
|
||||
}
|
||||
void ScPark::bankLoan_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gBankLoan != value)
|
||||
{
|
||||
gBankLoan = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 ScPark::maxBankLoan_get() const
|
||||
{
|
||||
return gMaxBankLoan;
|
||||
}
|
||||
void ScPark::maxBankLoan_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gMaxBankLoan != value)
|
||||
{
|
||||
gMaxBankLoan = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money16 ScPark::entranceFee_get() const
|
||||
{
|
||||
return gParkEntranceFee;
|
||||
}
|
||||
void ScPark::entranceFee_set(money16 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gParkEntranceFee != value)
|
||||
{
|
||||
gParkEntranceFee = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ScPark::guests_get() const
|
||||
{
|
||||
return gNumGuestsInPark;
|
||||
}
|
||||
|
||||
uint32_t ScPark::suggestedGuestMaximum_get() const
|
||||
{
|
||||
return _suggestedGuestMaximum;
|
||||
}
|
||||
|
||||
int32_t ScPark::guestGenerationProbability_get() const
|
||||
{
|
||||
return _guestGenerationProbability;
|
||||
}
|
||||
|
||||
money16 ScPark::guestInitialCash_get() const
|
||||
{
|
||||
return gGuestInitialCash;
|
||||
}
|
||||
|
||||
uint8_t ScPark::guestInitialHappiness_get() const
|
||||
{
|
||||
return gGuestInitialHappiness;
|
||||
}
|
||||
|
||||
uint8_t ScPark::guestInitialHunger_get() const
|
||||
{
|
||||
return gGuestInitialHunger;
|
||||
}
|
||||
|
||||
uint8_t ScPark::guestInitialThirst_get() const
|
||||
{
|
||||
return gGuestInitialThirst;
|
||||
}
|
||||
|
||||
money64 ScPark::value_get() const
|
||||
{
|
||||
return gParkValue;
|
||||
}
|
||||
void ScPark::value_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gParkValue != value)
|
||||
{
|
||||
gParkValue = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money64 ScPark::companyValue_get() const
|
||||
{
|
||||
return gCompanyValue;
|
||||
}
|
||||
void ScPark::companyValue_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gCompanyValue != value)
|
||||
{
|
||||
gCompanyValue = value;
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
|
||||
context_broadcast_intent(&intent);
|
||||
}
|
||||
}
|
||||
|
||||
money16 ScPark::totalRideValueForMoney_get() const
|
||||
{
|
||||
return gTotalRideValueForMoney;
|
||||
}
|
||||
|
||||
uint32_t ScPark::totalAdmissions_get() const
|
||||
{
|
||||
return gTotalAdmissions;
|
||||
}
|
||||
void ScPark::totalAdmissions_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gTotalAdmissions != value)
|
||||
{
|
||||
gTotalAdmissions = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
money64 ScPark::totalIncomeFromAdmissions_get() const
|
||||
{
|
||||
return gTotalIncomeFromAdmissions;
|
||||
}
|
||||
void ScPark::totalIncomeFromAdmissions_set(money64 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
if (gTotalIncomeFromAdmissions != value)
|
||||
{
|
||||
gTotalIncomeFromAdmissions = value;
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
money32 ScPark::landPrice_get() const
|
||||
{
|
||||
return gLandPrice;
|
||||
}
|
||||
void ScPark::landPrice_set(money32 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gLandPrice = value;
|
||||
}
|
||||
|
||||
money32 ScPark::constructionRightsPrice_get() const
|
||||
{
|
||||
return gConstructionRightsPrice;
|
||||
}
|
||||
void ScPark::constructionRightsPrice_set(money32 value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gConstructionRightsPrice = value;
|
||||
}
|
||||
|
||||
int16_t ScPark::casualtyPenalty_get() const
|
||||
{
|
||||
return gParkRatingCasualtyPenalty;
|
||||
}
|
||||
void ScPark::casualtyPenalty_set(int16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
gParkRatingCasualtyPenalty = value;
|
||||
}
|
||||
|
||||
uint16_t ScPark::parkSize_get() const
|
||||
{
|
||||
return gParkSize;
|
||||
}
|
||||
|
||||
std::string ScPark::name_get() const
|
||||
{
|
||||
return GetContext()->GetGameState()->GetPark().Name;
|
||||
}
|
||||
void ScPark::name_set(std::string value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
|
||||
auto& park = GetContext()->GetGameState()->GetPark();
|
||||
if (park.Name != value)
|
||||
{
|
||||
park.Name = value;
|
||||
gfx_invalidate_screen();
|
||||
}
|
||||
}
|
||||
|
||||
bool ScPark::getFlag(const std::string& key) const
|
||||
{
|
||||
auto mask = ParkFlagMap[key];
|
||||
return (gParkFlags & mask) != 0;
|
||||
}
|
||||
|
||||
void ScPark::setFlag(const std::string& key, bool value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto mask = ParkFlagMap[key];
|
||||
if (value)
|
||||
gParkFlags |= mask;
|
||||
else
|
||||
gParkFlags &= ~mask;
|
||||
gfx_invalidate_screen();
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScParkMessage>> ScPark::messages_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScParkMessage>> result;
|
||||
for (size_t i = 0, newsSize = gNewsItems.GetRecent().size(); i < newsSize; i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScParkMessage>(i));
|
||||
}
|
||||
for (size_t i = 0, newsSize = gNewsItems.GetArchived().size(); i < newsSize; i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScParkMessage>(i + News::ItemHistoryStart));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScPark::messages_set(const std::vector<DukValue>& value)
|
||||
{
|
||||
int32_t index = 0;
|
||||
int32_t archiveIndex = News::ItemHistoryStart;
|
||||
for (const auto& item : value)
|
||||
{
|
||||
auto isArchived = item["isArchived"].as_bool();
|
||||
auto newsItem = FromDuk<News::Item>(item);
|
||||
if (isArchived)
|
||||
{
|
||||
if (archiveIndex < News::MaxItems)
|
||||
{
|
||||
gNewsItems[archiveIndex] = newsItem;
|
||||
archiveIndex++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (index < News::ItemHistoryStart)
|
||||
{
|
||||
gNewsItems[index] = newsItem;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End the lists by setting next item to null
|
||||
if (index < News::ItemHistoryStart)
|
||||
{
|
||||
gNewsItems[index].Type = News::ItemType::Null;
|
||||
}
|
||||
if (archiveIndex < News::MaxItems)
|
||||
{
|
||||
gNewsItems[archiveIndex].Type = News::ItemType::Null;
|
||||
}
|
||||
}
|
||||
|
||||
void ScPark::postMessage(DukValue message)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
try
|
||||
{
|
||||
uint32_t assoc = std::numeric_limits<uint32_t>::max();
|
||||
auto type = News::ItemType::Blank;
|
||||
std::string text;
|
||||
if (message.type() == DukValue::Type::STRING)
|
||||
{
|
||||
text = message.as_string();
|
||||
}
|
||||
else
|
||||
{
|
||||
type = GetParkMessageType(message["type"].as_string());
|
||||
text = message["text"].as_string();
|
||||
if (type == News::ItemType::Blank)
|
||||
{
|
||||
assoc = static_cast<uint32_t>(((COORDS_NULL & 0xFFFF) << 16) | (COORDS_NULL & 0xFFFF));
|
||||
}
|
||||
|
||||
auto dukSubject = message["subject"];
|
||||
if (dukSubject.type() == DukValue::Type::NUMBER)
|
||||
{
|
||||
assoc = static_cast<uint32_t>(dukSubject.as_int());
|
||||
}
|
||||
}
|
||||
News::AddItemToQueue(type, text.c_str(), assoc);
|
||||
}
|
||||
catch (const DukException&)
|
||||
{
|
||||
duk_error(message.context(), DUK_ERR_ERROR, "Invalid message argument.");
|
||||
}
|
||||
}
|
||||
|
||||
void ScPark::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScPark::cash_get, &ScPark::cash_set, "cash");
|
||||
dukglue_register_property(ctx, &ScPark::rating_get, &ScPark::rating_set, "rating");
|
||||
dukglue_register_property(ctx, &ScPark::bankLoan_get, &ScPark::bankLoan_set, "bankLoan");
|
||||
dukglue_register_property(ctx, &ScPark::maxBankLoan_get, &ScPark::maxBankLoan_set, "maxBankLoan");
|
||||
dukglue_register_property(ctx, &ScPark::entranceFee_get, &ScPark::entranceFee_set, "entranceFee");
|
||||
dukglue_register_property(ctx, &ScPark::guests_get, nullptr, "guests");
|
||||
dukglue_register_property(ctx, &ScPark::suggestedGuestMaximum_get, nullptr, "suggestedGuestMaximum");
|
||||
dukglue_register_property(ctx, &ScPark::guestGenerationProbability_get, nullptr, "guestGenerationProbability");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialCash_get, nullptr, "guestInitialCash");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialHappiness_get, nullptr, "guestInitialHappiness");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialHunger_get, nullptr, "guestInitialHunger");
|
||||
dukglue_register_property(ctx, &ScPark::guestInitialThirst_get, nullptr, "guestInitialThirst");
|
||||
dukglue_register_property(ctx, &ScPark::value_get, &ScPark::value_set, "value");
|
||||
dukglue_register_property(ctx, &ScPark::companyValue_get, &ScPark::companyValue_set, "companyValue");
|
||||
dukglue_register_property(ctx, &ScPark::totalRideValueForMoney_get, nullptr, "totalRideValueForMoney");
|
||||
dukglue_register_property(ctx, &ScPark::totalAdmissions_get, &ScPark::totalAdmissions_set, "totalAdmissions");
|
||||
dukglue_register_property(
|
||||
ctx, &ScPark::totalIncomeFromAdmissions_get, &ScPark::totalIncomeFromAdmissions_set, "totalIncomeFromAdmissions");
|
||||
dukglue_register_property(ctx, &ScPark::landPrice_get, &ScPark::landPrice_set, "landPrice");
|
||||
dukglue_register_property(
|
||||
ctx, &ScPark::constructionRightsPrice_get, &ScPark::constructionRightsPrice_set, "constructionRightsPrice");
|
||||
dukglue_register_property(ctx, &ScPark::parkSize_get, nullptr, "parkSize");
|
||||
dukglue_register_property(ctx, &ScPark::name_get, &ScPark::name_set, "name");
|
||||
dukglue_register_property(ctx, &ScPark::messages_get, &ScPark::messages_set, "messages");
|
||||
dukglue_register_property(ctx, &ScPark::casualtyPenalty_get, &ScPark::casualtyPenalty_set, "casualtyPenalty");
|
||||
dukglue_register_method(ctx, &ScPark::getFlag, "getFlag");
|
||||
dukglue_register_method(ctx, &ScPark::setFlag, "setFlag");
|
||||
dukglue_register_method(ctx, &ScPark::postMessage, "postMessage");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,98 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "ScParkMessage.hpp"
|
||||
|
||||
# include <algorithm>
|
||||
# include <vector>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScPark
|
||||
{
|
||||
public:
|
||||
money64 cash_get() const;
|
||||
void cash_set(money64 value);
|
||||
|
||||
int32_t rating_get() const;
|
||||
void rating_set(int32_t value);
|
||||
|
||||
money64 bankLoan_get() const;
|
||||
void bankLoan_set(money64 value);
|
||||
|
||||
money64 maxBankLoan_get() const;
|
||||
void maxBankLoan_set(money64 value);
|
||||
|
||||
money16 entranceFee_get() const;
|
||||
void entranceFee_set(money16 value);
|
||||
|
||||
uint32_t guests_get() const;
|
||||
|
||||
uint32_t suggestedGuestMaximum_get() const;
|
||||
|
||||
int32_t guestGenerationProbability_get() const;
|
||||
|
||||
money16 guestInitialCash_get() const;
|
||||
|
||||
uint8_t guestInitialHappiness_get() const;
|
||||
|
||||
uint8_t guestInitialHunger_get() const;
|
||||
|
||||
uint8_t guestInitialThirst_get() const;
|
||||
|
||||
money64 value_get() const;
|
||||
void value_set(money64 value);
|
||||
|
||||
money64 companyValue_get() const;
|
||||
void companyValue_set(money64 value);
|
||||
|
||||
money16 totalRideValueForMoney_get() const;
|
||||
|
||||
uint32_t totalAdmissions_get() const;
|
||||
void totalAdmissions_set(uint32_t value);
|
||||
|
||||
money64 totalIncomeFromAdmissions_get() const;
|
||||
void totalIncomeFromAdmissions_set(money64 value);
|
||||
|
||||
money32 landPrice_get() const;
|
||||
void landPrice_set(money32 value);
|
||||
|
||||
money32 constructionRightsPrice_get() const;
|
||||
void constructionRightsPrice_set(money32 value);
|
||||
|
||||
int16_t casualtyPenalty_get() const;
|
||||
void casualtyPenalty_set(int16_t value);
|
||||
|
||||
uint16_t parkSize_get() const;
|
||||
|
||||
std::string name_get() const;
|
||||
void name_set(std::string value);
|
||||
|
||||
bool getFlag(const std::string& key) const;
|
||||
|
||||
void setFlag(const std::string& key, bool value);
|
||||
|
||||
std::vector<std::shared_ptr<ScParkMessage>> messages_get() const;
|
||||
|
||||
void messages_set(const std::vector<DukValue>& value);
|
||||
|
||||
void postMessage(DukValue message);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,184 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScParkMessage.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../GameState.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/String.hpp"
|
||||
# include "../../../management/Finance.h"
|
||||
# include "../../../management/NewsItem.h"
|
||||
# include "../../../peep/Peep.h"
|
||||
# include "../../../windows/Intent.h"
|
||||
# include "../../../world/Park.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScParkMessage::ScParkMessage(size_t index)
|
||||
: _index(index)
|
||||
{
|
||||
}
|
||||
|
||||
void ScParkMessage::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScParkMessage::isArchived_get, nullptr, "isArchived");
|
||||
dukglue_register_property(ctx, &ScParkMessage::month_get, &ScParkMessage::month_set, "month");
|
||||
dukglue_register_property(ctx, &ScParkMessage::day_get, &ScParkMessage::day_set, "day");
|
||||
dukglue_register_property(ctx, &ScParkMessage::tickCount_get, &ScParkMessage::tickCount_set, "tickCount");
|
||||
dukglue_register_property(ctx, &ScParkMessage::type_get, &ScParkMessage::type_set, "type");
|
||||
dukglue_register_property(ctx, &ScParkMessage::subject_get, &ScParkMessage::subject_set, "subject");
|
||||
dukglue_register_property(ctx, &ScParkMessage::text_get, &ScParkMessage::text_set, "text");
|
||||
dukglue_register_method(ctx, &ScParkMessage::remove, "remove");
|
||||
}
|
||||
|
||||
News::Item* ScParkMessage::GetMessage() const
|
||||
{
|
||||
return &gNewsItems[_index];
|
||||
}
|
||||
|
||||
bool ScParkMessage::isArchived_get() const
|
||||
{
|
||||
return _index >= News::ItemHistoryStart;
|
||||
}
|
||||
|
||||
uint16_t ScParkMessage::month_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->MonthYear;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScParkMessage::month_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->MonthYear = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ScParkMessage::day_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Day;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScParkMessage::day_set(uint8_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Day = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t ScParkMessage::tickCount_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Ticks;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScParkMessage::tickCount_set(uint16_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Ticks = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string ScParkMessage::type_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return GetParkMessageType(msg->Type);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void ScParkMessage::type_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Type = GetParkMessageType(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ScParkMessage::subject_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Assoc;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ScParkMessage::subject_set(uint32_t value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Assoc = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string ScParkMessage::text_get() const
|
||||
{
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
return msg->Text;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void ScParkMessage::text_set(const std::string& value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto msg = GetMessage();
|
||||
if (msg != nullptr)
|
||||
{
|
||||
msg->Text = value;
|
||||
}
|
||||
}
|
||||
|
||||
void ScParkMessage::remove()
|
||||
{
|
||||
News::RemoveItem(static_cast<int32_t>(_index));
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,103 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-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
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../management/NewsItem.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
# include <string>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static constexpr const char* ParkMessageTypeStrings[] = {
|
||||
"attraction", "peep_on_attraction", "peep", "money", "blank", "research", "guests", "award", "chart",
|
||||
};
|
||||
|
||||
inline News::ItemType GetParkMessageType(const std::string& key)
|
||||
{
|
||||
// Get the first ItemType that appears in ParkMessageTypeStrings that isn't Null
|
||||
auto firstType = static_cast<uint8_t>(News::ItemType::Ride);
|
||||
|
||||
auto begin = std::begin(ParkMessageTypeStrings);
|
||||
auto end = std::end(ParkMessageTypeStrings);
|
||||
|
||||
auto it = std::find(begin, end, key);
|
||||
return it != end ? static_cast<News::ItemType>(firstType + std::distance(begin, it)) : News::ItemType::Blank;
|
||||
}
|
||||
|
||||
inline std::string GetParkMessageType(News::ItemType type)
|
||||
{
|
||||
// Decrement 1 as ParkMessageTypeStrings doesn't contain the null type
|
||||
auto scriptType = static_cast<size_t>(type) - 1;
|
||||
|
||||
if (scriptType < std::size(ParkMessageTypeStrings))
|
||||
{
|
||||
return ParkMessageTypeStrings[scriptType];
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template<> inline News::Item FromDuk(const DukValue& value)
|
||||
{
|
||||
News::Item result{};
|
||||
result.Type = GetParkMessageType(value["type"].as_string());
|
||||
result.Assoc = value["subject"].as_int();
|
||||
result.Ticks = value["tickCount"].as_int();
|
||||
result.MonthYear = value["month"].as_int();
|
||||
result.Day = value["day"].as_int();
|
||||
result.Text = value["text"].as_string();
|
||||
return result;
|
||||
}
|
||||
|
||||
class ScParkMessage
|
||||
{
|
||||
private:
|
||||
size_t _index{};
|
||||
|
||||
public:
|
||||
ScParkMessage(size_t index);
|
||||
|
||||
static void Register(duk_context* ctx);
|
||||
|
||||
private:
|
||||
News::Item* GetMessage() const;
|
||||
|
||||
bool isArchived_get() const;
|
||||
|
||||
uint16_t month_get() const;
|
||||
void month_set(uint16_t value);
|
||||
|
||||
uint8_t day_get() const;
|
||||
void day_set(uint8_t value);
|
||||
|
||||
uint16_t tickCount_get() const;
|
||||
void tickCount_set(uint16_t value);
|
||||
|
||||
std::string type_get() const;
|
||||
void type_set(const std::string& value);
|
||||
|
||||
uint32_t subject_get() const;
|
||||
void subject_set(uint32_t value);
|
||||
|
||||
std::string text_get() const;
|
||||
void text_set(const std::string& value);
|
||||
|
||||
void remove();
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -11,14 +11,14 @@
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../Context.h"
|
||||
# include "../GameState.h"
|
||||
# include "../common.h"
|
||||
# include "../core/String.hpp"
|
||||
# include "../scenario/Scenario.h"
|
||||
# include "../world/Park.h"
|
||||
# include "Duktape.hpp"
|
||||
# include "ScriptEngine.h"
|
||||
# include "../../../Context.h"
|
||||
# include "../../../GameState.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/String.hpp"
|
||||
# include "../../../scenario/Scenario.h"
|
||||
# include "../../../world/Park.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <algorithm>
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "ScTile.hpp"
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/Guard.hpp"
|
||||
# include "../../../ride/Track.h"
|
||||
# include "../../../world/Footpath.h"
|
||||
# include "../../../world/Scenery.h"
|
||||
# include "../../../world/Sprite.h"
|
||||
# include "../../../world/Surface.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
# include "ScTileElement.hpp"
|
||||
|
||||
# include <cstdio>
|
||||
# include <cstring>
|
||||
# include <utility>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
ScTile::ScTile(const CoordsXY& coords)
|
||||
: _coords(coords)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t ScTile::x_get() const
|
||||
{
|
||||
return _coords.x / COORDS_XY_STEP;
|
||||
}
|
||||
|
||||
int32_t ScTile::y_get() const
|
||||
{
|
||||
return _coords.y / COORDS_XY_STEP;
|
||||
}
|
||||
|
||||
uint32_t ScTile::numElements_get() const
|
||||
{
|
||||
auto first = GetFirstElement();
|
||||
return static_cast<int32_t>(GetNumElements(first));
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ScTileElement>> ScTile::elements_get() const
|
||||
{
|
||||
std::vector<std::shared_ptr<ScTileElement>> result;
|
||||
auto first = GetFirstElement();
|
||||
auto currentNumElements = GetNumElements(first);
|
||||
if (currentNumElements != 0)
|
||||
{
|
||||
result.reserve(currentNumElements);
|
||||
for (size_t i = 0; i < currentNumElements; i++)
|
||||
{
|
||||
result.push_back(std::make_shared<ScTileElement>(_coords, &first[i]));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
DukValue ScTile::data_get() const
|
||||
{
|
||||
auto ctx = GetDukContext();
|
||||
auto first = map_get_first_element_at(_coords);
|
||||
auto dataLen = GetNumElements(first) * sizeof(TileElement);
|
||||
auto data = duk_push_fixed_buffer(ctx, dataLen);
|
||||
if (first != nullptr)
|
||||
{
|
||||
std::memcpy(data, first, dataLen);
|
||||
}
|
||||
duk_push_buffer_object(ctx, -1, 0, dataLen, DUK_BUFOBJ_UINT8ARRAY);
|
||||
return DukValue::take_from_stack(ctx);
|
||||
}
|
||||
|
||||
void ScTile::data_set(DukValue value)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto ctx = value.context();
|
||||
value.push();
|
||||
if (duk_is_buffer_data(ctx, -1))
|
||||
{
|
||||
duk_size_t dataLen{};
|
||||
auto data = duk_get_buffer_data(ctx, -1, &dataLen);
|
||||
auto numElements = dataLen / sizeof(TileElement);
|
||||
if (numElements == 0)
|
||||
{
|
||||
map_set_tile_element(TileCoordsXY(_coords), nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto first = GetFirstElement();
|
||||
auto currentNumElements = GetNumElements(first);
|
||||
if (numElements > currentNumElements)
|
||||
{
|
||||
// Allocate space for the extra tile elements (inefficient but works)
|
||||
auto pos = TileCoordsXYZ(TileCoordsXY(_coords), 0).ToCoordsXYZ();
|
||||
auto numToInsert = numElements - currentNumElements;
|
||||
for (size_t i = 0; i < numToInsert; i++)
|
||||
{
|
||||
tile_element_insert(pos, 0, TileElementType::Surface);
|
||||
}
|
||||
|
||||
// Copy data to element span
|
||||
first = map_get_first_element_at(_coords);
|
||||
currentNumElements = GetNumElements(first);
|
||||
if (currentNumElements != 0)
|
||||
{
|
||||
std::memcpy(first, data, currentNumElements * sizeof(TileElement));
|
||||
// Safely force last tile flag for last element to avoid read overrun
|
||||
first[numElements - 1].SetLastForTile(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::memcpy(first, data, numElements * sizeof(TileElement));
|
||||
// Safely force last tile flag for last element to avoid read overrun
|
||||
first[numElements - 1].SetLastForTile(true);
|
||||
}
|
||||
}
|
||||
map_invalidate_tile_full(_coords);
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<ScTileElement> ScTile::getElement(uint32_t index) const
|
||||
{
|
||||
auto first = GetFirstElement();
|
||||
if (static_cast<size_t>(index) < GetNumElements(first))
|
||||
{
|
||||
return std::make_shared<ScTileElement>(_coords, &first[index]);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
std::shared_ptr<ScTileElement> ScTile::insertElement(uint32_t index)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
std::shared_ptr<ScTileElement> result;
|
||||
auto first = GetFirstElement();
|
||||
auto origNumElements = GetNumElements(first);
|
||||
if (index <= origNumElements)
|
||||
{
|
||||
std::vector<TileElement> data(first, first + origNumElements);
|
||||
|
||||
auto pos = TileCoordsXYZ(TileCoordsXY(_coords), 0).ToCoordsXYZ();
|
||||
auto newElement = tile_element_insert(pos, 0, TileElementType::Surface);
|
||||
if (newElement == nullptr)
|
||||
{
|
||||
auto ctx = GetDukContext();
|
||||
duk_error(ctx, DUK_ERR_ERROR, "Unable to allocate element.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Inefficient, requires a dedicated method in tile element manager
|
||||
first = GetFirstElement();
|
||||
// Copy elements before index
|
||||
if (index > 0)
|
||||
{
|
||||
std::memcpy(first, &data[0], index * sizeof(TileElement));
|
||||
}
|
||||
// Zero new element
|
||||
std::memset(first + index, 0, sizeof(TileElement));
|
||||
// Copy elements after index
|
||||
if (index < origNumElements)
|
||||
{
|
||||
std::memcpy(first + index + 1, &data[index], (origNumElements - index) * sizeof(TileElement));
|
||||
}
|
||||
for (size_t i = 0; i < origNumElements; i++)
|
||||
{
|
||||
first[i].SetLastForTile(false);
|
||||
}
|
||||
first[origNumElements].SetLastForTile(true);
|
||||
map_invalidate_tile_full(_coords);
|
||||
result = std::make_shared<ScTileElement>(_coords, &first[index]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto ctx = GetDukContext();
|
||||
duk_error(ctx, DUK_ERR_RANGE_ERROR, "Index must be between zero and the number of elements on the tile.");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void ScTile::removeElement(uint32_t index)
|
||||
{
|
||||
ThrowIfGameStateNotMutable();
|
||||
auto first = GetFirstElement();
|
||||
if (index < GetNumElements(first))
|
||||
{
|
||||
tile_element_remove(&first[index]);
|
||||
map_invalidate_tile_full(_coords);
|
||||
}
|
||||
}
|
||||
|
||||
TileElement* ScTile::GetFirstElement() const
|
||||
{
|
||||
return map_get_first_element_at(_coords);
|
||||
}
|
||||
|
||||
size_t ScTile::GetNumElements(const TileElement* first)
|
||||
{
|
||||
size_t count = 0;
|
||||
if (first != nullptr)
|
||||
{
|
||||
auto element = first;
|
||||
do
|
||||
{
|
||||
count++;
|
||||
} while (!(element++)->IsLastForTile());
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
duk_context* ScTile::GetDukContext() const
|
||||
{
|
||||
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||
auto ctx = scriptEngine.GetContext();
|
||||
return ctx;
|
||||
}
|
||||
|
||||
void ScTile::Register(duk_context* ctx)
|
||||
{
|
||||
dukglue_register_property(ctx, &ScTile::x_get, nullptr, "x");
|
||||
dukglue_register_property(ctx, &ScTile::y_get, nullptr, "y");
|
||||
dukglue_register_property(ctx, &ScTile::elements_get, nullptr, "elements");
|
||||
dukglue_register_property(ctx, &ScTile::numElements_get, nullptr, "numElements");
|
||||
dukglue_register_property(ctx, &ScTile::data_get, &ScTile::data_set, "data");
|
||||
dukglue_register_method(ctx, &ScTile::getElement, "getElement");
|
||||
dukglue_register_method(ctx, &ScTile::insertElement, "insertElement");
|
||||
dukglue_register_method(ctx, &ScTile::removeElement, "removeElement");
|
||||
}
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
|
@ -0,0 +1,61 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../../common.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "ScTileElement.hpp"
|
||||
|
||||
# include <cstdio>
|
||||
# include <cstring>
|
||||
# include <utility>
|
||||
# include <vector>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScTile
|
||||
{
|
||||
private:
|
||||
CoordsXY _coords;
|
||||
|
||||
public:
|
||||
ScTile(const CoordsXY& coords);
|
||||
|
||||
private:
|
||||
int32_t x_get() const;
|
||||
|
||||
int32_t y_get() const;
|
||||
|
||||
uint32_t numElements_get() const;
|
||||
|
||||
std::vector<std::shared_ptr<ScTileElement>> elements_get() const;
|
||||
|
||||
DukValue data_get() const;
|
||||
void data_set(DukValue value);
|
||||
|
||||
std::shared_ptr<ScTileElement> getElement(uint32_t index) const;
|
||||
std::shared_ptr<ScTileElement> insertElement(uint32_t index);
|
||||
|
||||
void removeElement(uint32_t index);
|
||||
|
||||
TileElement* GetFirstElement() const;
|
||||
|
||||
static size_t GetNumElements(const TileElement* first);
|
||||
|
||||
duk_context* GetDukContext() const;
|
||||
|
||||
public:
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,198 @@
|
|||
/*****************************************************************************
|
||||
* 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 "../../../Context.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/Guard.hpp"
|
||||
# include "../../../ride/Track.h"
|
||||
# include "../../../world/Footpath.h"
|
||||
# include "../../../world/Scenery.h"
|
||||
# include "../../../world/Sprite.h"
|
||||
# include "../../../world/Surface.h"
|
||||
# include "../../Duktape.hpp"
|
||||
# include "../../ScriptEngine.h"
|
||||
|
||||
# include <cstdio>
|
||||
# include <cstring>
|
||||
# include <utility>
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
class ScTileElement
|
||||
{
|
||||
protected:
|
||||
CoordsXY _coords;
|
||||
TileElement* _element;
|
||||
|
||||
public:
|
||||
ScTileElement(const CoordsXY& coords, TileElement* element);
|
||||
|
||||
private:
|
||||
std::string type_get() const;
|
||||
void type_set(std::string value);
|
||||
|
||||
uint8_t baseHeight_get() const;
|
||||
void baseHeight_set(uint8_t newBaseHeight);
|
||||
|
||||
uint16_t baseZ_get() const;
|
||||
void baseZ_set(uint16_t value);
|
||||
|
||||
uint8_t clearanceHeight_get() const;
|
||||
void clearanceHeight_set(uint8_t newClearanceHeight);
|
||||
|
||||
uint16_t clearanceZ_get() const;
|
||||
void clearanceZ_set(uint16_t value);
|
||||
|
||||
DukValue slope_get() const;
|
||||
void slope_set(uint8_t value);
|
||||
|
||||
DukValue waterHeight_get() const;
|
||||
void waterHeight_set(int32_t value);
|
||||
|
||||
DukValue surfaceStyle_get() const;
|
||||
void surfaceStyle_set(uint32_t value);
|
||||
|
||||
DukValue edgeStyle_get() const;
|
||||
void edgeStyle_set(uint32_t value);
|
||||
|
||||
DukValue grassLength_get() const;
|
||||
void grassLength_set(uint8_t value);
|
||||
|
||||
DukValue hasOwnership_get() const;
|
||||
|
||||
DukValue hasConstructionRights_get();
|
||||
|
||||
DukValue ownership_get() const;
|
||||
void ownership_set(uint8_t value);
|
||||
|
||||
DukValue parkFences_get() const;
|
||||
void parkFences_set(uint8_t value);
|
||||
|
||||
DukValue trackType_get() const;
|
||||
void trackType_set(uint8_t value);
|
||||
|
||||
DukValue sequence_get() const;
|
||||
void sequence_set(uint8_t value);
|
||||
|
||||
DukValue ride_get() const;
|
||||
void ride_set(ride_id_t value);
|
||||
|
||||
DukValue station_get() const;
|
||||
void station_set(uint8_t value);
|
||||
|
||||
DukValue hasChainLift_get() const;
|
||||
void hasChainLift_set(bool value);
|
||||
|
||||
DukValue mazeEntry_get() const;
|
||||
void mazeEntry_set(uint16_t value);
|
||||
|
||||
DukValue colourScheme_get() const;
|
||||
void colourScheme_set(uint8_t value);
|
||||
|
||||
DukValue seatRotation_get() const;
|
||||
void seatRotation_set(uint8_t value);
|
||||
|
||||
DukValue brakeBoosterSpeed_get() const;
|
||||
void brakeBoosterSpeed_set(uint8_t value);
|
||||
|
||||
DukValue isInverted_get() const;
|
||||
void isInverted_set(bool value);
|
||||
|
||||
DukValue hasCableLift_get() const;
|
||||
void hasCableLift_set(bool value);
|
||||
|
||||
DukValue object_get() const;
|
||||
void object_set(uint32_t value);
|
||||
|
||||
bool isHidden_get() const;
|
||||
void isHidden_set(bool hide);
|
||||
|
||||
DukValue age_get() const;
|
||||
void age_set(uint8_t value);
|
||||
|
||||
DukValue quadrant_get() const;
|
||||
void quadrant_set(uint8_t value);
|
||||
|
||||
uint8_t occupiedQuadrants_get() const;
|
||||
void occupiedQuadrants_set(uint8_t value);
|
||||
|
||||
bool isGhost_get() const;
|
||||
void isGhost_set(bool value);
|
||||
|
||||
DukValue primaryColour_get() const;
|
||||
void primaryColour_set(uint8_t value);
|
||||
|
||||
DukValue secondaryColour_get() const;
|
||||
void secondaryColour_set(uint8_t value);
|
||||
|
||||
DukValue tertiaryColour_get() const;
|
||||
void tertiaryColour_set(uint8_t value);
|
||||
|
||||
DukValue bannerIndex_get() const;
|
||||
void bannerIndex_set(uint16_t value);
|
||||
|
||||
// Deprecated in favor of seperate 'edges' and 'corners' properties,
|
||||
// left here to maintain compatibility with older plugins.
|
||||
/** @deprecated */
|
||||
uint8_t edgesAndCorners_get() const;
|
||||
/** @deprecated */
|
||||
void edgesAndCorners_set(uint8_t value);
|
||||
|
||||
DukValue edges_get() const;
|
||||
void edges_set(uint8_t value);
|
||||
|
||||
DukValue corners_get() const;
|
||||
void corners_set(uint8_t value);
|
||||
|
||||
DukValue slopeDirection_get() const;
|
||||
void slopeDirection_set(const DukValue& value);
|
||||
|
||||
DukValue isQueue_get() const;
|
||||
void isQueue_set(bool value);
|
||||
|
||||
DukValue queueBannerDirection_get() const;
|
||||
void queueBannerDirection_set(const DukValue& value);
|
||||
|
||||
DukValue isBlockedByVehicle_get() const;
|
||||
void isBlockedByVehicle_set(bool value);
|
||||
|
||||
DukValue isWide_get() const;
|
||||
void isWide_set(bool value);
|
||||
|
||||
DukValue addition_get() const;
|
||||
void addition_set(const DukValue& value);
|
||||
|
||||
DukValue additionStatus_get() const;
|
||||
void additionStatus_set(uint8_t value);
|
||||
|
||||
DukValue isAdditionBroken_get() const;
|
||||
void isAdditionBroken_set(bool value);
|
||||
|
||||
DukValue isAdditionGhost_get() const;
|
||||
void isAdditionGhost_set(bool value);
|
||||
|
||||
DukValue footpathObject_get() const;
|
||||
void footpathObject_set(uint8_t value);
|
||||
|
||||
DukValue direction_get() const;
|
||||
void direction_set(uint8_t value);
|
||||
|
||||
void Invalidate();
|
||||
|
||||
public:
|
||||
static void Register(duk_context* ctx);
|
||||
};
|
||||
|
||||
} // namespace OpenRCT2::Scripting
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue