Пример #1
0
        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);
                    }*/
                }
            }
        }
Пример #2
0
 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);
         }
     }
 }
Пример #3
0
        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);
                    }
                }
            }
        }
Пример #4
0
        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;
        }
Пример #5
0
        public void SaveLevel(string a_fileName, Level a_save)
        {
            foreach (LinkedList<GameObject> t_goSaveList in a_save.getGameObjects())
            {
                foreach (GameObject t_go in t_goSaveList)
                {
                    t_go.saveObject();
                }
            }

            foreach (LinkedList<GameObject> t_goSaveList in a_save.getGameObjects())
            {
                foreach (GameObject t_go in t_goSaveList)
                {
                    t_go.linkObject();
                }
            }

            foreach (Event t_e in a_save.getEvents())
            {
                t_e.linkObject();
            }
            MemoryStream t_stream = null;
            FileStream t_fstream = null;

            t_fstream = File.Open("Content//Levels//" + a_fileName, FileMode.Create);
            BinaryFormatter t_bFormatter = new BinaryFormatter();

            LinkedList<string> t_unikName = new LinkedList<string>();
            LinkedList<LinkedList<GameObject>> t_objekts = new LinkedList<LinkedList<GameObject>>();

            int index = 0;

            long t_fstreamDiffSize = 0;
            GameObject.resetGameObjectId();
            long t_objectListBegin = t_fstream.Position;
            t_fstream.Position = t_fstream.Position + 4;
            long t_fstreamLastPos = t_fstream.Position;
            long t_objectListSize = t_fstream.Position;

            foreach (LinkedList<GameObject> t_goList in a_save.getGameObjects())
            {
                t_fstream.Position = t_fstream.Position + 4;
                foreach(GameObject t_go in t_goList)
                {
                    if (!t_unikName.Contains(t_go.GetType().Name))
                    {
                        t_unikName.AddLast(t_go.GetType().Name);
                        t_objekts.AddLast(new LinkedList<GameObject>());
                    }
                    for (int i = 0; i < t_unikName.Count; ++i)
                    {
                        if (t_unikName.ElementAt<string>(i).Equals(t_go.GetType().Name))
                        {
                            t_objekts.ElementAt<LinkedList<GameObject>>(i).AddLast(t_go);
                        }
                    }
                }

                foreach (LinkedList<GameObject> t_serializeList in t_objekts)
                {
                    try
                    {
                        t_stream = new MemoryStream();
                        t_bFormatter.Serialize(t_stream, t_serializeList);
                        byte[] t_msPos = new byte[4];
                        t_msPos = BitConverter.GetBytes((int)t_stream.Position);
                        t_fstream.Write(t_msPos, 0, t_msPos.Length);
                        t_fstream.Write(t_stream.GetBuffer(), 0, (int)t_stream.Position);

                    }
                    catch (FileNotFoundException)
                    {
                        ErrorLogger.getInstance().writeString("Fail to save serialize, FileNotFound: " + t_serializeList.ElementAt<GameObject>(0));
                    }
                    catch (SerializationException)
                    {
                        ErrorLogger.getInstance().writeString("Fail to serialize while saving: " + t_serializeList.ElementAt<GameObject>(0));
                    }
                    if (t_stream != null)
                    {
                        t_stream.Close();
                    }
                }

                byte[] t_layerSize = new byte[4];
                t_fstreamDiffSize = t_fstream.Position - t_fstreamLastPos;
                t_layerSize = BitConverter.GetBytes((int)t_fstreamDiffSize);
                t_fstream.Position = t_fstream.Position - t_fstreamDiffSize;
                t_fstream.Write(t_layerSize, 0, t_layerSize.Length);

                t_objectListSize += t_fstreamDiffSize;

                t_fstreamLastPos = t_fstream.Length;
                t_fstream.Position = t_fstream.Length;
                t_unikName = new LinkedList<string>();
                index++;
                t_objekts = new LinkedList<LinkedList<GameObject>>();
            }

            t_fstream.Position = t_objectListBegin;
            byte[] t_objectListSizeInByte = new byte[4];
            t_objectListSizeInByte = BitConverter.GetBytes((int)t_objectListSize);
            t_fstream.Write(t_objectListSizeInByte, 0 , t_objectListSizeInByte.Length);
            t_fstream.Position = t_fstream.Length;

            if (t_stream != null)
            {
                t_stream.Close();
            }
            // Serialize GameObject done!

            try
            {
                //Save Events
                LinkedList<Event> t_events = a_save.getEvents();
                t_stream = new MemoryStream();
                t_bFormatter.Serialize(t_stream, t_events);
                byte[] t_msPos = new byte[4];
                t_msPos = BitConverter.GetBytes((int)t_stream.Position);
                t_fstream.Write(t_msPos, 0, t_msPos.Length);
                t_fstream.Write(t_stream.GetBuffer(), 0, (int)t_stream.Position);
            }
            catch (SerializationException)
            {
                ErrorLogger.getInstance().writeString("While saving, failed to serialized event");
            }

            if (t_stream != null)
            {
                t_stream.Close();
            }
            //Serialize events done

            if (t_fstream != null)
            {
                t_fstream.Close();
            }
        }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
        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);
        }