Exemplo n.º 1
0
        public bool PlayCutscene(string cutsceneName)
        {
            MySandboxGame.Log.WriteLineAndConsole("Cutscene start: " + cutsceneName);
            if (m_cutsceneLibrary.ContainsKey(cutsceneName))
            {
                if (IsCutsceneRunning)
                {
                    CutsceneEnd(false);
                }

                m_currentCutscene                = m_cutsceneLibrary[cutsceneName];
                m_currentNode                    = null;
                m_currentNodeIndex               = 0;
                m_currentTime                    = 0;
                m_nodeActivated                  = false;
                m_lookTarget                     = null;
                m_attachedPositionTo             = null;
                m_attachedRotationTo             = null;
                m_rotateTarget                   = null;
                m_moveTarget                     = null;
                m_currentFOV                     = MathHelper.Clamp(m_currentCutscene.StartingFOV, MINIMUM_FOV, MAXIMUM_FOV);
                MyGuiScreenGamePlay.DisableInput = true;
                if (MyCubeBuilder.Static.IsActivated)
                {
                    MyCubeBuilder.Static.Deactivate();
                }
                MyHud.CutsceneHud          = true;
                m_overlayEnabled           = MyHudCameraOverlay.Enabled;
                MyHudCameraOverlay.Enabled = false;

                MatrixD  startMatrix = MatrixD.Identity;
                MyEntity entity      = m_currentCutscene.StartEntity.Length > 0 ? MyVisualScriptLogicProvider.GetEntityByName(m_currentCutscene.StartEntity) : null;
                if (entity != null)
                {
                    startMatrix = entity.WorldMatrix;
                }

                if (m_currentCutscene.StartLookAt.Length > 0 && !m_currentCutscene.StartLookAt.Equals(m_currentCutscene.StartEntity))
                {
                    entity = MyVisualScriptLogicProvider.GetEntityByName(m_currentCutscene.StartLookAt);
                    if (entity != null)
                    {
                        startMatrix = MatrixD.CreateLookAtInverse(startMatrix.Translation, entity.PositionComp.GetPosition(), startMatrix.Up);
                    }
                }
                m_nodeStartMatrix          = startMatrix;
                m_currentCameraMatrix      = startMatrix;
                m_originalCameraController = MySession.Static.CameraController;
                m_cameraEntity.WorldMatrix = startMatrix;
                MySession.Static.SetCameraController(MyCameraControllerEnum.Entity, m_cameraEntity);

                return(true);
            }
            else
            {
                Debug.Fail("There is no cutscene named \"" + cutsceneName + "\".");
                CutsceneEnd();
                return(false);
            }
        }
        public override void UpdateBeforeSimulation()
        {
            if (IsCutsceneRunning)
            {
                if (MySession.Static.CameraController != m_cameraEntity)
                {
                    m_originalCameraController = MySession.Static.CameraController;
                    MySession.Static.SetCameraController(MyCameraControllerEnum.Entity, m_cameraEntity);
                }
                if (m_currentCutscene.SequenceNodes != null && m_currentCutscene.SequenceNodes.Length > m_currentNodeIndex)
                {
                    m_currentNode = m_currentCutscene.SequenceNodes[m_currentNodeIndex];
                    CutsceneUpdate();
                }
                else
                {
                    //cutscene done
                    if (m_currentCutscene.NextCutscene != null && m_currentCutscene.NextCutscene.Length > 0)
                    {
                        PlayCutscene(m_currentCutscene.NextCutscene);
                    }
                    else
                    {
                        CutsceneEnd();
                    }
                }
                m_cameraEntity.WorldMatrix = m_currentCameraMatrix;

                /*
                 * DEBUG curve
                 * if (false && m_waypoints.Count > 2)
                 * {
                 *  int i = 0;
                 *  for (float timeRatio = 0f; timeRatio <= 1f; timeRatio += 0.01f)
                 *  {
                 *      float segmentTime = 1f / (m_waypoints.Count - 1);
                 *      int segment = (int)Math.Floor(timeRatio / segmentTime);
                 *      float segmentRatio = (timeRatio - segment * segmentTime) / segmentTime;
                 *      Vector3D pos = Vector3D.Zero;
                 *      if (segment == 0)
                 *      {
                 *          pos = MathHelper.CalculateBezierPoint(segmentRatio, m_waypoints[segment], m_waypoints[segment], m_waypoints[segment + 1] - (m_waypoints[segment + 2] - m_waypoints[segment]) / 4, m_waypoints[segment + 1]);
                 *      }
                 *      else if (segment >= m_waypoints.Count - 2)
                 *      {
                 *          pos = MathHelper.CalculateBezierPoint(segmentRatio, m_waypoints[segment], m_waypoints[segment] + (m_waypoints[segment + 1] - m_waypoints[segment - 1]) / 4, m_waypoints[segment + 1], m_waypoints[segment + 1]);
                 *      }
                 *      else
                 *      {
                 *          pos = MathHelper.CalculateBezierPoint(segmentRatio, m_waypoints[segment], m_waypoints[segment] + (m_waypoints[segment + 1] - m_waypoints[segment - 1]) / 4, m_waypoints[segment+1] - (m_waypoints[segment + 2] - m_waypoints[segment]) / 4, m_waypoints[segment + 1]);
                 *      }
                 *      //VRageRender.MyRenderProxy.DebugDrawSphere((Vector3)pos, 0.2f, Color.Aquamarine, 1f, true);
                 *      VRageRender.MyRenderProxy.DebugDrawText3D(pos, i.ToString(), Color.GreenYellow, 1, true);
                 *      i++;
                 *  }
                 *  foreach(var w in m_waypoints)
                 *      VRageRender.MyRenderProxy.DebugDrawSphere(w, 1.5f, Color.Orange, 1f, true);
                 * }*/
            }
        }
Exemplo n.º 3
0
 void onClick_AddNodeButton(MyGuiControlButton sender)
 {
     CutsceneSequenceNode[] newNodes = new CutsceneSequenceNode[] { new CutsceneSequenceNode() };
     if (m_selectedCutscene.SequenceNodes != null)
     {
         m_selectedCutscene.SequenceNodes = m_selectedCutscene.SequenceNodes.Union(newNodes).ToArray();
     }
     else
     {
         m_selectedCutscene.SequenceNodes = newNodes;
     }
 }
Exemplo n.º 4
0
        void m_comboNodes_ItemSelected()
        {
            m_selectedCutsceneNode = m_selectedCutscene.SequenceNodes[m_comboNodes.GetSelectedKey()];
            m_nodeTimeSlider.Value = m_selectedCutsceneNode.Time;

            m_comboWaypoints.ClearItems();

            if (m_selectedCutsceneNode.Waypoints != null)
            {
                foreach (var waypoint in m_selectedCutsceneNode.Waypoints)
                {
                    m_comboWaypoints.AddItem(waypoint.Name.GetHashCode(), waypoint.Name);
                }

                if (m_comboWaypoints.GetItemsCount() > 0)
                {
                    m_comboWaypoints.SelectItemByIndex(0);
                }
            }
        }