plugincharplacement.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. class PluginCharPlacement extends PluginBase
  2. {
  3. PluginDeveloper m_ModuleDeveloper;
  4. PlayerBase m_Character;
  5. ref Timer m_Timer;
  6. bool m_Initialized;
  7. vector m_cam_pos;
  8. vector m_character_pos;
  9. vector m_camera_dir;
  10. vector m_cameraTrans[4];
  11. vector m_demoPos;
  12. vector m_demoRot;
  13. vector m_camera_orientation;
  14. const float FOV = 0.5236;
  15. void CheckInit()
  16. {
  17. if ( m_Initialized )
  18. {
  19. Print("logging...");
  20. Log(FOV.ToString(),"FOV");
  21. Log(m_camera_dir.ToString(),"camera dir");
  22. Log(m_cam_pos.ToString(),"camera pos");
  23. Log(m_demoPos.ToString(),"character pos");
  24. return;
  25. }
  26. if( FreeDebugCamera.GetInstance().IsActive() )
  27. Init();
  28. }
  29. void Init()
  30. {
  31. if(m_Character)
  32. m_Character.Delete();
  33. m_Initialized = true;
  34. m_Character = PlayerBase.Cast( GetGame().CreateObject("SurvivorF_Judy", FreeDebugCamera.GetInstance().GetPosition(), false, false/*ai*/) );
  35. FreeDebugCamera.GetInstance().SetFOV(FOV); //default scene FOV
  36. m_demoRot = "0 0 0";
  37. }
  38. override void OnUpdate(float delta_time)
  39. {
  40. if(!m_Initialized) return;
  41. if(!FreeDebugCamera.GetInstance().IsActive()) return;
  42. if(!m_Character) return;
  43. m_camera_orientation = FreeDebugCamera.GetInstance().GetOrientation();
  44. m_camera_orientation[1] = 1;
  45. FreeDebugCamera.GetInstance().SetOrientation(m_camera_orientation); //remove to unlock vertical axis
  46. m_cam_pos = FreeDebugCamera.GetInstance().GetPosition();
  47. m_character_pos = m_Character.GetPosition();
  48. m_camera_dir = FreeDebugCamera.GetInstance().GetDirection();
  49. m_camera_dir.Normalize();
  50. m_Character.SetPosition(CalculatePos());//(FreeDebugCamera.GetInstance().GetPosition() + ( m_camera_dir * 2) );
  51. m_demoRot[0] = Math.Atan2(-m_camera_dir[0], -m_camera_dir[2]) * Math.RAD2DEG;
  52. m_Character.SetOrientation(m_demoRot);//(FreeDebugCamera.GetInstance().GetPosition() - m_demoPos);
  53. }
  54. override void OnDestroy()
  55. {
  56. FreeDebugCamera.GetInstance().SetFOV(g_Game.GetUserFOV());
  57. }
  58. vector CalculatePos()
  59. {
  60. vector cam_pos = FreeDebugCamera.GetInstance().GetPosition();
  61. Math3D.MatrixIdentity4(m_cameraTrans);
  62. Math3D.DirectionAndUpMatrix(m_camera_dir/* - SnapToGround(cam_pos)*/, "0 1 0", m_cameraTrans);
  63. m_cameraTrans[3] = cam_pos;
  64. m_demoPos = Vector(/*0.685547, -0.988281,*/0,0, 3.68823).Multiply4(m_cameraTrans);
  65. m_demoPos[1] = GetGame().SurfaceY(m_demoPos[0], m_demoPos[2]);
  66. return m_demoPos;
  67. }
  68. }