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; }
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); }*/ } }
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); } }
public bool PlayCutscene(string cutsceneName) { MySandboxGame.Log.WriteLineAndConsole("Cutscene start: " + cutsceneName); if (m_cutsceneLibrary.ContainsKey(cutsceneName)) { if (IsCutsceneRunning) CutsceneEnd(false); else m_origHud = MyHud.MinimalHud; 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.MinimalHud = true; 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 + "\"."); return false; } }