internal override void updateCollisionWith(Entity a_collider) { if (m_hasSaved && a_collider is Player) { Player t_player = (Player)a_collider; if(CollisionManager.Collides(this.getHitBox(), a_collider.getHitBox())) { //if (KeyboardHandler.isKeyPressed(GameState.getActionKey()) && Game.getInstance().getState() is GameState) //{ Level tLevel = new Level(); tLevel.setLevelObjects(Game.getInstance().getState().getObjectList()); tLevel.setEvents(((GameState)Game.getInstance().getState()).getEvents()); Serializer.getInstance().SaveLevel(Game.getInstance().getCheckPointLevel(true), tLevel); Serializer.getInstance().saveGame(Game.getInstance().getCheckPointProgress(true), Game.getInstance().getProgress()); m_hasSaved = false; String t_textureName = "Images//GUI//GameGUI//checkpoint"; m_feedback = new Particle(new CartesianCoordinate(Vector2.Zero, Game.getInstance().m_camera.getPosition()), t_textureName, 33, 0.0015f); m_feedback.getPosition().setLocalCartesian(new Vector2(0, -100) - m_feedback.getImg().getSize() / 2); m_feedback.setTimer(((float)Game.getInstance().getTotalGameTime().TotalMilliseconds) + 3000f); Game.getInstance().getState().addObject(m_feedback); /*} else { t_player.setInteractionVisibility(true); }*/ } } }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player)a_collider; if (CollisionManager.Collides(this.getHitBox(), a_collider.getHitBox()) && Game.isKeyPressed(GameState.getActionKey())) { Level tLevel = new Level(); tLevel.setLevelObjects(Game.getInstance().getState().getObjectList()); tLevel.setEvents(((GameState)Game.getInstance().getState()).getEvents()); Serializer.getInstance().SaveLevel("Checkpoint.lvl",tLevel); } } }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player)a_collider; if(CollisionManager.Collides(this.getHitBox(), a_collider.getHitBox())) { if (KeyboardHandler.isKeyPressed(GameState.getActionKey()) && Game.getInstance().getState() is GameState) { Level tLevel = new Level(); tLevel.setLevelObjects(Game.getInstance().getState().getObjectList()); tLevel.setEvents(((GameState)Game.getInstance().getState()).getEvents()); Serializer.getInstance().SaveLevel(Game.getInstance().getCheckPointLevel(true), tLevel); Serializer.getInstance().saveGame(Game.getInstance().getCheckPointProgress(true), Game.getInstance().getProgress()); } else { t_player.setInteractionVisibility(true); } } } }
public Level loadLevel(string a_fileName) { Level t_loadingLevel = new Level(); FileStream t_fstream = null; MemoryStream t_mStream = null; LinkedList<GameObject> t_gameObject = new LinkedList<GameObject>(); LinkedList<GameObject>[] t_gameObjectsList = new LinkedList<GameObject>[5]; LinkedList<Event> t_events = new LinkedList<Event>(); t_gameObjectsList[0] = new LinkedList<GameObject>(); t_gameObjectsList[1] = new LinkedList<GameObject>(); t_gameObjectsList[2] = new LinkedList<GameObject>(); t_gameObjectsList[3] = new LinkedList<GameObject>(); t_gameObjectsList[4] = new LinkedList<GameObject>(); byte[] t_bytes = new byte[4]; int t_layerIndex = 0; try { while (true) { try { t_fstream = File.Open("Content//Levels//" + a_fileName, FileMode.Open); break; } catch (IOException) { continue; } } BinaryFormatter t_bFormatter = new BinaryFormatter(); t_fstream.Read(t_bytes, 0, t_bytes.Length); int t_gameObjectListSize = BitConverter.ToInt32(t_bytes, 0); //load GameObjects while (true) { float t_fstreamPos = t_fstream.Position; t_bytes = new byte[4]; t_fstream.Read(t_bytes, 0, t_bytes.Length); int t_layerSize = BitConverter.ToInt32(t_bytes, 0); while (t_fstream.Position < t_layerSize + t_fstreamPos) { t_bytes = new byte[4]; t_fstream.Read(t_bytes, 0, t_bytes.Length); int t_objectListSize = BitConverter.ToInt32(t_bytes, 0); try { t_mStream = new MemoryStream(); byte[] t_objectListInByte = new byte[t_objectListSize]; t_fstream.Read(t_objectListInByte, 0, t_objectListSize); t_mStream.Write(t_objectListInByte, 0, t_objectListSize); t_mStream.Position = 0; t_gameObject = (LinkedList<GameObject>)t_bFormatter.Deserialize(t_mStream); foreach (GameObject t_gb in t_gameObject) { t_gameObjectsList[t_layerIndex].AddLast(t_gb); } if (t_mStream != null) { t_mStream.Close(); } } catch (SerializationException e) { ErrorLogger.getInstance().writeString("Fail to DeSerialize GameObject while loading: " + e); } catch (OutOfMemoryException e) { ErrorLogger.getInstance().writeString("Fail to DeSerialize GameObject while loading: " + e); } } t_layerIndex++; if (t_fstream.Position >= t_gameObjectListSize) { break; } } t_loadingLevel.setLevelObjects(t_gameObjectsList); try { //load Events t_mStream = new MemoryStream(); t_fstream.Read(t_bytes, 0, t_bytes.Length); int t_eventsSize = BitConverter.ToInt32(t_bytes, 0); byte[] t_eventsInByte = new byte[t_eventsSize]; t_fstream.Read(t_eventsInByte, 0, t_eventsSize); t_mStream.Write(t_eventsInByte, 0, t_eventsSize); t_mStream.Position = 0; t_events = (LinkedList<Event>)t_bFormatter.Deserialize(t_mStream); if (t_mStream != null) { t_mStream.Close(); } } catch (SerializationException e) { ErrorLogger.getInstance().writeString("Fail to DeSerialize Event while loading " + e); } t_loadingLevel.setEvents(t_events); } catch (FileLoadException e) { ErrorLogger.getInstance().writeString("Could not deserialize level: " + e); } if (t_fstream != null) { t_fstream.Close(); } if (t_mStream != null) { t_mStream.Close(); } if(t_loadingLevel == null) { t_loadingLevel = new Level(); } return t_loadingLevel; }
private void updateKeyboard() { if (KeyboardHandler.keyClicked(Keys.Escape)) { guiButtonClick(m_btnSelect); } if (m_layerTextField.isWriting()) { if (KeyboardHandler.keyClicked(Keys.Enter)) { m_selectedObject.setLayer(float.Parse(m_layerTextField.getText()) / 1000); clearSelectedObject(); m_layerTextField.setWrite(false); } return; } if (m_parallaxScrollTF.isWriting()) { if (KeyboardHandler.keyClicked(Keys.Enter) && m_selectedObject != null && m_selectedObject is ParallaxEnvironment) { ((ParallaxEnvironment)m_selectedObject).setParrScroll(Math.Max(- int.Parse(m_parallaxScrollTF.getText()), -100000)); clearSelectedObject(); m_parallaxScrollTF.setWrite(false); } return; } if (KeyboardHandler.keyClicked(Keys.F5)) { m_currentLayer = 0; Game.getInstance().setState(new GameState(m_levelToLoad)); } if (KeyboardHandler.keyClicked(Keys.F6)) { m_currentLayer = 0; Game.getInstance().setState(new EventDevelopment(this, m_events)); } if (KeyboardHandler.ctrlMod()) { if (KeyboardHandler.keyClicked(Keys.S)) { if (m_selectedObject != null) { m_selectedObject.setColor(Color.White); m_selectedObject = null; } Level t_saveLevel = new Level(); t_saveLevel.setLevelObjects(m_gameObjectList); t_saveLevel.setEvents(m_events); Serializer.getInstance().SaveLevel(Serializer.getInstance().getFileToStream(m_levelToLoad, true), t_saveLevel); } if (KeyboardHandler.keyClicked(Keys.O)) { Level t_newLevel = Serializer.getInstance().loadLevel(Serializer.getInstance().getFileToStream(m_levelToLoad, false)); m_gameObjectList = t_newLevel.getGameObjects(); foreach (LinkedList<GameObject> t_arr in m_gameObjectList) { foreach (GameObject f_gb in t_arr) { f_gb.loadContent(); } } } if (KeyboardHandler.keyClicked(Keys.C)) { if (m_selectedObject != null) { m_copyTarget = m_selectedObject; } } if (KeyboardHandler.keyClicked(Keys.V)) { if (m_copyTarget != null) { AssetFactory.copyAsset(m_copyTarget.getPosition().getGlobalCartesian(), m_copyTarget); } } if (KeyboardHandler.keyClicked(Keys.N) && m_selectedObject != null) { if (m_selectedObject is Window) { ((Window)m_selectedObject).toggleOpen(); } else if (m_selectedObject is VentilationDrum) { ((VentilationDrum)m_selectedObject).toggleLocked(); } else if (m_selectedObject is Guard) { ((Guard)m_selectedObject).toggleFlashLightAddicted(); } else if (m_selectedObject is Consumable) { ((Consumable)m_selectedObject).toggleBling(); } else if (m_selectedObject is Environment) { ((Environment)m_selectedObject).toggleMapVisible(); } m_textObjectInfo.setText(m_selectedObject.ToString()); } if (KeyboardHandler.keyClicked(Keys.F)) { if (m_selectedObject != null && m_selectedObject is Guard) { ((Guard)m_selectedObject).toggleFlashLightAddicted(); m_textObjectInfo.setText(m_selectedObject.ToString()); } } } if (KeyboardHandler.keyClicked(Keys.R)) { if (m_selectedObject != null) { m_selectedObject.addRotation((float)(Math.PI) / 2.0f); } } if (KeyboardHandler.keyClicked(Keys.Y)) { if (m_selectedObject != null) { m_selectedObject.flip(); } } if (KeyboardHandler.keyClicked(Keys.M)) { if (m_selectedObject != null) { if (m_selectedObject is LampSwitch) { ((LampSwitch)m_selectedObject).toggleConnectToAll(); showLightSwitchInfo((LampSwitch)m_selectedObject); } } } if (KeyboardHandler.keyClicked(Keys.Space)) { if (m_gameObjectList != null) { Game.getInstance().m_camera.setPosition(Vector2.Zero); } } }
public override void load() { base.load(); Game.getInstance().m_camera.setZoom(1.0f); if (m_loadCheckpoint) { Level t_loadedLevel = Loader.getInstance().loadCheckPoint(); m_gameObjectList = t_loadedLevel.getGameObjects(); m_events = t_loadedLevel.getEvents(); } else if (File.Exists("Content\\levels\\" + m_currentLevel)) { Level t_loadedLevel = Loader.getInstance().loadLevel(m_currentLevel); m_gameObjectList = t_loadedLevel.getGameObjects(); m_events = t_loadedLevel.getEvents(); } else { m_events = new LinkedList<Event>(); m_gameObjectList = new LinkedList<GameObject>[5]; for (int i = 0; i < m_gameObjectList.Length; ++i) { m_gameObjectList[i] = new LinkedList<GameObject>(); } } m_addList = new Stack<GameObject>[m_gameObjectList.Length]; Loader.getInstance().loadGraphicSettings("Content//wtf//settings.ini"); string[] t_loadedFile = System.IO.File.ReadAllLines("Content//wtf//settings.ini"); foreach (string t_currentLine in t_loadedFile) { if (t_currentLine.Length > 2 && t_currentLine.First() == '[' && t_currentLine.Last() == ']') { if (t_currentLine.Equals("[Input]")) { m_currentParse = ParseState.Input; continue; } } if (m_currentParse == ParseState.Input) { string[] t_input = t_currentLine.Split('='); if (t_input[0].Equals("Up")) { m_upKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Down")) { m_downKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Left")) { m_leftKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Right")) { m_rightKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Jump")) { m_jumpKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Roll")) { m_rollKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Action")) { m_actionKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].Equals("Sprint")) { m_sprintKey = (Keys)Enum.Parse(typeof(Keys), t_input[1]); } else if (t_input[0].StartsWith("[")) { break; } else { #if RELEASE ErrorLogger.getInstance().writeString("Found unknown keybinding while loading GameState" + t_input[0]); #endif } } } Game.getInstance().m_graphics.ApplyChanges(); for (int i = 0; i < m_gameObjectList.Length; ++i) { m_addList[i] = new Stack<GameObject>(); } m_unexplored = new LinkedList<Environment>(); m_finishCond = new LinkedList<ConsumableGoal>(); for (int i = 0; i < m_gameObjectList.Count(); ++i) { foreach (GameObject t_go in m_gameObjectList[i]) { t_go.loadContent(); t_go.setListLayer(i); if (t_go is Player) { setPlayer((Player)t_go); } else if (t_go is ConsumableGoal) { m_finishCond.AddLast((ConsumableGoal)t_go); } else if (t_go is Environment && ((Environment)t_go).isVisibleOnMap() && !((Environment)t_go).isExplored()) { m_unexplored.AddLast((Environment)t_go); } } } foreach (Event t_e in m_events) { t_e.loadContent(); } if (player != null) { Game.getInstance().m_camera.setPosition(Vector2.Zero); Game.getInstance().m_camera.setParentPosition(player.getPosition()); } m_background = Game.getInstance().Content.Load<Texture2D>("Images//Background//starry_sky_01"); Music.getInstance().loadSong("ChaseSongLoop"); Music.getInstance().loadSong("StageSong"); Music.getInstance().play("StageSong"); bool t_foundDarkness = false; foreach (GameObject t_gb in m_gameObjectList[1]) { if (t_gb is Darkness) { t_foundDarkness = true; } } if (!t_foundDarkness) { addObject(new Darkness(Vector2.Zero, "Images//LightCone//ventilljus", 0.003f), 1); } m_startTime = Game.getInstance().getGameTime().TotalGameTime; Level t_level = new Level(); t_level.setLevelObjects(Game.getInstance().getState().getObjectList()); t_level.setEvents(((GameState)Game.getInstance().getState()).getEvents()); Serializer.getInstance().SaveLevel(Game.getInstance().getCheckPointLevel(true), t_level); }