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