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.
This commit is contained in:
Niels Martin Hansen
2020-05-22 22:22:55 +02:00
committed by GitHub
parent c972a63c8c
commit 800ade7702
17 changed files with 1159 additions and 82 deletions

View File

@@ -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");

View File

@@ -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);
}

View File

@@ -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);
}