diff options
author | Niels Martin Hansen <nielsm@indvikleren.dk> | 2020-05-22 22:22:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-22 22:22:55 +0200 |
commit | 800ade77021b34adf8daa5ca5de0efaa8df24152 (patch) | |
tree | 7a2eb5c73c926476c81cd782bcb9b42c93bafdc4 /src/script/api/game | |
parent | c972a63c8cbee7fa8d6d5af2cbbecb8c75ee561a (diff) | |
download | openttd-800ade77021b34adf8daa5ca5de0efaa8df24152.tar.xz |
Feature: Push-buttons on storybook pages (#7896)
Allow more direct player-initiated interaction for Game Scripts, by letting the GS put push-buttons on storybook pages. These buttons can either trigger an immediate event, or require the player to first select a tile on the map, or a vehicle.
Additionally this reworks how the storybook pages are layouted and rendered, to allow for slightly more complex layouts, and maybe speeding drawing up a bit.
Diffstat (limited to 'src/script/api/game')
-rw-r--r-- | src/script/api/game/game_event.hpp.sq | 3 | ||||
-rw-r--r-- | src/script/api/game/game_event_types.hpp.sq | 53 | ||||
-rw-r--r-- | src/script/api/game/game_story_page.hpp.sq | 108 |
3 files changed, 150 insertions, 14 deletions
diff --git a/src/script/api/game/game_event.hpp.sq b/src/script/api/game/game_event.hpp.sq index 42ea11b8b..2be056cd8 100644 --- a/src/script/api/game/game_event.hpp.sq +++ b/src/script/api/game/game_event.hpp.sq @@ -49,6 +49,9 @@ void SQGSEvent_Register(Squirrel *engine) SQGSEvent.DefSQConst(engine, ScriptEvent::ET_EXCLUSIVE_TRANSPORT_RIGHTS, "ET_EXCLUSIVE_TRANSPORT_RIGHTS"); SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ROAD_RECONSTRUCTION, "ET_ROAD_RECONSTRUCTION"); SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_AUTOREPLACED, "ET_VEHICLE_AUTOREPLACED"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_BUTTON_CLICK, "ET_STORYPAGE_BUTTON_CLICK"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_TILE_SELECT, "ET_STORYPAGE_TILE_SELECT"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_VEHICLE_SELECT, "ET_STORYPAGE_VEHICLE_SELECT"); SQGSEvent.DefSQMethod(engine, &ScriptEvent::GetEventType, "GetEventType", 1, "x"); diff --git a/src/script/api/game/game_event_types.hpp.sq b/src/script/api/game/game_event_types.hpp.sq index 62e4f6a08..6a0e89b49 100644 --- a/src/script/api/game/game_event_types.hpp.sq +++ b/src/script/api/game/game_event_types.hpp.sq @@ -308,3 +308,56 @@ void SQGSEventRoadReconstruction_Register(Squirrel *engine) SQGSEventRoadReconstruction.PostRegister(engine); } + + +template <> const char *GetClassName<ScriptEventStoryPageButtonClick, ST_GS>() { return "GSEventStoryPageButtonClick"; } + +void SQGSEventStoryPageButtonClick_Register(Squirrel *engine) +{ + DefSQClass<ScriptEventStoryPageButtonClick, ST_GS> SQGSEventStoryPageButtonClick("GSEventStoryPageButtonClick"); + SQGSEventStoryPageButtonClick.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageButtonClick.DefSQStaticMethod(engine, &ScriptEventStoryPageButtonClick::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetElementID, "GetElementID", 1, "x"); + + SQGSEventStoryPageButtonClick.PostRegister(engine); +} + + +template <> const char *GetClassName<ScriptEventStoryPageTileSelect, ST_GS>() { return "GSEventStoryPageTileSelect"; } + +void SQGSEventStoryPageTileSelect_Register(Squirrel *engine) +{ + DefSQClass<ScriptEventStoryPageTileSelect, ST_GS> SQGSEventStoryPageTileSelect("GSEventStoryPageTileSelect"); + SQGSEventStoryPageTileSelect.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageTileSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageTileSelect::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetElementID, "GetElementID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetTile, "GetTile", 1, "x"); + + SQGSEventStoryPageTileSelect.PostRegister(engine); +} + + +template <> const char *GetClassName<ScriptEventStoryPageVehicleSelect, ST_GS>() { return "GSEventStoryPageVehicleSelect"; } + +void SQGSEventStoryPageVehicleSelect_Register(Squirrel *engine) +{ + DefSQClass<ScriptEventStoryPageVehicleSelect, ST_GS> SQGSEventStoryPageVehicleSelect("GSEventStoryPageVehicleSelect"); + SQGSEventStoryPageVehicleSelect.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageVehicleSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageVehicleSelect::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetElementID, "GetElementID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetVehicleID, "GetVehicleID", 1, "x"); + + SQGSEventStoryPageVehicleSelect.PostRegister(engine); +} diff --git a/src/script/api/game/game_story_page.hpp.sq b/src/script/api/game/game_story_page.hpp.sq index 99bc237bf..b9fbf6026 100644 --- a/src/script/api/game/game_story_page.hpp.sq +++ b/src/script/api/game/game_story_page.hpp.sq @@ -24,21 +24,101 @@ void SQGSStoryPage_Register(Squirrel *engine) SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_TEXT, "SPET_TEXT"); SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_LOCATION, "SPET_LOCATION"); SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_GOAL, "SPET_GOAL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_PUSH, "SPET_BUTTON_PUSH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_TILE, "SPET_BUTTON_TILE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_VEHICLE, "SPET_BUTTON_VEHICLE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_NONE, "SPBF_NONE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_LEFT, "SPBF_FLOAT_LEFT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_RIGHT, "SPBF_FLOAT_RIGHT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MOUSE, "SPBC_MOUSE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ZZZ, "SPBC_ZZZ"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUOY, "SPBC_BUOY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_QUERY, "SPBC_QUERY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_HQ, "SPBC_HQ"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SHIP_DEPOT, "SPBC_SHIP_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SIGN, "SPBC_SIGN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TREE, "SPBC_TREE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUY_LAND, "SPBC_BUY_LAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LEVEL_LAND, "SPBC_LEVEL_LAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TOWN, "SPBC_TOWN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_INDUSTRY, "SPBC_INDUSTRY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROCKY_AREA, "SPBC_ROCKY_AREA"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DESERT, "SPBC_DESERT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRANSMITTER, "SPBC_TRANSMITTER"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AIRPORT, "SPBC_AIRPORT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DOCK, "SPBC_DOCK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CANAL, "SPBC_CANAL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOCK, "SPBC_LOCK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RIVER, "SPBC_RIVER"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AQUEDUCT, "SPBC_AQUEDUCT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BRIDGE, "SPBC_BRIDGE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_STATION, "SPBC_RAIL_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_RAIL, "SPBC_TUNNEL_RAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_ELRAIL, "SPBC_TUNNEL_ELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MONO, "SPBC_TUNNEL_MONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MAGLEV, "SPBC_TUNNEL_MAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTORAIL, "SPBC_AUTORAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOELRAIL, "SPBC_AUTOELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMONO, "SPBC_AUTOMONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMAGLEV, "SPBC_AUTOMAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WAYPOINT, "SPBC_WAYPOINT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_DEPOT, "SPBC_RAIL_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ELRAIL_DEPOT, "SPBC_ELRAIL_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MONO_DEPOT, "SPBC_MONO_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAGLEV_DEPOT, "SPBC_MAGLEV_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_RAIL, "SPBC_CONVERT_RAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_ELRAIL, "SPBC_CONVERT_ELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MONO, "SPBC_CONVERT_MONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MAGLEV, "SPBC_CONVERT_MAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOROAD, "SPBC_AUTOROAD"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOTRAM, "SPBC_AUTOTRAM"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_DEPOT, "SPBC_ROAD_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUS_STATION, "SPBC_BUS_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRUCK_STATION, "SPBC_TRUCK_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_TUNNEL, "SPBC_ROAD_TUNNEL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_TRAIN, "SPBC_CLONE_TRAIN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_ROADVEH, "SPBC_CLONE_ROADVEH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_SHIP, "SPBC_CLONE_SHIP"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_AIRPLANE, "SPBC_CLONE_AIRPLANE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DEMOLISH, "SPBC_DEMOLISH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOWERLAND, "SPBC_LOWERLAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAISELAND, "SPBC_RAISELAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PICKSTATION, "SPBC_PICKSTATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUILDSIGNALS, "SPBC_BUILDSIGNALS"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_BLUE, "SPBC_DARK_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PALE_GREEN, "SPBC_PALE_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PINK, "SPBC_PINK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_YELLOW, "SPBC_YELLOW"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RED, "SPBC_RED"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LIGHT_BLUE, "SPBC_LIGHT_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREEN, "SPBC_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_GREEN, "SPBC_DARK_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BLUE, "SPBC_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CREAM, "SPBC_CREAM"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAUVE, "SPBC_MAUVE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PURPLE, "SPBC_PURPLE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ORANGE, "SPBC_ORANGE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BROWN, "SPBC_BROWN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREY, "SPBC_GREY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WHITE, "SPBC_WHITE"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPage, "IsValidStoryPage", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPageElement, "IsValidStoryPageElement", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New, "New", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement, "NewElement", 5, ".iii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement, "UpdateElement", 4, ".ii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue, "GetPageSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany, "GetCompany", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate, "GetDate", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate, "SetDate", 3, ".ii"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle, "SetTitle", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show, "Show", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove, "Remove", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement, "RemoveElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPage, "IsValidStoryPage", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPageElement, "IsValidStoryPageElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New, "New", 3, ".i."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement, "NewElement", 5, ".iii."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement, "UpdateElement", 4, ".ii."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue, "GetPageSortValue", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany, "GetCompany", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate, "GetDate", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate, "SetDate", 3, ".ii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle, "SetTitle", 3, ".i."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show, "Show", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove, "Remove", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement, "RemoveElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakePushButtonReference, "MakePushButtonReference", 3, ".ii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeTileButtonReference, "MakeTileButtonReference", 4, ".iii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeVehicleButtonReference, "MakeVehicleButtonReference", 5, ".iiii"); SQGSStoryPage.PostRegister(engine); } |