コード例 #1
0
ファイル: Level.cs プロジェクト: starboxgames/superstarbox
        public bool SaveLevel(string name)
        {
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent       = true;
            settings.IndentChars  = "    ";
            settings.NewLineChars = Environment.NewLine;

            XmlWriter writer = XmlWriter.Create("lvl/" + name + ".xml", settings);

            writer.WriteStartDocument();
            writer.WriteStartElement("Level");

            foreach (Entity ent in entities)
            {
                writer.WriteStartElement("Entity");

                writer.WriteAttributeString("Name", ent.GetType().Name);
                writer.WriteAttributeString("X", ent.OrigPos.X.ToString());
                writer.WriteAttributeString("Y", ent.OrigPos.Y.ToString());
                writer.WriteAttributeString("Flipped", ent.Flipped.ToString());

                if (ent is InfoBox)
                {
                    InfoBox infoBox = (InfoBox)ent;

                    writer.WriteAttributeString("InfoString", infoBox.InfoString);
                }

                writer.WriteEndElement();
            }

            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Dispose();

            return(true);
        }
コード例 #2
0
ファイル: Level.cs プロジェクト: starboxgames/superstarbox
        public bool LoadLevel(string name, bool fromDisk = false)
        {
            Assembly assembly;

            assembly = Assembly.GetExecutingAssembly();

            Stream bgStream = assembly.GetManifestResourceStream("TrainBox.gfx.bg.png");


            backgroundTexture  = new Texture(bgStream);
            background         = new Sprite();
            background.Texture = backgroundTexture;

            entities = null;

            entities = new List <Entity>();

            XmlReader reader      = null;
            Stream    levelStream = null;

            if (fromDisk)
            {
                reader = XmlReader.Create("lvl/" + name + ".xml");
            }
            else
            {
                levelStream = assembly.GetManifestResourceStream("TrainBox.lvl." + name + ".xml");
                reader      = XmlReader.Create(levelStream);
            }

            Type     entType    = null;
            Vector2i entPos     = new Vector2i(0, 0);
            Boolean  entFlipped = false;

            reader.MoveToContent();

            while (reader.Read())
            {
                if (reader.Name == "Entity")
                {
                    string s = reader.GetAttribute("Name");

                    foreach (Type t in entityTypes)
                    {
                        if (s == t.Name)
                        {
                            entType = t;
                            break;
                        }
                    }

                    entPos.X   = Convert.ToInt32(reader.GetAttribute("X"));
                    entPos.Y   = Convert.ToInt32(reader.GetAttribute("Y"));
                    entFlipped = Convert.ToBoolean(reader.GetAttribute("Flipped"));

                    Entity a = (Entity)Activator.CreateInstance(entType, entPos);
                    a.Flipped = entFlipped;

                    if (entType == typeof(InfoBox))
                    {
                        InfoBox infoBox = (InfoBox)a;

                        infoBox.InfoString = reader.GetAttribute("InfoString");
                    }

                    entities.Add(a);
                }
            }

            reader.Dispose();

            FindScrollBounds();

            return(true);
        }
