BVB Source Codes

CRYENGINE Show DevMode.cpp Source code

Return Download CRYENGINE: download DevMode.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description: Helper class for CCryAction implementing developer mode-only
  8.                 functionality
  9.  
  10.    -------------------------------------------------------------------------
  11.    History:
  12.    - 9:2:2005   12:31 : Created by Craig Tiller
  13.  
  14. *************************************************************************/
  15.  
  16. #include "StdAfx.h"
  17. #include "DevMode.h"
  18. #include "ILevelSystem.h"
  19. #include "CryAction.h"
  20. #include "IActorSystem.h"
  21. #include <IMovementController.h>
  22. #include <CrySystem/Scaleform/IFlashUI.h>
  23. #include <CrySystem/Profilers/IStatoscope.h>
  24.  
  25. CDevMode::CDevMode()
  26. {
  27.         if (gEnv->pInput) gEnv->pInput->AddEventListener(this);
  28.         if (gEnv->pSystem) gEnv->pSystem->GetIRemoteConsole()->RegisterListener(this, "CDevMode");
  29.         m_bSlowDownGameSpeed = false;
  30.         m_bHUD = false;
  31. }
  32.  
  33. CDevMode::~CDevMode()
  34. {
  35.         if (gEnv->pInput)
  36.                 gEnv->pInput->RemoveEventListener(this);
  37.         if (gEnv->pSystem)
  38.                 gEnv->pSystem->GetIRemoteConsole()->UnregisterListener(this);
  39. }
  40.  
  41. void CDevMode::GotoTagPoint(int i)
  42. {
  43.         std::vector<STagFileEntry> tags = LoadTagFile();
  44.         if (tags.size() > size_t(i))
  45.         {
  46.                 STagFileEntry ent = tags[i];
  47.                 IActor* pActor = CCryAction::GetCryAction()->GetClientActor();
  48.                 if (!pActor) return;
  49.                 IEntity* pEntity = pActor->GetEntity();
  50.                 Quat rot;
  51.  
  52.                 Vec3 pos = ent.pos;
  53.  
  54.                 // pos loaded is a camera position, we must convert it into the player position.
  55.                 if (IMovementController* pMC = pActor->GetMovementController())
  56.                 {
  57.                         SMovementState ms;
  58.                         pMC->GetMovementState(ms);
  59.                         pos -= (ms.eyePosition - ms.pos);
  60.                 }
  61.  
  62.                 rot.SetRotationXYZ(ent.ang);
  63.                 Vec3 scale = pEntity->GetScale();
  64.                 pEntity->SetPosRotScale(pos, rot, scale);
  65.                 pActor->SetViewRotation(rot);
  66.         }
  67. }
  68.  
  69. void CDevMode::SaveTagPoint(int i)
  70. {
  71.         std::vector<STagFileEntry> tags = LoadTagFile();
  72.         if (tags.size() <= size_t(i))
  73.                 tags.resize(i + 1);
  74.  
  75.         tags[i].pos = GetISystem()->GetViewCamera().GetMatrix().GetTranslation();
  76.         tags[i].ang = Ang3(GetISystem()->GetViewCamera().GetMatrix());
  77.  
  78.         SaveTagFile(tags);
  79. }
  80.  
  81. void CDevMode::OnGameplayCommand(const char* cmd)
  82. {
  83.         SUIArguments args;
  84.         args.SetDelimiter(":");
  85.         args.SetArguments(cmd);
  86.  
  87.         string action;
  88.         args.GetArg(0, action);
  89.         if (action == "GotoTagPoint")
  90.         {
  91.                 int tagpoint;
  92.                 args.GetArg(1, tagpoint);
  93.                 if (tagpoint >= 0 && tagpoint <= 11)
  94.                         GotoTagPoint(tagpoint);
  95.         }
  96.         else if (action == "SetViewMode" && gEnv->pGameFramework)
  97.         {
  98.                 int mode;
  99.                 args.GetArg(1, mode);
  100.                 IActor* pPlayer = gEnv->pGameFramework->GetClientActor();
  101.                 static ICVar* pCamVar = gEnv->pConsole->GetCVar("cl_cam_orbit");
  102.                 if (pPlayer && pCamVar)
  103.                 {
  104.                         switch (mode)
  105.                         {
  106.                         case 0:
  107.                                 pCamVar->Set(0);
  108.                                 if (pPlayer->IsThirdPerson())
  109.                                         pPlayer->ToggleThirdPerson();
  110.                                 break;
  111.                         case 1:
  112.                                 pCamVar->Set(0);
  113.                                 if (!pPlayer->IsThirdPerson())
  114.                                         pPlayer->ToggleThirdPerson();
  115.                                 break;
  116.                         case 2:
  117.                                 pCamVar->Set(1);
  118.                                 break;
  119.                         }
  120.                 }
  121.         }
  122.         else if (action == "SetFlyMode" && gEnv->pGameFramework)
  123.         {
  124.                 int mode;
  125.                 args.GetArg(1, mode);
  126.                 IActor* pPlayer = gEnv->pGameFramework->GetClientActor();
  127.                 if (pPlayer && mode >= 0 && mode < 3)
  128.                         pPlayer->SetFlyMode(mode);
  129.         }
  130. }
  131.  
  132. bool CDevMode::OnInputEvent(const SInputEvent& evt)
  133. {
  134.         FUNCTION_PROFILER(GetISystem(), PROFILE_ACTION);
  135.         bool handled = false;
  136.         bool canCheat = CCryAction::GetCryAction()->CanCheat();
  137.  
  138.         IActor* pActor = CCryAction::GetCryAction()->GetClientActor();
  139.         if (!pActor) return false;
  140.         IEntity* pEntity = pActor->GetEntity();
  141.         if (!pEntity) return false;
  142.  
  143.         // tag-point functionality is provided by the editor already, so we should ignore it
  144.         // when running in the editor
  145.         if (!gEnv->IsEditor())
  146.         {
  147.                 if ((evt.state == eIS_Pressed) && canCheat)
  148.                 {
  149.                         if ((evt.modifiers & eMM_Shift) != 0 && (evt.modifiers & eMM_Alt) == 0) // Shift ONLY
  150.                         {
  151.                                 if (handled = (evt.keyId == eKI_F1)) GotoTagPoint(0);
  152.                                 if (handled = (evt.keyId == eKI_F2)) GotoTagPoint(1);
  153.                                 if (handled = (evt.keyId == eKI_F3)) GotoTagPoint(2);
  154.                                 if (handled = (evt.keyId == eKI_F4)) GotoTagPoint(3);
  155.                                 if (handled = (evt.keyId == eKI_F5)) GotoTagPoint(4);
  156.                                 if (handled = (evt.keyId == eKI_F6)) GotoTagPoint(5);
  157.                                 if (handled = (evt.keyId == eKI_F7)) GotoTagPoint(6);
  158.                                 if (handled = (evt.keyId == eKI_F8)) GotoTagPoint(7);
  159.                                 if (handled = (evt.keyId == eKI_F9)) GotoTagPoint(8);
  160.                                 if (handled = (evt.keyId == eKI_F10)) GotoTagPoint(9);
  161.                                 if (handled = (evt.keyId == eKI_F11)) GotoTagPoint(10);
  162.                                 if (handled = (evt.keyId == eKI_F12)) GotoTagPoint(11);
  163.                         }
  164.                         else if ((evt.modifiers & eMM_Shift) == 0 && ((evt.modifiers & eMM_Alt) != 0 || (evt.modifiers & eMM_Ctrl) != 0)) // Alt or Ctrl and NO Shift
  165.                         {
  166.                                 if (handled = (evt.keyId == eKI_F1)) SaveTagPoint(0);
  167.                                 if (handled = (evt.keyId == eKI_F2)) SaveTagPoint(1);
  168.                                 if (handled = (evt.keyId == eKI_F3)) SaveTagPoint(2);
  169.                                 if (handled = (evt.keyId == eKI_F4)) SaveTagPoint(3);
  170.                                 if (handled = (evt.keyId == eKI_F5)) SaveTagPoint(4);
  171.                                 if (handled = (evt.keyId == eKI_F6)) SaveTagPoint(5);
  172.                                 if (handled = (evt.keyId == eKI_F7)) SaveTagPoint(6);
  173.                                 if (handled = (evt.keyId == eKI_F8)) SaveTagPoint(7);
  174.                                 if (handled = (evt.keyId == eKI_F9)) SaveTagPoint(8);
  175.                                 if (handled = (evt.keyId == eKI_F10)) SaveTagPoint(9);
  176.                                 if (handled = (evt.keyId == eKI_F11)) SaveTagPoint(10);
  177.                                 if (handled = (evt.keyId == eKI_F12)) SaveTagPoint(11);
  178.                         }
  179.                 }
  180.         }
  181.         else
  182.         {
  183.                 // place commands which should only be dealt with in game mode here
  184.         }
  185.  
  186.         // shared commands
  187.         if (canCheat)
  188.         {
  189.                 if (!handled && (evt.state == eIS_Pressed) && (evt.modifiers & eMM_Shift) != 0 && (evt.modifiers & eMM_Alt) != 0)
  190.                 {
  191.                         if (handled = (evt.keyId == eKI_NP_1)) GotoSpecialSpawnPoint(1);
  192.                         if (handled = (evt.keyId == eKI_NP_2)) GotoSpecialSpawnPoint(2);
  193.                         if (handled = (evt.keyId == eKI_NP_3)) GotoSpecialSpawnPoint(3);
  194.                         if (handled = (evt.keyId == eKI_NP_4)) GotoSpecialSpawnPoint(4);
  195.                         if (handled = (evt.keyId == eKI_NP_5)) GotoSpecialSpawnPoint(5);
  196.                         if (handled = (evt.keyId == eKI_NP_6)) GotoSpecialSpawnPoint(6);
  197.                         if (handled = (evt.keyId == eKI_NP_7)) GotoSpecialSpawnPoint(7);
  198.                         if (handled = (evt.keyId == eKI_NP_8)) GotoSpecialSpawnPoint(8);
  199.                         if (handled = (evt.keyId == eKI_NP_9)) GotoSpecialSpawnPoint(9);
  200.                 }
  201.                 else if (!handled && (evt.state == eIS_Pressed) && !(evt.modifiers & eMM_Modifiers))
  202.                 {
  203.                         if (handled = (evt.keyId == eKI_NP_1) && !gEnv->bMultiplayer) // give all items
  204.                         {
  205.                                 CCryAction::GetCryAction()->GetIItemSystem()->GetIEquipmentManager()->GiveEquipmentPack(pActor, "Player_Default", true, true);
  206.                         }
  207.                         else if (handled = (evt.keyId == eKI_F2)) // go to next spawnpoint
  208.                         {
  209.                                 Vec3 oldPos = pEntity->GetWorldPos();
  210.                                 if (gEnv->pScriptSystem->BeginCall("BasicActor", "OnNextSpawnPoint"))
  211.                                 {
  212.                                         gEnv->pScriptSystem->PushFuncParam(pEntity->GetScriptTable());
  213.                                         gEnv->pScriptSystem->EndCall();
  214.  
  215.                                         if (gEnv->pStatoscope)
  216.                                         {
  217.                                                 char buffer[100];
  218.                                                 Vec3 pos = pEntity->GetWorldPos();
  219.                                                 cry_sprintf(buffer, "Teleported from (%.2f, %.2f, %.2f) to (%.2f, %.2f, %.2f)", oldPos.x, oldPos.y, oldPos.z, pos.x, pos.y, pos.z);
  220.                                                 gEnv->pStatoscope->AddUserMarker("Player", buffer);
  221.                                         }
  222.                                 }
  223.                         }
  224.                 }
  225.         }
  226.  
  227.         if (handled == false && evt.state == eIS_Pressed && (evt.modifiers & eMM_Alt) != 0)
  228.         {
  229.                 if (evt.keyId == eKI_F7)
  230.                         SwitchSlowDownGameSpeed();
  231.                 else if (evt.keyId == eKI_F8)
  232.                         SwitchHUD();
  233.         }
  234.  
  235.         // AlexL: don't mark commands as handled for now. Would stop processing/propagating to other
  236.         //        listeners. especially for non-modifier keys like f7,f8,f9 problematic
  237.         return false; // handled;
  238. }
  239.  
  240. std::vector<STagFileEntry> CDevMode::LoadTagFile()
  241. {
  242.         std::vector<STagFileEntry> out;
  243.  
  244.         FILE* finput = fopen(TagFileName().c_str(), "rt");
  245.         if (finput)
  246.         {
  247.                 while (!feof(finput))
  248.                 {
  249.                         STagFileEntry ent;
  250.                         if (6 == fscanf(finput, "%f,%f,%f,%f,%f,%f",
  251.                                         &ent.pos.x, &ent.pos.y, &ent.pos.z,
  252.                                         &ent.ang.x, &ent.ang.y, &ent.ang.z
  253.                                         ))
  254.                                 out.push_back(ent);
  255.                         else
  256.                                 break;
  257.                 }
  258.                 fclose(finput);
  259.         }
  260.  
  261.         return out;
  262. }
  263.  
  264. void CDevMode::SaveTagFile(const std::vector<STagFileEntry>& tags)
  265. {
  266.         CrySetFileAttributes(TagFileName().c_str(), FILE_ATTRIBUTE_NORMAL);
  267.  
  268.         FILE* foutput = fopen(TagFileName().c_str(), "wt");
  269.  
  270.         if (foutput)
  271.         {
  272.                 for (std::vector<STagFileEntry>::const_iterator iter = tags.begin(); iter != tags.end(); ++iter)
  273.                 {
  274.                         fprintf(foutput, "%f,%f,%f,%f,%f,%f\n",
  275.                                 iter->pos.x, iter->pos.y, iter->pos.z,
  276.                                 iter->ang.x, iter->ang.y, iter->ang.z);
  277.                 }
  278.                 fclose(foutput);
  279.         }
  280. }
  281.  
  282. string CDevMode::TagFileName()
  283. {
  284.         ILevelSystem* pLevelSystem = CCryAction::GetCryAction()->GetILevelSystem();
  285.         ILevelInfo* pLevel = pLevelSystem->GetCurrentLevel();
  286.         if (!pLevel)
  287.                 return "";
  288.  
  289.         string path = pLevel->GetPath();
  290.         path = PathUtil::GetGameFolder() + string("/") + path + "/tags.txt";
  291.  
  292.         return path;
  293. }
  294.  
  295. void CDevMode::SwitchSlowDownGameSpeed()
  296. {
  297.         if (m_bSlowDownGameSpeed)
  298.         {
  299.                 gEnv->pConsole->ExecuteString("t_FixedStep 0");
  300.                 m_bSlowDownGameSpeed = false;
  301.         }
  302.         else
  303.         {
  304.                 gEnv->pConsole->ExecuteString("t_FixedStep 0.001");
  305.                 m_bSlowDownGameSpeed = true;
  306.         }
  307. }
  308.  
  309. void CDevMode::SwitchHUD()
  310. {
  311.         if (m_bHUD)
  312.         {
  313.                 gEnv->pConsole->ExecuteString("hud 0");
  314.                 m_bHUD = false;
  315.         }
  316.         else
  317.         {
  318.                 gEnv->pConsole->ExecuteString("hud 2");
  319.                 m_bHUD = true;
  320.         }
  321. }
  322.  
  323. void CDevMode::GotoSpecialSpawnPoint(int i)
  324. {
  325.         char cmd[256];
  326.         cry_sprintf(cmd, "#g_localActor:SpawnAtSpawnPoint(\"SpawnPoint%d\")", i);
  327.         gEnv->pConsole->ExecuteString(cmd);
  328. }
  329.  
downloadDevMode.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top