Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/scripting/JSInterface_GameView.cpp
Show All 17 Lines | |||||
#include "precompiled.h" | #include "precompiled.h" | ||||
#include "JSInterface_GameView.h" | #include "JSInterface_GameView.h" | ||||
#include "graphics/Camera.h" | #include "graphics/Camera.h" | ||||
#include "graphics/GameView.h" | #include "graphics/GameView.h" | ||||
#include "graphics/Terrain.h" | #include "graphics/Terrain.h" | ||||
#include "maths/FixedVector3D.h" | #include "maths/FixedVector3D.h" | ||||
#include "ps/CConsole.h" | |||||
#include "ps/CLogger.h" | |||||
#include "ps/Game.h" | #include "ps/Game.h" | ||||
#include "ps/GameSetup/GameSetup.h" | |||||
#include "ps/Util.h" | |||||
#include "ps/World.h" | #include "ps/World.h" | ||||
#include "ps/CLogger.h" | |||||
#include "scriptinterface/FunctionWrapper.h" | #include "scriptinterface/FunctionWrapper.h" | ||||
#include "simulation2/helpers/Position.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 | namespace JSI_GameView | ||||
{ | { | ||||
#define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ | #define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ | ||||
bool Get##NAME##Enabled() \ | bool Get##NAME##Enabled() \ | ||||
{ \ | { \ | ||||
if (!g_Game || !g_Game->GetView()) \ | if (!g_Game || !g_Game->GetView()) \ | ||||
{ \ | { \ | ||||
LOGERROR("Trying to get a setting from GameView when it's not initialized!"); \ | LOGERROR("Trying to get a setting from GameView when it's not initialized!"); \ | ||||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | if (!g_Game || !g_Game->GetView()) | ||||
return; | return; | ||||
CVector3D pos(x.ToFloat(), y.ToFloat(), z.ToFloat()); | CVector3D pos(x.ToFloat(), y.ToFloat(), z.ToFloat()); | ||||
g_Game->GetView()->SetCamera(pos, rotx.ToFloat(), roty.ToFloat(), zoom.ToFloat()); | 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. | * Start / stop camera following mode. | ||||
* @param entityid unit id to follow. If zero, stop following mode | * @param entityid unit id to follow. If zero, stop following mode | ||||
*/ | */ | ||||
void CameraFollow(entity_id_t entityid) | void CameraFollow(entity_id_t entityid) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!g_Game || !g_Game->GetView()) | ||||
return; | return; | ||||
Show All 21 Lines | |||||
} | } | ||||
CFixedVector3D GetTerrainAtScreenPoint(int x, int y) | CFixedVector3D GetTerrainAtScreenPoint(int x, int y) | ||||
{ | { | ||||
CVector3D pos = g_Game->GetView()->GetCamera()->GetWorldCoordinates(x, y, true); | CVector3D pos = g_Game->GetView()->GetCamera()->GetWorldCoordinates(x, y, true); | ||||
return CFixedVector3D(fixed::FromFloat(pos.X), fixed::FromFloat(pos.Y), fixed::FromFloat(pos.Z)); | 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) | void RegisterScriptFunctions(const ScriptRequest& rq) | ||||
{ | { | ||||
RegisterScriptFunctions_Settings(rq); | RegisterScriptFunctions_Settings(rq); | ||||
ScriptFunction::Register<&GetCameraPivot>(rq, "GetCameraPivot"); | ScriptFunction::Register<&GetCameraPivot>(rq, "GetCameraPivot"); | ||||
ScriptFunction::Register<&CameraMoveTo>(rq, "CameraMoveTo"); | ScriptFunction::Register<&CameraMoveTo>(rq, "CameraMoveTo"); | ||||
ScriptFunction::Register<&SetCameraTarget>(rq, "SetCameraTarget"); | ScriptFunction::Register<&SetCameraTarget>(rq, "SetCameraTarget"); | ||||
ScriptFunction::Register<&SetCameraData>(rq, "SetCameraData"); | ScriptFunction::Register<&SetCameraData>(rq, "SetCameraData"); | ||||
ScriptFunction::Register<&GetCameraData>(rq, "GetCameraData"); | |||||
ScriptFunction::Register<&CameraFollow>(rq, "CameraFollow"); | ScriptFunction::Register<&CameraFollow>(rq, "CameraFollow"); | ||||
ScriptFunction::Register<&CameraFollowFPS>(rq, "CameraFollowFPS"); | ScriptFunction::Register<&CameraFollowFPS>(rq, "CameraFollowFPS"); | ||||
ScriptFunction::Register<&GetFollowedEntity>(rq, "GetFollowedEntity"); | ScriptFunction::Register<&GetFollowedEntity>(rq, "GetFollowedEntity"); | ||||
ScriptFunction::Register<&GetTerrainAtScreenPoint>(rq, "GetTerrainAtScreenPoint"); | ScriptFunction::Register<&GetTerrainAtScreenPoint>(rq, "GetTerrainAtScreenPoint"); | ||||
ScriptFunction::Register<&TakeScreenshot>(rq, "TakeScreenshot"); | |||||
} | } | ||||
} | } |
Wildfire Games · Phabricator