コード例 #3
0
ファイル: Editor.cs プロジェクト: starboxgames/superstarbox
        public void Loop(RenderWindow window)
        {
            counter++;

            CursorPosF = new Vector2f(CursorPos.X * 16, CursorPos.Y * 16 + 8);

            Level.ScrollTo(CursorPosF, false);
            Level.GetEntities().RemoveAll(a => a.Destroyed);

            Type entType = Level.EntityTypes[currentEnt];

            cursorEnt = (Entity)Activator.CreateInstance(entType, CursorPos);

            if (buttonDelay == 0)
            {
                if (Keyboard.IsKeyPressed(Keyboard.Key.F3) || Keyboard.IsKeyPressed(Keyboard.Key.F5) ||
                    Keyboard.IsKeyPressed(Keyboard.Key.F1)
                    )
                {
                    showTextWindow = !showTextWindow;

                    if (Keyboard.IsKeyPressed(Keyboard.Key.F3))
                    {
                        textInputOperation = TextInputOperation.Save;
                    }
                    if (Keyboard.IsKeyPressed(Keyboard.Key.F5))
                    {
                        textInputOperation = TextInputOperation.Load;
                    }
                    if (Keyboard.IsKeyPressed(Keyboard.Key.F1))
                    {
                        textInputOperation = TextInputOperation.InfoBox;
                    }

                    if (textInputOperation == TextInputOperation.Save || textInputOperation == TextInputOperation.Load)
                    {
                        textInputString = LevelName;
                    }

                    bool addEvent = true;

                    if (textInputOperation == TextInputOperation.InfoBox)
                    {
                        Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8));

                        if (ent != null && ent is InfoBox)
                        {
                            InfoBox infoBox = (InfoBox)ent;
                            textInputString = infoBox.InfoString;
                        }
                        else
                        {
                            showTextWindow = false;
                            addEvent       = false;
                        }
                    }

                    if (addEvent)
                    {
                        if (showTextWindow)
                        {
                            window.TextEntered += TextEntered;
                        }
                        else
                        {
                            window.TextEntered -= TextEntered;
                        }
                    }

                    buttonDelay = 20;
                }

                if (showTextWindow)
                {
                    if (Keyboard.IsKeyPressed(Keyboard.Key.Return))
                    {
                        if (textInputOperation == TextInputOperation.Save)
                        {
                            LevelName = textInputString;
                            Level.SaveLevel(LevelName);
                        }
                        if (textInputOperation == TextInputOperation.Load)
                        {
                            LevelName = textInputString;

                            Level.LoadLevel(LevelName, true);

                            CollisionMan.Entities = Level.GetEntities();
                            EntityFinder.Entities = Level.GetEntities();
                        }
                        if (textInputOperation == TextInputOperation.InfoBox)
                        {
                            Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8));

                            if (ent != null && ent is InfoBox)
                            {
                                InfoBox infoBox = (InfoBox)ent;
                                infoBox.InfoString = textInputString;
                            }
                        }

                        showTextWindow      = false;
                        window.TextEntered -= TextEntered;
                    }

                    if (Keyboard.IsKeyPressed(Keyboard.Key.Escape))
                    {
                        showTextWindow      = false;
                        window.TextEntered -= TextEntered;
                    }
                }
            }

            if (buttonDelay == 0 && !showTextWindow)
            {
                if (Keyboard.IsKeyPressed(Keyboard.Key.Z))
                {
                    if (currentEnt > 0)
                    {
                        currentEnt--;
                    }
                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.X))
                {
                    if (currentEnt < Level.EntityTypes.Count - 1)
                    {
                        currentEnt++;
                    }
                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.F12))
                {
                    Level.GetEntities().Clear();

                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.Delete))
                {
                    Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8));

                    if (ent != null)
                    {
                        ent.Destroyed = true;
                    }

                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.F))
                {
                    Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8));

                    if (ent != null)
                    {
                        ent.Flipped = !ent.Flipped;
                    }

                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.Space))
                {
                    Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8));

                    if (ent != null)
                    {
                        ent.Destroyed = true;
                    }

                    Entity newEnt = (Entity)Activator.CreateInstance(entType, CursorPos);
                    Level.GetEntities().Add(newEnt);


                    buttonDelay = 10;
                }

                if (Keyboard.IsKeyPressed(Keyboard.Key.Right))
                {
                    CursorPos   = new Vector2i(CursorPos.X + 1, CursorPos.Y);
                    buttonDelay = 10;
                }
                if (Keyboard.IsKeyPressed(Keyboard.Key.Left))
                {
                    CursorPos   = new Vector2i(CursorPos.X - 1, CursorPos.Y);
                    buttonDelay = 10;
                }
                if (Keyboard.IsKeyPressed(Keyboard.Key.Up))
                {
                    CursorPos   = new Vector2i(CursorPos.X, CursorPos.Y - 1);
                    buttonDelay = 10;
                }
                if (Keyboard.IsKeyPressed(Keyboard.Key.Down))
                {
                    CursorPos   = new Vector2i(CursorPos.X, CursorPos.Y + 1);
                    buttonDelay = 10;
                }
            }
            if (buttonDelay > 0)
            {
                buttonDelay--;
            }
        }