
Code: Select all
#pragma once
#include "IViewSystem.h"
struct RTSCamera
{
//Constructor
RTSCamera();
//Destructor
~RTSCamera(){}
//Member Functions
void CreateRTSCamera();
string GetLevelName();
void SetViewParams(unsigned int XameraId, EntityId GameCameradId, IEntity *GameCamera);
//Member Variables
SViewParams m_CurViewParams;
SViewParams m_NewViewParams;
IViewSystem *m_pIViewSystem;
IEntitySystem *m_pIEntitySystem;
EntityId m_EntityId;
IGameFramework *m_pGameFrameWork;
IView *m_pRTSCameraView;
IEntity *m_pGameCameraEntity;
uint8 m_RTSCameraViewID;
bool CameraExist;
};
Code: Select all
#include "StdAfx.h"
#include "RTSCamera.h"
#include "CryEntitySystem/IEntitySystem.h"
#include "CryGame/IGameFramework.h"
RTSCamera::RTSCamera()
{
}
string RTSCamera::GetLevelName()
{
//m_pGameCameraEntity = gEnv->pGame->GetIGameFramework();
m_pGameFrameWork = g_pGame->GetIGameFramework();
string levelName = m_pGameFrameWork->GetLevelName();
return levelName;
}
void RTSCamera::CreateRTSCamera()
{
//Assign the IViewSystem to a pointer named m_pIViewSystem
m_pIViewSystem = gEnv->pGameFramework->GetIViewSystem();
//Assign the IEntitySystem to a pointer named m_pIEntitySystem
m_pIEntitySystem = gEnv->pSystem->GetIEntitySystem();
//Assign camera entity in the game world to a pointer named m_pGameCameraEntity
m_pGameCameraEntity = m_pIEntitySystem->FindEntityByName("GameCamera");
//Get GameCamera's EntityId and store it into a variable named m_EntityId
m_EntityId = m_pGameCameraEntity->GetId();
//Active the Camera Entity
m_pGameCameraEntity->Activate(true);
//Create a new View and assign it to a pointer named m_pIView
m_pRTSCameraView = m_pIViewSystem->CreateView();
//Get the view Id of our new camera and assign it to a variable named RTSCameraViewId
m_RTSCameraViewID = m_pIViewSystem->GetViewId(m_pRTSCameraView);
//Remove the currently active view
m_pIViewSystem->RemoveView(m_pIViewSystem->GetActiveViewId());
//Set our new view as the active one
m_pIViewSystem->SetActiveView(m_pRTSCameraView);
//Give Initial values to our camera
SetViewParams(m_RTSCameraViewID, m_EntityId, m_pGameCameraEntity);
//Set View params for our camera
m_pRTSCameraView->SetCurrentParams(m_CurViewParams);
//Link our new view to the game camera entity in our world
m_pRTSCameraView->LinkTo(m_pGameCameraEntity);
}
void RTSCamera::SetViewParams(unsigned int CameraId, EntityId GameCameraId, IEntity *GameCamera)
{
m_CurViewParams.position = GameCamera->GetWorldPos();
m_CurViewParams.rotation = GameCamera->GetWorldRotation();
m_CurViewParams.nearplane = 0.0f;
m_CurViewParams.fov = 0.6f;
m_CurViewParams.viewID = CameraId;
m_CurViewParams.groundOnly = false;
m_CurViewParams.shakingRatio = 0.0f;
m_CurViewParams.currentShakeQuat = IDENTITY;
m_CurViewParams.currentShakeShift = ZERO;
m_CurViewParams.idTarget = GameCameraId;
m_CurViewParams.targetPos = GameCamera->GetWorldPos();
m_CurViewParams.angleVel = 0.0f;
m_CurViewParams.vel = 0.0f;
m_CurViewParams.dist = 0.0f;
m_CurViewParams.blend = false;
}
The code is initialize on CGame::Update function in Game.cpp
Code: Select all
string LevelName = RTSCamera_01.GetLevelName();
if (LevelName != EmptyString)
{
CryLogAlways("CRYLOG: Level "+ LevelName +" Loaded!");
RTSCamera_01.CreateRTSCamera();
EmptyString = LevelName;
}
fun fact: if i enter in game mode in the editor all workes just fine -_-'
Please give me some lights!!! thanks.