141 layoutRoot =
GetGame().GetWorkspace().CreateWidgets(
"gui/layouts/camera_tools/camera_tools.layout" );
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" ) );
152 m_AddKeyframe = ButtonWidget.Cast( layoutRoot.FindAnyWidget(
"add_keyframe" ) );
153 m_AddEvent = ButtonWidget.Cast( layoutRoot.FindAnyWidget(
"add_event" ) );
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" ) );
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" ) );
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" ) );
176 MissionGameplay ms = MissionGameplay.Cast(
GetGame().GetMission() );
177 ms.GetHud().Show(
false );
180 m_BlurEditWidget.SetText(
"0.0" );
219 if (!JsonFileLoader<ref CTSaveStructure>.LoadFile(m_CameraToolsDataPath +
"/keyframe_data.json", saveData, errorMessage))
222 m_InterpTypeCombo.SetCurrentItem(saveData.m_InterpType);
223 m_InterpTypeSpeedCombo.SetCurrentItem(saveData.m_InterpSpeed);
224 SetBlurValue(saveData.m_BlurValue);
226 foreach (Param6<vector, vector, float, float, float, int> transform : saveData.m_Cameras)
228 CTKeyframe keyFrame =
new CTKeyframe(
236 GetTotalTime(m_Cameras.Count()),
241 keyFrame.SetInterpTime(transform.param3);
242 m_Cameras.Insert(keyFrame);
245 foreach (Param4<int, int, float, bool> eventEntry : saveData.m_Events)
247 CTEvent ev =
new CTEvent(
255 ev.SetEventType(eventEntry.param2);
256 ev.SetEventTime(eventEntry.param3);
262 CTActor ac =
new CTActor(m_Actors.Count(), actorEntry.param1, actorEntry.param2, actorEntry.param3, actorEntry.param4, actorEntry.param5,
this);
273 saveData.m_InterpType = m_InterpTypeCombo.GetCurrentItem();
274 saveData.m_InterpSpeed = m_InterpTypeSpeedCombo.GetCurrentItem();
275 saveData.m_BlurValue = GetBlurValue();
277 foreach (CTKeyframe keyframe : m_Cameras)
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(),
287 saveData.m_Cameras.Insert(transform);
290 foreach (CTEvent eventEntry : m_Events)
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(),
298 saveData.m_Events.Insert(ev);
301 foreach (CTActor actorEntry : m_Actors)
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(),
310 saveData.m_Actors.Insert(ac);
314 if (!JsonFileLoader<ref CTSaveStructure>.SaveFile(m_CameraToolsDataPath +
"/keyframe_data.json", saveData, errorMessage))
450 if (
Camera.GetCurrentCamera())
451 Camera.GetCurrentCamera().GetTransform(m_FreeflightCamTransform);
452 if ( m_Cameras.Count() > 0 )
454 layoutRoot.Show(
false );
455 GetGame().GetUIManager().ShowUICursor(
false );
458 foreach ( CTKeyframe keyframe : m_Cameras )
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 );
465 foreach ( CTActor ac : m_Actors )
470 foreach ( CTEvent ev : m_Events )
477 float time = SetCameraData( GetCameraLine( 0 ), GetCameraLine( 1 ) );
479 if ( GetCameraLine( 0 ).param6 > -1 )
481 m_FollowingTimeFinished = time;
482 m_NextCamPosition =
"0 0 0";
483 m_Camera1.SetActive(
true );
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() );
494 m_NextCameraIndex = 1;
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);
572 #ifdef DIAG_DEVELOPER
577 if (!cam && m_Camera1)
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);
590 foreach ( CTEvent ev : m_Events )
600 if ( !
Camera.IsInterpolationComplete() || !m_Camera1 || !m_Camera2 )
605 if ( m_FollowingBone )
607 PlayerBase p = GetActor( m_FollowingBone.param1 );
610 vector pos = p.GetBonePositionWS( m_FollowingBone.param2 );
612 int bone_index = p.GetBoneIndexByName(
"LeftHand_Dummy");
614 p.GetBoneRotationWS( bone_index, bone_rot );
620 float temp = new_orient[1];
621 new_orient[0] = new_orient[0] + 325;
622 new_orient[1] = new_orient[2] + 245;
623 new_orient[2] = temp + 290;
627 m_Camera1.SetPosition(pos);
628 m_Camera1.SetOrientation(new_orient);
632 if ( m_NextCameraIndex + 1 == m_CameraLines.Count() )
636 foreach ( CTEvent ev2 : m_Events )
643 if (
Camera.IsInterpolationComplete() ||
Camera.GetCurrentCamera().GetPosition() == m_NextCamPosition || ( m_FollowingTimeFinished != -1 &&
m_Time >= m_FollowingTimeFinished ) )
646 if ( GetCameraLine( m_NextCameraIndex - 1 ).param6 > -1 )
649 GetCameraLine( m_NextCameraIndex ).param6 = -1;
651 time = SetCameraData( GetCameraLine( m_NextCameraIndex ), GetCameraLine( m_NextCameraIndex + 1 ) );
655 time = SetCameraData( GetCameraLine( m_NextCameraIndex ), GetCameraLine( m_NextCameraIndex + 1 ) );
659 if ( GetCameraLine( m_NextCameraIndex - 1 ).param6 > -1 )
661 m_FollowingTimeFinished = time +
m_Time;
662 m_NextCamPosition =
"0 0 0";
663 m_Camera1.SetActive(
true );
665 else if ( GetCameraLine( m_NextCameraIndex ) )
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() );
676 FreeDebugCamera.GetInstance().SetOrientation(
"0 0 0" );
677 foreach( CTEvent ev3 : m_Events )
686 if ( m_Camera1.GetPosition() == m_NextCamPosition )
691 for (
int i = 0; i < ( m_Cameras.Count() - 1 ); i++ )
693 vector pos0 = m_Cameras.Get( i ).GetPosition();
694 vector pos1 = m_Cameras.Get( i + 1 ).GetPosition();
698 if ( m_SelectedActor )
700 if ( !
g_Game.IsLeftCtrlDown() )
701 m_SelectedActor.SetPosition( GetMouseLookDir() );
704 vector from = m_SelectedActor.GetPosition();
705 vector to = GetMouseLookDir();
707 m_SelectedActor.SetRotation(
vector.Direction( from,to ).Normalized().VectorToAngles() );
712 foreach ( CTActor ac : m_Actors )
714 ac.Update( timeslice );
719 float SetCameraData( Param6<vector, vector, float, float, float,int> transform1, Param6<vector, vector, float, float, float, int> transform2 )
721 float int_value = transform1.param3;
722 if ( m_InterpTypeSpeedCombo.GetCurrentItem() == 1 )
724 int_value =
vector.Distance( transform1.param1, transform2.param1 ) / int_value;
729 if ( transform1.param6 > -1 )
731 p = GetActor( transform1.param6 );
734 b_index = p.GetBoneIndexByName(
"LeftHand_Dummy" );
740 m_Camera1.SetPosition( transform1.param1 );
741 m_Camera1.SetOrientation( transform1.param2 );
742 m_FollowingBone = null;
744 m_Camera1.SetFOV( transform1.param4 *
Math.DEG2RAD );
745 m_Camera1.SetFocus( transform1.param5, GetBlurValue() );
749 if ( transform2.param6 > -1 )
752 p = GetActor( transform2.param6 );
755 b_index = p.GetBoneIndexByName(
"LeftHand_Dummy" );
758 m_Camera2.SetPosition( p.GetBonePositionWS( b_index ) );
760 p.GetBoneRotationWS( b_index, pQuat);
765 DbgUI.Text( v.ToString() );
766 m_Camera2.SetYawPitchRoll( v );
772 m_Camera2.SetPosition( transform2.param1 );
773 m_Camera2.SetOrientation( transform2.param2 );
776 m_Camera2.SetFOV( transform2.param4 *
Math.DEG2RAD );
777 m_Camera2.SetFocus( transform2.param5, GetBlurValue() );
821 override bool OnClick( Widget w,
int x,
int y,
int button )
825 if ( w == m_SaveKeyframe )
830 else if ( w == m_DeleteKeyframe )
835 else if ( w == m_ViewKeyframe )
840 else if ( w == m_SaveEvent )
845 else if ( w == m_DeleteEvent )
850 else if ( w == m_ViewEvent )
855 else if ( w == m_AddKeyframe )
860 else if ( w == m_AddEvent )
865 else if ( w == m_Play )
870 else if ( w == m_Stop )
875 else if ( w == m_Save )
880 else if ( w == m_Load )
885 else if (w == m_Reset)
890 else if ( w == m_AddActor )
892 AddActor( m_ActorTypeWidget.GetText() );
894 else if ( w == m_AddItem )
896 AddItem( m_ActorIdWidget.GetText(), m_ActorItemTypeWidget.GetText() );
898 else if ( w == m_AddHandsItem )
900 AddHandsItem( m_ActorIdWidget.GetText(), m_ActorItemTypeWidget.GetText() );
904 string clipboardIn = FreeDebugCamera.GetInstance().GetPosition().ToString(
false)+
"|"+ FreeDebugCamera.GetInstance().GetOrientation().ToString(
false);
905 GetGame().CopyToClipboard( clipboardIn );
911 string camText = m_CameraEditbox.GetText();
912 if (camText && camText.IndexOf(
"|") !=-1)
914 int seperatorIndex = camText.IndexOf(
"|");
915 int length = camText.Length();
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());