Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/scripting/JSInterface_GameView.cpp
Show All 25 Lines | |||||
#include "ps/World.h" | #include "ps/World.h" | ||||
#include "ps/CLogger.h" | #include "ps/CLogger.h" | ||||
#include "ps/Profile.h" | #include "ps/Profile.h" | ||||
#include "scriptinterface/ScriptInterface.h" | #include "scriptinterface/ScriptInterface.h" | ||||
#define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ | #define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ | ||||
bool JSI_GameView::Get##NAME##Enabled(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) \ | bool JSI_GameView::Get##NAME##Enabled(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) \ | ||||
{ \ | { \ | ||||
if (!g_Game || !g_Game->GetView()) \ | if (!CGame::isGameInitialised() || !CGame::getGame()->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!"); \ | ||||
return false; \ | return false; \ | ||||
} \ | } \ | ||||
return g_Game->GetView()->Get##NAME##Enabled(); \ | return CGame::getGame()->GetView()->Get##NAME##Enabled(); \ | ||||
} \ | } \ | ||||
\ | \ | ||||
void JSI_GameView::Set##NAME##Enabled(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), bool Enabled) \ | void JSI_GameView::Set##NAME##Enabled(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), bool Enabled) \ | ||||
{ \ | { \ | ||||
if (!g_Game || !g_Game->GetView()) \ | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) \ | ||||
{ \ | { \ | ||||
LOGERROR("Trying to set a setting of GameView when it's not initialized!"); \ | LOGERROR("Trying to set a setting of GameView when it's not initialized!"); \ | ||||
return; \ | return; \ | ||||
} \ | } \ | ||||
g_Game->GetView()->Set##NAME##Enabled(Enabled); \ | CGame::getGame()->GetView()->Set##NAME##Enabled(Enabled); \ | ||||
} | } | ||||
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Culling); | IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Culling); | ||||
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(LockCullCamera); | IMPLEMENT_BOOLEAN_SCRIPT_SETTING(LockCullCamera); | ||||
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(ConstrainCamera); | IMPLEMENT_BOOLEAN_SCRIPT_SETTING(ConstrainCamera); | ||||
#undef IMPLEMENT_BOOLEAN_SCRIPT_SETTING | #undef IMPLEMENT_BOOLEAN_SCRIPT_SETTING | ||||
Show All 11 Lines | |||||
#undef REGISTER_BOOLEAN_SCRIPT_SETTING | #undef REGISTER_BOOLEAN_SCRIPT_SETTING | ||||
/** | /** | ||||
* Get the current X coordinate of the camera. | * Get the current X coordinate of the camera. | ||||
*/ | */ | ||||
float JSI_GameView::CameraGetX(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | float JSI_GameView::CameraGetX(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) | ||||
return -1; | return -1; | ||||
return g_Game->GetView()->GetCameraX(); | return CGame::getGame()->GetView()->GetCameraX(); | ||||
} | } | ||||
/** | /** | ||||
* Get the current Z coordinate of the camera. | * Get the current Z coordinate of the camera. | ||||
*/ | */ | ||||
float JSI_GameView::CameraGetZ(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | float JSI_GameView::CameraGetZ(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) | ||||
return -1; | return -1; | ||||
return g_Game->GetView()->GetCameraZ(); | return CGame::getGame()->GetView()->GetCameraZ(); | ||||
} | } | ||||
/** | /** | ||||
* Move camera to a 2D location. | * Move camera to a 2D location. | ||||
*/ | */ | ||||
void JSI_GameView::CameraMoveTo(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_pos_t x, entity_pos_t z) | void JSI_GameView::CameraMoveTo(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_pos_t x, entity_pos_t z) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetWorld() || !g_Game->GetView() || !g_Game->GetWorld()->GetTerrain()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetWorld() || !CGame::getGame()->GetView() || !CGame::getGame()->GetWorld()->GetTerrain()) | ||||
return; | return; | ||||
CTerrain* terrain = g_Game->GetWorld()->GetTerrain(); | CTerrain* terrain = CGame::getGame()->GetWorld()->GetTerrain(); | ||||
CVector3D target; | CVector3D target; | ||||
target.X = x.ToFloat(); | target.X = x.ToFloat(); | ||||
target.Z = z.ToFloat(); | target.Z = z.ToFloat(); | ||||
target.Y = terrain->GetExactGroundLevel(target.X, target.Z); | target.Y = terrain->GetExactGroundLevel(target.X, target.Z); | ||||
g_Game->GetView()->MoveCameraTarget(target); | CGame::getGame()->GetView()->MoveCameraTarget(target); | ||||
} | } | ||||
/** | /** | ||||
* Set the camera to look at the given location. | * Set the camera to look at the given location. | ||||
*/ | */ | ||||
void JSI_GameView::SetCameraTarget(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), float x, float y, float z) | void JSI_GameView::SetCameraTarget(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), float x, float y, float z) | ||||
{ | { | ||||
g_Game->GetView()->ResetCameraTarget(CVector3D(x, y, z)); | CGame::getGame()->GetView()->ResetCameraTarget(CVector3D(x, y, z)); | ||||
} | } | ||||
/** | /** | ||||
* Set the data (position, orientation and zoom) of the camera. | * Set the data (position, orientation and zoom) of the camera. | ||||
*/ | */ | ||||
void JSI_GameView::SetCameraData(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_pos_t x, entity_pos_t y, entity_pos_t z, entity_pos_t rotx, entity_pos_t roty, entity_pos_t zoom) | void JSI_GameView::SetCameraData(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_pos_t x, entity_pos_t y, entity_pos_t z, entity_pos_t rotx, entity_pos_t roty, entity_pos_t zoom) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetWorld() || !g_Game->GetView() || !g_Game->GetWorld()->GetTerrain()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetWorld() || !CGame::getGame()->GetView() || !CGame::getGame()->GetWorld()->GetTerrain()) | ||||
return; | return; | ||||
CVector3D Pos = CVector3D(x.ToFloat(), y.ToFloat(), z.ToFloat()); | CVector3D Pos = CVector3D(x.ToFloat(), y.ToFloat(), z.ToFloat()); | ||||
float RotX = rotx.ToFloat(); | float RotX = rotx.ToFloat(); | ||||
float RotY = roty.ToFloat(); | float RotY = roty.ToFloat(); | ||||
float Zoom = zoom.ToFloat(); | float Zoom = zoom.ToFloat(); | ||||
g_Game->GetView()->SetCamera(Pos, RotX, RotY, Zoom); | CGame::getGame()->GetView()->SetCamera(Pos, RotX, RotY, Zoom); | ||||
} | } | ||||
/** | /** | ||||
* 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 JSI_GameView::CameraFollow(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_id_t entityid) | void JSI_GameView::CameraFollow(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_id_t entityid) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) | ||||
return; | return; | ||||
g_Game->GetView()->CameraFollow(entityid, false); | CGame::getGame()->GetView()->CameraFollow(entityid, false); | ||||
} | } | ||||
/** | /** | ||||
* Start / stop first-person camera following mode. | * Start / stop first-person 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 JSI_GameView::CameraFollowFPS(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_id_t entityid) | void JSI_GameView::CameraFollowFPS(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), entity_id_t entityid) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) | ||||
return; | return; | ||||
g_Game->GetView()->CameraFollow(entityid, true); | CGame::getGame()->GetView()->CameraFollow(entityid, true); | ||||
} | } | ||||
entity_id_t JSI_GameView::GetFollowedEntity(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | entity_id_t JSI_GameView::GetFollowedEntity(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | ||||
{ | { | ||||
if (!g_Game || !g_Game->GetView()) | if (!CGame::isGameInitialised() || !CGame::getGame()->GetView()) | ||||
return INVALID_ENTITY; | return INVALID_ENTITY; | ||||
return g_Game->GetView()->GetFollowedEntity(); | return CGame::getGame()->GetView()->GetFollowedEntity(); | ||||
} | } | ||||
CFixedVector3D JSI_GameView::GetTerrainAtScreenPoint(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int x, int y) | CFixedVector3D JSI_GameView::GetTerrainAtScreenPoint(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int x, int y) | ||||
{ | { | ||||
CVector3D pos = g_Game->GetView()->GetCamera()->GetWorldCoordinates(x, y, true); | CVector3D pos = CGame::getGame()->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 JSI_GameView::RegisterScriptFunctions(const ScriptInterface& scriptInterface) | void JSI_GameView::RegisterScriptFunctions(const ScriptInterface& scriptInterface) | ||||
{ | { | ||||
RegisterScriptFunctions_Settings(scriptInterface); | RegisterScriptFunctions_Settings(scriptInterface); | ||||
scriptInterface.RegisterFunction<float, &CameraGetX>("CameraGetX"); | scriptInterface.RegisterFunction<float, &CameraGetX>("CameraGetX"); | ||||
Show All 9 Lines |
Wildfire Games · Phabricator