Index: source/graphics/scripting/JSInterface_GameView.cpp =================================================================== --- source/graphics/scripting/JSInterface_GameView.cpp +++ source/graphics/scripting/JSInterface_GameView.cpp @@ -23,12 +23,27 @@ #include "graphics/GameView.h" #include "graphics/Terrain.h" #include "maths/FixedVector3D.h" +#include "ps/CConsole.h" +#include "ps/CLogger.h" #include "ps/Game.h" +#include "ps/GameSetup/GameSetup.h" +#include "ps/Util.h" #include "ps/World.h" -#include "ps/CLogger.h" #include "scriptinterface/FunctionWrapper.h" #include "simulation2/helpers/Position.h" + +template<> +void Script::ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue ret, const CVector3D& v) +{ + JS::RootedValue val(rq.cx, Script::CreateObject(rq)); + Script::SetProperty(rq, val, "x", v.X); + Script::SetProperty(rq, val, "y", v.Y); + Script::SetProperty(rq, val, "z", v.Z); + ret.set(val); +} + + namespace JSI_GameView { #define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ @@ -124,6 +139,22 @@ g_Game->GetView()->SetCamera(pos, rotx.ToFloat(), roty.ToFloat(), zoom.ToFloat()); } +/** + * Set the data (position, orientation and zoom) of the camera. + */ +JS::Value GetCameraData(const ScriptRequest& rq) +{ + if (!g_Game || !g_Game->GetView()) + return JS::UndefinedValue(); + + JS::RootedValue val(rq.cx, Script::CreateObject(rq)); + Script::SetProperty(rq, val, "pos", g_Game->GetView()->GetCameraPosition()); + Script::SetProperty(rq, val, "pivot", g_Game->GetView()->GetCameraPivot()); + Script::SetProperty(rq, val, "zoom", g_Game->GetView()->GetCameraZoom()); + return val.get(); +} + + /** * Start / stop camera following mode. * @param entityid unit id to follow. If zero, stop following mode @@ -162,6 +193,16 @@ return CFixedVector3D(fixed::FromFloat(pos.X), fixed::FromFloat(pos.Y), fixed::FromFloat(pos.Z)); } +void TakeScreenshot() +{ + RenderGui(false); + g_Console->ToggleVisible(); + g_Console->Update(1000); + WriteScreenshot(".png"); + g_Console->ToggleVisible(); + RenderGui(true); +} + void RegisterScriptFunctions(const ScriptRequest& rq) { RegisterScriptFunctions_Settings(rq); @@ -170,9 +211,11 @@ ScriptFunction::Register<&CameraMoveTo>(rq, "CameraMoveTo"); ScriptFunction::Register<&SetCameraTarget>(rq, "SetCameraTarget"); ScriptFunction::Register<&SetCameraData>(rq, "SetCameraData"); + ScriptFunction::Register<&GetCameraData>(rq, "GetCameraData"); ScriptFunction::Register<&CameraFollow>(rq, "CameraFollow"); ScriptFunction::Register<&CameraFollowFPS>(rq, "CameraFollowFPS"); ScriptFunction::Register<&GetFollowedEntity>(rq, "GetFollowedEntity"); ScriptFunction::Register<&GetTerrainAtScreenPoint>(rq, "GetTerrainAtScreenPoint"); + ScriptFunction::Register<&TakeScreenshot>(rq, "TakeScreenshot"); } } Index: source/ps/GameSetup/GameSetup.cpp =================================================================== --- source/ps/GameSetup/GameSetup.cpp +++ source/ps/GameSetup/GameSetup.cpp @@ -1270,6 +1270,16 @@ Script::SetPropertyInt(rq, playerData, i, player); } + + // Set biome if wanted + if (args.Has("autostart-biome")) + { + CStr biome = args.Get("autostart-biome"); + Script::SetProperty(rq, settings, "Biome", biome); + } + + + mapType = "random"; } else if (mapDirectory == L"scenarios" || mapDirectory == L"skirmishes") @@ -1300,6 +1310,12 @@ Script::SetProperty(rq, settings, "mapType", mapType); Script::SetProperty(rq, settings, "CheatsEnabled", true); + if (args.Has("autostart-forpreview")) + { + Script::SetProperty(rq, settings, "RevealMap", true); + Script::SetProperty(rq, settings, "ExploreMap", true); + } + // The seed is used for both random map generation and simulation u32 seed = 0; if (args.Has("autostart-seed"))