public override void UpdateAfterSimulation100() { base.UpdateAfterSimulation100(); if (!TimerEnabled) { return; } var currentTime = MyPerGameSettings.GetElapsedMinutes(); if (m_resetOrigin) { m_originTimeMin = currentTime + m_setTimeMin - TimeToEvent; m_resetOrigin = false; } TimeToEvent = m_originTimeMin + m_setTimeMin - currentTime; if (TimeToEvent <= 0) { if (EventToTrigger != null) { EventToTrigger(Container); } if (Repeat) { m_originTimeMin = MyPerGameSettings.GetElapsedMinutes(); } else { TimerEnabled = false; } } }
private void StartTiming() { System.Diagnostics.Debug.Assert(MyPerGameSettings.GetElapsedMinutes != null, "This component must be used together with time!"); TimeToEvent = m_setTimeMin; TimerEnabled = true; m_originTimeMin = MyPerGameSettings.GetElapsedMinutes(); }
public override void UpdateToolPosition() { if (m_currentWeapon != null) { if (!MyPerGameSettings.CheckUseAnimationInsteadOfIK(m_currentWeapon)) { UpdateWeaponPosition(); } } }
public override void OnControlAcquired(MyCharacter owner) { base.OnControlAcquired(owner); Debug.Assert(Owner != null, "Owner was null in OnControlAcquired of MyCubePlacer"); if (Owner != null) { if (MyPerGameSettings.CheckUseAnimationInsteadOfIK()) { Owner.PlayCharacterAnimation("Building_pose", MyBlendOption.Immediate, MyFrameOption.Loop, 0.2f); } if (Owner.ControllerInfo.IsLocallyHumanControlled()) { BlockBuilder.Activate(); } } }
public override void EndShoot(MyShootActionEnum action) { base.EndShoot(action); m_firstShot = true; if (CharacterInventory == null) { Debug.Fail("Character inventory was null !"); return; } MyCharacter character = CharacterInventory.Owner as MyCharacter; if (character == null) { Debug.Fail("Character inventory was not owned by a character"); return; } if (m_closeAfterBuild) { if (character.ControllerInfo != null && character.ControllerInfo.IsRemotelyControlled()) { return; } character.SwitchToWeapon(null); } else { if (MyPerGameSettings.CheckUseAnimationInsteadOfIK()) { character.PlayCharacterAnimation("Building_pose", MyBlendOption.Immediate, MyFrameOption.Loop, 0.2f); } } }
protected override void CalculateTransforms(float distance) { ProfilerShort.Begin("MyCharacter.CalculateTransforms"); base.CalculateTransforms(distance); VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("UpdateLeftHandItemPosition"); if (m_leftHandItem != null) { UpdateLeftHandItemPosition(); } VRageRender.MyRenderProxy.GetRenderProfiler().StartNextBlock("Calculate Hand IK"); if (this == MySession.Static.ControlledEntity) { // (OM) Note: only controlled character can get it's aimed point from camera, otherwise all character's will aim the same direction // set the aimed point explicitly using AimedPoint property m_aimedPoint = GetAimedPointFromCamera(); } if (m_currentWeapon != null) { if (!MyPerGameSettings.CheckUseAnimationInsteadOfIK(m_currentWeapon)) { UpdateWeaponPosition(); //mainly IK and some zoom + ironsight stuff if (m_handItemDefinition.SimulateLeftHand && m_leftHandIKStartBone != -1 && m_leftHandIKEndBone != -1 && (!UseAnimationForWeapon && m_animationToIKState == 0)) { MatrixD leftHand = (MatrixD)m_handItemDefinition.LeftHand * ((MyEntity)m_currentWeapon).WorldMatrix; CalculateHandIK(m_leftHandIKStartBone, m_leftForearmBone, m_leftHandIKEndBone, ref leftHand); } if (m_handItemDefinition.SimulateRightHand && m_rightHandIKStartBone != -1 && m_rightHandIKEndBone != -1 && (!UseAnimationForWeapon || m_animationToIKState != 0) && IsSitting == false) { MatrixD rightHand = (MatrixD)m_handItemDefinition.RightHand * ((MyEntity)m_currentWeapon).WorldMatrix; CalculateHandIK(m_rightHandIKStartBone, m_rightForearmBone, m_rightHandIKEndBone, ref rightHand); } } else { GetHeadMatrix(true, sync: true); // CH: REMOVE ME! I'M A TERRIBLE HACK! Debug.Assert(m_rightHandItemBone != -1, "Invalid bone for weapon."); if (m_rightHandItemBone != -1) { //use animation for right hand item MatrixD rightHandItemMatrix = AnimationController.CharacterBones[m_rightHandItemBone].AbsoluteTransform * WorldMatrix; //var rightHandItemMatrix = ((MyEntity)m_currentWeapon).PositionComp.WorldMatrix; //use with UpdateWeaponPosition() but not working for barbarians Vector3D up = rightHandItemMatrix.Up; rightHandItemMatrix.Up = rightHandItemMatrix.Forward; rightHandItemMatrix.Forward = up; rightHandItemMatrix.Right = -rightHandItemMatrix.Right; ((MyEntity)m_currentWeapon).PositionComp.WorldMatrix = rightHandItemMatrix; } } } else { GetHeadMatrix(true, sync: true); // CH: REMOVE ME! I'M A TERRIBLE HACK! } VRageRender.MyRenderProxy.GetRenderProfiler().StartNextBlock("ComputeBoneTransform"); var characterBones = AnimationController.CharacterBones; if (characterBones == null) { return; } for (int i = 0; i < characterBones.Length; i++) { MyCharacterBone bone = characterBones[i]; bone.ComputeBoneTransform(); BoneRelativeTransforms[i] = bone.RelativeTransform; } VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); ProfilerShort.End(); }
protected override void CalculateTransforms(float distance) { ProfilerShort.Begin("MyCharacter.CalculateTransforms"); base.CalculateTransforms(distance); if (m_headBoneIndex >= 0 && AnimationController.CharacterBones != null && (IsInFirstPersonView || ForceFirstPersonCamera) && ControllerInfo.IsLocallyControlled() && !IsBot) { Vector3 headHorizontalTranslation = AnimationController.CharacterBones[m_headBoneIndex].AbsoluteTransform.Translation; headHorizontalTranslation.Y = 0; MyCharacterBone.TranslateAllBones(AnimationController.CharacterBones, -headHorizontalTranslation); } VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("Calculate Hand IK"); if (this == MySession.Static.ControlledEntity) { // (OM) Note: only controlled character can get it's aimed point from camera, otherwise all character's will aim the same direction // set the aimed point explicitly using AimedPoint property m_aimedPoint = GetAimedPointFromCamera(); } VRageRender.MyRenderProxy.GetRenderProfiler().StartNextBlock("Update anim IK"); AnimationController.UpdateInverseKinematics(); // since we already have absolute transforms VRageRender.MyRenderProxy.GetRenderProfiler().StartNextBlock("UpdateLeftHandItemPosition"); if (m_leftHandItem != null) { UpdateLeftHandItemPosition(); } if (m_currentWeapon != null && WeaponPosition != null) { if (!MyPerGameSettings.CheckUseAnimationInsteadOfIK(m_currentWeapon)) { WeaponPosition.Update(); //mainly IK and some zoom + ironsight stuff if (m_handItemDefinition.SimulateLeftHand && m_leftHandIKStartBone != -1 && m_leftHandIKEndBone != -1 && (!UseAnimationForWeapon)) { MatrixD leftHand = (MatrixD)m_handItemDefinition.LeftHand * ((MyEntity)m_currentWeapon).WorldMatrix; CalculateHandIK(m_leftHandIKStartBone, m_leftForearmBone, m_leftHandIKEndBone, ref leftHand); } if (m_handItemDefinition.SimulateRightHand && m_rightHandIKStartBone != -1 && m_rightHandIKEndBone != -1 && (!UseAnimationForWeapon) && IsSitting == false) { MatrixD rightHand = (MatrixD)m_handItemDefinition.RightHand * ((MyEntity)m_currentWeapon).WorldMatrix; CalculateHandIK(m_rightHandIKStartBone, m_rightForearmBone, m_rightHandIKEndBone, ref rightHand); } } else { GetHeadMatrix(true); // CH: REMOVE ME! I'M A TERRIBLE HACK! Debug.Assert(m_rightHandItemBone != -1, "Invalid bone for weapon."); if (m_rightHandItemBone != -1) { //use animation for right hand item MyCharacterBone boneRightHand = AnimationController.CharacterBones[m_rightHandItemBone]; ((MyEntity)m_currentWeapon).PositionComp.WorldMatrix = boneRightHand.AbsoluteTransform * PositionComp.WorldMatrix; if (MyDebugDrawSettings.ENABLE_DEBUG_DRAW) { MyRenderProxy.DebugDrawAxis(((MyEntity)m_currentWeapon).PositionComp.WorldMatrix, 0.5f, false); } } } } else { if (WeaponPosition != null) { WeaponPosition.UpdateIkTransitions(); } GetHeadMatrix(true); // CH: REMOVE ME! I'M A TERRIBLE HACK! } VRageRender.MyRenderProxy.GetRenderProfiler().StartNextBlock("ComputeBoneTransform"); var characterBones = AnimationController.CharacterBones; if (characterBones == null) { return; } for (int i = 0; i < characterBones.Length; i++) { MyCharacterBone bone = characterBones[i]; bone.ComputeBoneTransform(); BoneRelativeTransforms[i] = bone.RelativeTransform; } VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); ProfilerShort.End(); }