cameratoolsmenu.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033
  1. class CameraToolsMenu extends UIScriptedMenu
  2. {
  3. protected static CameraToolsMenu m_Instance;
  4. vector m_FreeflightCamTransform[4];
  5. protected vector m_NextCamPosition;
  6. protected float m_Time;
  7. protected Camera m_Camera1;
  8. protected Camera m_Camera2;
  9. protected ref array<ref Param6<vector, vector, float, float, float, int>> m_CameraLines;
  10. protected bool m_IsPlaying;
  11. protected int m_NextCameraIndex = 1;
  12. protected float m_FollowingTimeFinished;
  13. protected ref Param2<int, int> m_FollowingBone;
  14. protected CTKeyframe m_SelectedKeyframe;
  15. protected CTEvent m_SelectedEvent;
  16. protected CTActor m_SelectedActor;
  17. protected ref array<ref CTActor> m_Actors;
  18. protected ref array<ref CTKeyframe> m_Cameras;
  19. protected ref array<ref CTEvent> m_Events;
  20. protected Widget m_KeyframeContent;
  21. protected Widget m_EventContent;
  22. protected XComboBoxWidget m_InterpTypeSpeedCombo;
  23. protected XComboBoxWidget m_InterpTypeCombo;
  24. protected EditBoxWidget m_BlurEditWidget;
  25. protected EditBoxWidget m_ActorTypeWidget;
  26. protected EditBoxWidget m_ActorIdWidget;
  27. protected EditBoxWidget m_ActorItemTypeWidget;
  28. protected ButtonWidget m_AddItem;
  29. protected ButtonWidget m_AddHandsItem;
  30. protected ButtonWidget m_AddActor;
  31. protected ButtonWidget m_Play;
  32. protected ButtonWidget m_Stop;
  33. protected ButtonWidget m_Save;
  34. protected ButtonWidget m_Load;
  35. protected ButtonWidget m_Reset;
  36. protected ButtonWidget m_AddKeyframe;
  37. protected ButtonWidget m_SaveKeyframe;
  38. protected ButtonWidget m_DeleteKeyframe;
  39. protected ButtonWidget m_ViewKeyframe;
  40. protected ButtonWidget m_AddEvent;
  41. protected ButtonWidget m_SaveEvent;
  42. protected ButtonWidget m_DeleteEvent;
  43. protected ButtonWidget m_ViewEvent;
  44. protected ButtonWidget m_CopyButton;
  45. protected ButtonWidget m_ApplyButton;
  46. protected EditBoxWidget m_CameraEditbox;
  47. protected TextWidget m_CameraValues;
  48. protected string m_CameraToolsDataPath;
  49. void CameraToolsMenu()
  50. {
  51. m_CameraToolsDataPath = "$profile:/CameraTools";
  52. m_Cameras = new array<ref CTKeyframe>();
  53. m_Events = new array<ref CTEvent>();
  54. m_Actors = new array<ref CTActor>();
  55. m_Camera1 = Camera.Cast(GetGame().CreateObject("staticcamera", GetGame().GetPlayer().GetPosition(), true));
  56. m_Camera2 = Camera.Cast(GetGame().CreateObject("staticcamera", GetGame().GetPlayer().GetPosition(), true));
  57. m_Instance = this;
  58. }
  59. void ~CameraToolsMenu()
  60. {
  61. if (m_IsPlaying)
  62. {
  63. Stop();
  64. layoutRoot.Show( false );
  65. GetGame().GetUIManager().ShowUICursor(false);
  66. GetGame().GetMission().RemoveActiveInputExcludes({"menu"},true);
  67. }
  68. SaveData();
  69. m_Camera1.SetActive(false);
  70. m_Camera2.SetActive(false);
  71. DeveloperFreeCamera.DisableFreeCamera(PlayerBase.Cast(GetGame().GetPlayer()), false);
  72. MissionGameplay ms = MissionGameplay.Cast(GetGame().GetMission());
  73. if (ms)
  74. ms.GetHud().Show(true);
  75. }
  76. override void OnShow()
  77. {
  78. super.OnShow();
  79. if (!m_IsPlaying)
  80. {
  81. GetGame().GetMission().AddActiveInputExcludes({"menu"});
  82. }
  83. }
  84. override void OnHide()
  85. {
  86. super.OnHide();
  87. if (!m_IsPlaying && GetGame() && GetGame().GetMission() && GetGame().GetUIManager())
  88. {
  89. GetGame().GetUIManager().ShowUICursor(false);
  90. GetGame().GetMission().RemoveActiveInputExcludes({"menu"},true);
  91. }
  92. }
  93. void SelectKeyframe( CTKeyframe kf )
  94. {
  95. if (m_SelectedKeyframe)
  96. m_SelectedKeyframe.Unselect();
  97. m_SelectedKeyframe = kf;
  98. m_SelectedKeyframe.Select();
  99. }
  100. void SelectEvent(CTEvent ev)
  101. {
  102. m_SelectedEvent = ev;
  103. }
  104. void SelectActor(CTActor ac)
  105. {
  106. m_SelectedActor = ac;
  107. }
  108. override Widget Init()
  109. {
  110. layoutRoot = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/camera_tools/camera_tools.layout" );
  111. m_KeyframeContent = layoutRoot.FindAnyWidget( "keyframe_list_content" );
  112. m_EventContent = layoutRoot.FindAnyWidget( "events_list_content" );
  113. m_InterpTypeCombo = XComboBoxWidget.Cast( layoutRoot.FindAnyWidget( "interp_type" ) );
  114. m_InterpTypeSpeedCombo = XComboBoxWidget.Cast( layoutRoot.FindAnyWidget( "interp_speed_type" ) );
  115. m_BlurEditWidget = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "blur_value" ) );
  116. m_ActorTypeWidget = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "add_actor_type" ) );
  117. m_ActorIdWidget = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "add_actor_id" ) );
  118. m_ActorItemTypeWidget = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "add_item_type" ) );
  119. m_AddKeyframe = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "add_keyframe" ) );
  120. m_AddEvent = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "add_event" ) );
  121. m_AddItem = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "add_actor_item" ) );
  122. m_AddHandsItem = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "add_actor_item_hands" ) );
  123. m_AddActor = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "add_actor" ) );
  124. m_Play = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "play" ) );
  125. m_Stop = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "stop" ) );
  126. m_Save = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "save" ) );
  127. m_Load = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "load" ) );
  128. m_Reset = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "reset" ) );
  129. m_SaveKeyframe = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "save_keyframe" ) );
  130. m_DeleteKeyframe = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "delete_keyframe" ) );
  131. m_ViewKeyframe = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "snap_to_keyframe" ) );
  132. m_SaveEvent = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "save_event" ) );
  133. m_DeleteEvent = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "delete_event" ) );
  134. m_ViewEvent = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "snap_to_event" ) );
  135. m_CopyButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "CopyButton" ) );
  136. m_ApplyButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "ApplyButton" ) );
  137. m_CameraEditbox = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "CameraEditbox" ) );
  138. m_CameraValues = TextWidget.Cast( layoutRoot.FindAnyWidget( "CameraValues" ) );
  139. MissionGameplay ms = MissionGameplay.Cast( GetGame().GetMission() );
  140. ms.GetHud().Show( false );
  141. DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast( GetGame().GetPlayer() ) );
  142. m_BlurEditWidget.SetText( "0.0" );
  143. LoadData();
  144. return layoutRoot;
  145. }
  146. PlayerBase GetActor( int index )
  147. {
  148. if ( index > -1 && index < m_Actors.Count() )
  149. return PlayerBase.Cast( m_Actors.Get( index ).GetObj() );
  150. else
  151. return null;
  152. }
  153. static void PlayAnimOnActor( int actor, int anim )
  154. {
  155. if ( m_Instance )
  156. {
  157. PlayerBase p = m_Instance.GetActor( actor );
  158. if ( p )
  159. {
  160. EmoteCB cb = EmoteCB.Cast( p.StartCommand_Action( anim, EmoteCB, DayZPlayerConstants.STANCEMASK_ALL ) );
  161. cb.EnableCancelCondition(true);
  162. }
  163. }
  164. }
  165. void LoadData()
  166. {
  167. if (!FileExist(m_CameraToolsDataPath))
  168. MakeDirectory(m_CameraToolsDataPath);
  169. m_Cameras.Clear();
  170. m_Events.Clear();
  171. m_Actors.Clear();
  172. string errorMessage;
  173. CTSaveStructure saveData = new CTSaveStructure();
  174. if (!JsonFileLoader<ref CTSaveStructure>.LoadFile(m_CameraToolsDataPath + "/keyframe_data.json", saveData, errorMessage))
  175. SaveData();
  176. m_InterpTypeCombo.SetCurrentItem(saveData.m_InterpType);
  177. m_InterpTypeSpeedCombo.SetCurrentItem(saveData.m_InterpSpeed);
  178. SetBlurValue(saveData.m_BlurValue);
  179. foreach (Param6<vector, vector, float, float, float, int> transform : saveData.m_Cameras)
  180. {
  181. CTKeyframe keyFrame = new CTKeyframe(
  182. m_Cameras.Count(),
  183. transform.param1,
  184. transform.param2,
  185. transform.param3,
  186. transform.param4,
  187. transform.param5,
  188. transform.param6,
  189. GetTotalTime(m_Cameras.Count()),
  190. m_KeyframeContent,
  191. this,
  192. );
  193. keyFrame.SetInterpTime(transform.param3);
  194. m_Cameras.Insert(keyFrame);
  195. }
  196. foreach (Param4<int, int, float, bool> eventEntry : saveData.m_Events)
  197. {
  198. CTEvent ev = new CTEvent(
  199. m_Events.Count(),
  200. eventEntry.param1,
  201. m_EventContent,
  202. eventEntry.param4,
  203. this,
  204. );
  205. ev.SetEventType(eventEntry.param2);
  206. ev.SetEventTime(eventEntry.param3);
  207. m_Events.Insert(ev);
  208. }
  209. foreach (Param5<vector, vector, string, ref array<string>, string> actorEntry : saveData.m_Actors)
  210. {
  211. CTActor ac = new CTActor(m_Actors.Count(), actorEntry.param1, actorEntry.param2, actorEntry.param3, actorEntry.param4, actorEntry.param5, this);
  212. m_Actors.Insert(ac);
  213. }
  214. }
  215. void SaveData()
  216. {
  217. if (!FileExist(m_CameraToolsDataPath))
  218. MakeDirectory(m_CameraToolsDataPath);
  219. CTSaveStructure saveData = new CTSaveStructure();
  220. saveData.m_InterpType = m_InterpTypeCombo.GetCurrentItem();
  221. saveData.m_InterpSpeed = m_InterpTypeSpeedCombo.GetCurrentItem();
  222. saveData.m_BlurValue = GetBlurValue();
  223. foreach (CTKeyframe keyframe : m_Cameras)
  224. {
  225. Param6<vector, vector, float, float, float, int> transform = new Param6<vector, vector, float, float, float, int>(
  226. keyframe.GetPosition(),
  227. keyframe.GetOrientation(),
  228. keyframe.GetInterpTime(),
  229. keyframe.GetFOV(),
  230. keyframe.GetDOF(),
  231. keyframe.GetPin(),
  232. );
  233. saveData.m_Cameras.Insert(transform);
  234. }
  235. foreach (CTEvent eventEntry : m_Events)
  236. {
  237. Param4<int, int, float, bool> ev = new Param4<int, int, float, bool>(
  238. eventEntry.GetEventActor(),
  239. eventEntry.GetEventType(),
  240. eventEntry.GetEventTime(),
  241. eventEntry.GetEventWalk(),
  242. );
  243. saveData.m_Events.Insert(ev);
  244. }
  245. foreach (CTActor actorEntry : m_Actors)
  246. {
  247. Param5<vector, vector, string, ref array<string>, string> ac = new Param5<vector, vector, string, ref array<string>, string>(
  248. actorEntry.GetPosition(),
  249. actorEntry.GetRotation(),
  250. actorEntry.GetActorType(),
  251. actorEntry.GetItems(),
  252. actorEntry.GetHandsItem(),
  253. );
  254. saveData.m_Actors.Insert(ac);
  255. }
  256. string errorMessage;
  257. if (!JsonFileLoader<ref CTSaveStructure>.SaveFile(m_CameraToolsDataPath + "/keyframe_data.json", saveData, errorMessage))
  258. ErrorEx(errorMessage);
  259. }
  260. void ResetAll()
  261. {
  262. CTSaveStructure saveData = new CTSaveStructure();
  263. string errorMessage;
  264. if (!JsonFileLoader<ref CTSaveStructure>.SaveFile(m_CameraToolsDataPath + "/keyframe_data.json", saveData, errorMessage))
  265. ErrorEx(errorMessage);
  266. LoadData();
  267. }
  268. float GetTotalTime( int index )
  269. {
  270. float time;
  271. index = Math.Clamp( index, 0, m_Cameras.Count() );
  272. for ( int i = 0; i < index; i++ )
  273. {
  274. time += m_Cameras.Get( i ).GetInterpTime();
  275. }
  276. return time;
  277. }
  278. void AddKeyframe()
  279. {
  280. if ( Camera.GetCurrentCamera() )
  281. {
  282. vector pos = Camera.GetCurrentCamera().GetWorldPosition();
  283. vector orient = Camera.GetCurrentCamera().GetOrientation();
  284. CTKeyframe kf = new CTKeyframe( m_Cameras.Count(), pos, orient, 1, 70, 50, -1, GetTotalTime( m_Cameras.Count() ), m_KeyframeContent, this );
  285. m_Cameras.Insert( kf );
  286. SelectKeyframe( kf );
  287. }
  288. }
  289. void SaveKeyframe()
  290. {
  291. if ( m_SelectedKeyframe && Camera.GetCurrentCamera() )
  292. {
  293. m_SelectedKeyframe.SetPosition( Camera.GetCurrentCamera().GetWorldPosition() );
  294. m_SelectedKeyframe.SetOrientation( Camera.GetCurrentCamera().GetOrientation() );
  295. }
  296. }
  297. void DeleteKeyframe()
  298. {
  299. if ( m_SelectedKeyframe )
  300. {
  301. int index = m_Cameras.Find( m_SelectedKeyframe );
  302. m_Cameras.Remove( index );
  303. index = Math.Clamp( index, 0, m_Cameras.Count() - 1 );
  304. if ( m_Cameras.Count() > 0 )
  305. {
  306. SelectKeyframe( m_Cameras.Get( index ) );
  307. }
  308. }
  309. }
  310. void ViewKeyframe()
  311. {
  312. if ( m_SelectedKeyframe && Camera.GetCurrentCamera() )
  313. {
  314. Camera.GetCurrentCamera().SetPosition( m_SelectedKeyframe.GetPosition() );
  315. Camera.GetCurrentCamera().SetOrientation( m_SelectedKeyframe.GetOrientation() );
  316. }
  317. }
  318. void AddActor( string actor_type )
  319. {
  320. vector pos = GetCameraLookDir();
  321. CTActor ac = new CTActor( m_Actors.Count(), pos, "0 0 0", actor_type, new array<string>, "", this );
  322. if ( ac.GetObj() )
  323. m_Actors.Insert( ac );
  324. }
  325. void AddEvent( int actor_index )
  326. {
  327. if ( actor_index > -1 )
  328. {
  329. CTEvent ev = new CTEvent( m_Events.Count(), actor_index, m_EventContent, false, this );
  330. m_Events.Insert( ev );
  331. }
  332. }
  333. void AddItem( string id, string type )
  334. {
  335. int id_int = id.ToInt();
  336. if ( m_Actors.Count() > id_int && id_int > -1 )
  337. {
  338. CTActor ac = m_Actors.Get( id_int );
  339. if ( ac )
  340. ac.AddItem( type );
  341. }
  342. }
  343. void AddHandsItem( string id, string type )
  344. {
  345. int id_int = id.ToInt();
  346. if ( m_Actors.Count() > id_int && id_int > -1 )
  347. {
  348. CTActor ac = m_Actors.Get( id_int );
  349. if ( ac )
  350. ac.SetHandsItem( type );
  351. }
  352. }
  353. void SaveEvent()
  354. {
  355. }
  356. void DeleteEvent()
  357. {
  358. }
  359. void ViewEvent()
  360. {
  361. }
  362. Param6<vector, vector, float, float, float, int> GetCameraLine( int index )
  363. {
  364. if ( index > -1 && index < m_CameraLines.Count() )
  365. {
  366. return m_CameraLines[index];
  367. }
  368. return null;
  369. }
  370. void Play()
  371. {
  372. if (Camera.GetCurrentCamera())
  373. Camera.GetCurrentCamera().GetTransform(m_FreeflightCamTransform);
  374. if ( m_Cameras.Count() > 0 )
  375. {
  376. layoutRoot.Show( false );
  377. GetGame().GetUIManager().ShowUICursor( false );
  378. m_CameraLines = new array<ref Param6<vector, vector, float, float, float, int>>;
  379. foreach ( CTKeyframe keyframe : m_Cameras )
  380. {
  381. Param6<vector, vector, float, float, float, int> transform = new Param6<vector, vector, float, float, float, int>( keyframe.GetPosition(), keyframe.GetOrientation(), keyframe.GetInterpTime(), keyframe.GetFOV(), keyframe.GetDOF(), keyframe.GetPin() );
  382. m_CameraLines.Insert( transform );
  383. }
  384. foreach ( CTActor ac : m_Actors )
  385. {
  386. ac.Hide();
  387. }
  388. foreach ( CTEvent ev : m_Events )
  389. {
  390. ev.GetEventTime();
  391. }
  392. DeveloperFreeCamera.DisableFreeCamera( PlayerBase.Cast( GetGame().GetPlayer() ), false );
  393. float time = SetCameraData( GetCameraLine( 0 ), GetCameraLine( 1 ) );
  394. if ( GetCameraLine( 0 ).param6 > -1 )
  395. {
  396. m_FollowingTimeFinished = time;
  397. m_NextCamPosition = "0 0 0";
  398. m_Camera1.SetActive( true );
  399. }
  400. else
  401. {
  402. m_NextCamPosition = m_Camera2.GetPosition();
  403. m_FollowingTimeFinished = -1;
  404. m_Camera1.SetActive( true );
  405. m_Camera1.EnableSmooth(m_InterpTypeCombo.GetCurrentItem() == 3);
  406. m_Camera1.InterpolateTo( m_Camera2, time, m_InterpTypeCombo.GetCurrentItem() );
  407. }
  408. m_NextCameraIndex = 1;
  409. m_IsPlaying = true;
  410. m_Time = 0;
  411. }
  412. }
  413. void Stop()
  414. {
  415. layoutRoot.Show( true );
  416. GetGame().GetUIManager().ShowUICursor( true );
  417. m_Camera1.StopInterpolation();
  418. m_Camera1.SetActive( false );
  419. m_Camera2.SetActive( false );
  420. FreeDebugCamera.GetInstance().SetActive(true);
  421. m_NextCameraIndex = 1;
  422. m_IsPlaying = false;
  423. foreach ( CTEvent ev : m_Events )
  424. {
  425. ev.Stop();
  426. }
  427. foreach ( CTActor ac : m_Actors )
  428. {
  429. ac.Reset();
  430. ac.Show();
  431. }
  432. Camera.GetCurrentCamera().SetTransform(m_FreeflightCamTransform);
  433. }
  434. vector GetCameraLookDir()
  435. {
  436. vector dir = FreeDebugCamera.GetInstance().GetDirection();
  437. vector from = FreeDebugCamera.GetInstance().GetPosition();
  438. vector to = from + ( dir * 10000 );
  439. vector contact_pos;
  440. vector contact_dir;
  441. int contact_component;
  442. Object ev_obj;
  443. if ( m_SelectedEvent )
  444. ev_obj = GetActor( m_SelectedEvent.GetEventActor() );
  445. if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, null, null, ev_obj) )
  446. {
  447. return contact_pos;
  448. }
  449. return "0 0 0";
  450. }
  451. vector GetMouseLookDir()
  452. {
  453. vector dir = GetGame().GetPointerDirection();
  454. vector from = FreeDebugCamera.GetInstance().GetPosition();
  455. vector to = from + ( dir * 10000 );
  456. vector contact_pos;
  457. vector contact_dir;
  458. int contact_component;
  459. Object ev_obj;
  460. if ( m_SelectedEvent )
  461. ev_obj = GetActor( m_SelectedEvent.GetEventActor() );
  462. if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, null, null, ev_obj) )
  463. {
  464. return contact_pos;
  465. }
  466. return "0 0 0";
  467. }
  468. override void Update( float timeslice )
  469. {
  470. string camPos = MiscGameplayFunctions.TruncateVecToS(FreeDebugCamera.GetInstance().GetPosition(),0);
  471. string camOri = MiscGameplayFunctions.TruncateVecToS(FreeDebugCamera.GetInstance().GetOrientation(),0);
  472. m_CameraValues.SetText("Pos:" +camPos + " | Rot:" + camOri);
  473. #ifdef DIAG_DEVELOPER
  474. if (DiagMenu.GetBool(DiagMenuIDs.CAMERATOOLS_ENABLE_REMOTE_CAMERA_BROADCAST))
  475. {
  476. Camera cam = Camera.GetCurrentCamera();
  477. if (!cam && m_Camera1)
  478. cam = m_Camera1;
  479. if (cam)
  480. {
  481. Param4<vector, vector,float,float> p4 = new Param4<vector, vector,float,float>(GetGame().GetCurrentCameraPosition(),GetGame().GetCurrentCameraDirection(), cam.GetNearPlane(), cam.GetCurrentFOV());
  482. GetGame().RPCSingleParam(null, ERPCs.DIAG_CAMERATOOLS_CAM_DATA, p4, false);
  483. }
  484. }
  485. #endif
  486. if ( m_CameraLines && m_IsPlaying )
  487. {
  488. foreach ( CTEvent ev : m_Events )
  489. {
  490. if ( ev.IsTime( m_Time, m_Time + timeslice ) )
  491. {
  492. ev.Play();
  493. }
  494. }
  495. m_Time += timeslice;
  496. if ( !Camera.IsInterpolationComplete() || !m_Camera1 || !m_Camera2 )
  497. {
  498. return;
  499. }
  500. if ( m_FollowingBone )
  501. {
  502. PlayerBase p = GetActor( m_FollowingBone.param1 );
  503. if ( p )
  504. {
  505. vector pos = p.GetBonePositionWS( m_FollowingBone.param2 );
  506. int bone_index = p.GetBoneIndexByName("LeftHand_Dummy");
  507. float bone_rot[4];
  508. p.GetBoneRotationWS( bone_index, bone_rot );
  509. vector new_orient = Math3D.QuatToAngles(bone_rot);
  510. //Print("Rot: "+ new_orient[0] +", "+ new_orient[1] +", "+ new_orient[2]);
  511. float temp = new_orient[1];
  512. new_orient[0] = new_orient[0] + 325; // vertical
  513. new_orient[1] = new_orient[2] + 245;// horizontal
  514. new_orient[2] = temp + 290; // tilt
  515. //Print("PostRot: "+ new_orient[0] +", "+ new_orient[1] +", "+ new_orient[2]);
  516. m_Camera1.SetPosition(pos);
  517. m_Camera1.SetOrientation(new_orient);
  518. }
  519. }
  520. if ( m_NextCameraIndex + 1 == m_CameraLines.Count() )
  521. {
  522. Stop();
  523. DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast( GetGame().GetPlayer() ) );
  524. foreach ( CTEvent ev2 : m_Events )
  525. {
  526. ev2.Stop();
  527. }
  528. return;
  529. }
  530. if ( Camera.IsInterpolationComplete() || Camera.GetCurrentCamera().GetPosition() == m_NextCamPosition || ( m_FollowingTimeFinished != -1 && m_Time >= m_FollowingTimeFinished ) )
  531. {
  532. float time;
  533. if ( GetCameraLine( m_NextCameraIndex - 1 ).param6 > -1 )
  534. {
  535. m_NextCameraIndex--;
  536. GetCameraLine( m_NextCameraIndex ).param6 = -1;
  537. time = SetCameraData( GetCameraLine( m_NextCameraIndex ), GetCameraLine( m_NextCameraIndex + 1 ) );
  538. }
  539. else
  540. {
  541. time = SetCameraData( GetCameraLine( m_NextCameraIndex ), GetCameraLine( m_NextCameraIndex + 1 ) );
  542. }
  543. m_NextCameraIndex++;
  544. if ( GetCameraLine( m_NextCameraIndex - 1 ).param6 > -1 )
  545. {
  546. m_FollowingTimeFinished = time + m_Time;
  547. m_NextCamPosition = "0 0 0";
  548. m_Camera1.SetActive( true );
  549. }
  550. else if ( GetCameraLine( m_NextCameraIndex ) )
  551. {
  552. m_NextCamPosition = GetCameraLine( m_NextCameraIndex ).param1;
  553. m_FollowingTimeFinished = -1;
  554. m_Camera1.SetActive( true );
  555. m_Camera1.InterpolateTo( m_Camera2, time, m_InterpTypeCombo.GetCurrentItem() );
  556. }
  557. else
  558. {
  559. Stop();
  560. DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast( GetGame().GetPlayer() ) );
  561. FreeDebugCamera.GetInstance().SetOrientation( "0 0 0" );
  562. foreach( CTEvent ev3 : m_Events )
  563. {
  564. ev3.Stop();
  565. }
  566. }
  567. }
  568. }
  569. else
  570. {
  571. if ( m_Camera1.GetPosition() == m_NextCamPosition )
  572. {
  573. DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast( GetGame().GetPlayer() ) );
  574. }
  575. for ( int i = 0; i < ( m_Cameras.Count() - 1 ); i++ )
  576. {
  577. vector pos0 = m_Cameras.Get( i ).GetPosition();
  578. vector pos1 = m_Cameras.Get( i + 1 ).GetPosition();
  579. Debug.DrawArrow( pos0, pos1, 2, COLOR_RED, ShapeFlags.ONCE );
  580. }
  581. if ( m_SelectedActor )
  582. {
  583. if ( !g_Game.IsLeftCtrlDown() )
  584. m_SelectedActor.SetPosition( GetMouseLookDir() );
  585. else
  586. {
  587. vector from = m_SelectedActor.GetPosition();
  588. vector to = GetMouseLookDir();
  589. Debug.DrawArrow( from, to, 0.5, COLOR_RED, ShapeFlags.ONCE );
  590. m_SelectedActor.SetRotation( vector.Direction( from,to ).Normalized().VectorToAngles() );
  591. }
  592. }
  593. foreach ( CTActor ac : m_Actors )
  594. {
  595. ac.Update( timeslice );
  596. }
  597. }
  598. }
  599. float SetCameraData( Param6<vector, vector, float, float, float,int> transform1, Param6<vector, vector, float, float, float, int> transform2 )
  600. {
  601. float int_value = transform1.param3;
  602. if ( m_InterpTypeSpeedCombo.GetCurrentItem() == 1 )
  603. {
  604. int_value = vector.Distance( transform1.param1, transform2.param1 ) / int_value;
  605. }
  606. PlayerBase p;
  607. float pQuat[4];
  608. int b_index;
  609. if ( transform1.param6 > -1 )
  610. {
  611. p = GetActor( transform1.param6 );
  612. if ( p )
  613. {
  614. b_index = p.GetBoneIndexByName( "LeftHand_Dummy" );
  615. m_FollowingBone = new Param2<int, int>(transform1.param6, b_index);
  616. }
  617. }
  618. else
  619. {
  620. m_Camera1.SetPosition( transform1.param1 );
  621. m_Camera1.SetOrientation( transform1.param2 );
  622. m_FollowingBone = null;
  623. }
  624. m_Camera1.SetFOV( transform1.param4 * Math.DEG2RAD );
  625. m_Camera1.SetFocus( transform1.param5, GetBlurValue() );
  626. if ( transform2 )
  627. {
  628. if ( transform2.param6 > -1 )
  629. {
  630. pQuat[4];
  631. p = GetActor( transform2.param6 );
  632. if ( p )
  633. {
  634. b_index = p.GetBoneIndexByName( "LeftHand_Dummy" );
  635. if ( b_index != -1 )
  636. {
  637. m_Camera2.SetPosition( p.GetBonePositionWS( b_index ) );
  638. p.GetBoneRotationWS( b_index, pQuat);
  639. vector v = Math3D.QuatToAngles( pQuat );
  640. v[0] = fixAngle_180_180( v[0] - 180 );
  641. v[1] = fixAngle_180_180( v[1] - 270 );
  642. v[2] = fixAngle_180_180( v[2] + 90 );
  643. DbgUI.Text( v.ToString() );
  644. m_Camera2.SetYawPitchRoll( v );
  645. }
  646. }
  647. }
  648. else
  649. {
  650. m_Camera2.SetPosition( transform2.param1 );
  651. m_Camera2.SetOrientation( transform2.param2 );
  652. }
  653. m_Camera2.SetFOV( transform2.param4 * Math.DEG2RAD );
  654. m_Camera2.SetFocus( transform2.param5, GetBlurValue() );
  655. }
  656. return int_value;
  657. }
  658. void SetBlurValue( float blur )
  659. {
  660. m_BlurEditWidget.SetText( blur.ToString() );
  661. }
  662. float GetBlurValue()
  663. {
  664. return m_BlurEditWidget.GetText().ToFloat();
  665. }
  666. override bool OnMouseButtonDown( Widget w, int x, int y, int button )
  667. {
  668. if ( w == layoutRoot && button == MouseState.RIGHT && !m_IsPlaying )
  669. {
  670. GetGame().GetInput().ResetGameFocus();
  671. GetGame().GetInput().ChangeGameFocus(-1);
  672. GetGame().GetUIManager().ShowUICursor(false);
  673. GetGame().GetMission().RemoveActiveInputExcludes({"menu"});
  674. SetFocus( layoutRoot );
  675. return true;
  676. }
  677. else if ( !IsFocusable( w ) )
  678. {
  679. SetFocus( layoutRoot );
  680. }
  681. return false;
  682. }
  683. override bool OnMouseButtonUp( Widget w, int x, int y, int button )
  684. {
  685. if ( w == layoutRoot && button == MouseState.LEFT )
  686. {
  687. SelectActor( null );
  688. return true;
  689. }
  690. return false;
  691. }
  692. override bool OnClick( Widget w, int x, int y, int button )
  693. {
  694. if ( button == MouseState.LEFT )
  695. {
  696. if ( w == m_SaveKeyframe )
  697. {
  698. SaveKeyframe();
  699. return true;
  700. }
  701. else if ( w == m_DeleteKeyframe )
  702. {
  703. DeleteKeyframe();
  704. return true;
  705. }
  706. else if ( w == m_ViewKeyframe )
  707. {
  708. ViewKeyframe();
  709. return true;
  710. }
  711. else if ( w == m_SaveEvent )
  712. {
  713. SaveEvent();
  714. return true;
  715. }
  716. else if ( w == m_DeleteEvent )
  717. {
  718. DeleteEvent();
  719. return true;
  720. }
  721. else if ( w == m_ViewEvent )
  722. {
  723. ViewEvent();
  724. return true;
  725. }
  726. else if ( w == m_AddKeyframe )
  727. {
  728. AddKeyframe();
  729. return true;
  730. }
  731. else if ( w == m_AddEvent )
  732. {
  733. AddEvent( 0 );
  734. return true;
  735. }
  736. else if ( w == m_Play )
  737. {
  738. Play();
  739. return true;
  740. }
  741. else if ( w == m_Stop )
  742. {
  743. Stop();
  744. return true;
  745. }
  746. else if ( w == m_Save )
  747. {
  748. SaveData();
  749. return true;
  750. }
  751. else if ( w == m_Load )
  752. {
  753. LoadData();
  754. return true;
  755. }
  756. else if (w == m_Reset)
  757. {
  758. ResetAll();
  759. return true;
  760. }
  761. else if ( w == m_AddActor )
  762. {
  763. AddActor( m_ActorTypeWidget.GetText() );
  764. }
  765. else if ( w == m_AddItem )
  766. {
  767. AddItem( m_ActorIdWidget.GetText(), m_ActorItemTypeWidget.GetText() );
  768. }
  769. else if ( w == m_AddHandsItem )
  770. {
  771. AddHandsItem( m_ActorIdWidget.GetText(), m_ActorItemTypeWidget.GetText() );
  772. }
  773. else if ( w == m_CopyButton )
  774. {
  775. string clipboardIn = FreeDebugCamera.GetInstance().GetPosition().ToString(false)+"|"+ FreeDebugCamera.GetInstance().GetOrientation().ToString(false);
  776. GetGame().CopyToClipboard( clipboardIn );
  777. //Print(clipboardIn);
  778. }
  779. else if ( w == m_ApplyButton )
  780. {
  781. string camText = m_CameraEditbox.GetText();
  782. if (camText && camText.IndexOf("|") !=-1)
  783. {
  784. int seperatorIndex = camText.IndexOf("|");
  785. int length = camText.Length();
  786. string posStr = camText.Substring(0,seperatorIndex);
  787. string oriStr = camText.Substring(seperatorIndex+1, length - seperatorIndex - 1);
  788. FreeDebugCamera.GetInstance().SetPosition(posStr.ToVector());
  789. FreeDebugCamera.GetInstance().SetOrientation(oriStr.ToVector());
  790. }
  791. }
  792. }
  793. return false;
  794. }
  795. override bool OnMouseEnter( Widget w, int x, int y )
  796. {
  797. if ( w == m_CameraEditbox)
  798. m_CameraEditbox.SetText("");
  799. return true;
  800. }
  801. override bool OnMouseLeave( Widget w, Widget enterW, int x, int y )
  802. {
  803. return true;
  804. }
  805. override bool OnFocus( Widget w, int x, int y )
  806. {
  807. if ( IsFocusable( w ) )
  808. {
  809. ColorRed( w );
  810. return true;
  811. }
  812. return false;
  813. }
  814. override bool OnFocusLost( Widget w, int x, int y )
  815. {
  816. if ( IsFocusable( w ) )
  817. {
  818. ColorWhite( w, null );
  819. return true;
  820. }
  821. return false;
  822. }
  823. bool IsFocusable( Widget w )
  824. {
  825. if ( w )
  826. {
  827. return ( w == m_SaveKeyframe || w == m_DeleteKeyframe || w == m_ViewKeyframe || w == m_SaveEvent || w == m_DeleteEvent || w == m_ViewEvent || w == m_AddKeyframe || w == m_AddEvent || w == m_Play || w == m_Stop || w == m_Save || w == m_Load || w == m_InterpTypeCombo );
  828. }
  829. return false;
  830. }
  831. override bool OnKeyPress(Widget w, int x, int y, int key)
  832. {
  833. if (!w && key == KeyCode.KC_P )
  834. {
  835. if ( !m_IsPlaying )
  836. {
  837. Play();
  838. return true;
  839. }
  840. else
  841. {
  842. Stop();
  843. return true;
  844. }
  845. return false;
  846. }
  847. else if ( g_Game.IsLeftCtrlDown() && key == KeyCode.KC_S )
  848. {
  849. SaveKeyframe();
  850. return true;
  851. }
  852. else if ( g_Game.IsLeftCtrlDown() && key == KeyCode.KC_Q )
  853. {
  854. AddKeyframe();
  855. return true;
  856. }
  857. else if ( g_Game.IsLeftCtrlDown() && key == KeyCode.KC_E )
  858. {
  859. DeleteKeyframe();
  860. return true;
  861. }
  862. else if ( !w && g_Game.IsLeftCtrlDown() )
  863. {
  864. SelectActor( null );
  865. return true;
  866. }
  867. return false;
  868. }
  869. //Coloring functions (Until WidgetStyles are useful)
  870. void ColorRed( Widget w )
  871. {
  872. //SetFocus( w );
  873. if ( w.IsInherited( ButtonWidget ) )
  874. {
  875. ButtonWidget button = ButtonWidget.Cast( w );
  876. button.SetTextColor( ARGB( 255, 255, 0, 0 ) );
  877. button.SetAlpha( 0.9 );
  878. }
  879. }
  880. void ColorWhite( Widget w, Widget enterW )
  881. {
  882. if ( w.IsInherited( ButtonWidget ) )
  883. {
  884. ButtonWidget button = ButtonWidget.Cast( w );
  885. if (button)
  886. {
  887. button.SetTextColor( ARGB( 255, 255, 255, 255 ) );
  888. button.SetAlpha( 0.75 );
  889. }
  890. }
  891. }
  892. }