Subversion Repositories AndroidProjects

Rev

Rev 1436 | Rev 1443 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using BurutaruEditor.file.elements;
using BurutaruEditor.file.enemies;
using BurutaruEditor.view;

using BauzoidNET.math;
using BauzoidNET.parser;

namespace BurutaruEditor.file
{
    public class Document
    {
        //=================================================================================================================================

        public const float VIRTUAL_WIDTH = 800;
        public const float VIRTUAL_HEIGHT = 480;

        //=================================================================================================================================

        private MainForm mOwner = null;
        public MainForm Owner { get { return mOwner; } }

        public DocumentView View { get { return Owner.View; } }

        private bool mIsDirty = false;
        private String mFilename = null;

        private List<CheckPoint> mCheckPoints = new List<CheckPoint>();
        public List<CheckPoint> CheckPoints { get { return mCheckPoints; } }

        private List<EnemySpawner> mSpawners = new List<EnemySpawner>();
        public List<EnemySpawner> Spawners { get { return mSpawners; } }
       
        private List<LevelElement> mLevelElements = new List<LevelElement>();
        public List<LevelElement> LevelElements { get { return mLevelElements; } }

        public string LevelTitle { get; set; }
        public Vector2 StartPosition { get; set; }

        //=================================================================================================================================

        public Document(MainForm owner)
        {
            mOwner = owner;
            ResetDocument();
        }

        public void Init()
        {
            ResetDocument();
        }

        public void Exit()
        {
            ResetDocument();
        }

        public void ResetDocument()
        {
            mFilename = null;

            LevelTitle = "Level Title";

            mIsDirty = false;

            mSpawners.Clear();

            for (int i = 0; i < mLevelElements.Count; i++)
                mLevelElements.ElementAt(i).Exit();
            mLevelElements.Clear();

            mCheckPoints.Clear();
        }

        public bool NewDocument()
        {
            ResetDocument();

            return true;
        }

        public bool LoadDocument(String filename)
        {
            ResetDocument();

            mFilename = filename;

            // fill mLevelElements from file
            if (!LevelUtil.LoadLevel(mFilename, this))
                return false;

            Owner.GlView.Refresh();

            return true;
        }

        public bool SaveDocument()
        {
            // save mLevelElements
            return LevelUtil.SaveLevel(mFilename, this);
        }

        public bool SaveDocument(String filename)
        {
            mFilename = filename;
            return SaveDocument();
        }

        public void AddCheckPoint(CheckPoint checkPoint)
        {
            mCheckPoints.Add(checkPoint);
            Owner.CheckPoints.Items.Add(checkPoint);
            Owner.CheckPoints.SelectedIndex = Owner.CheckPoints.Items.Count - 1;
        }

        public void AddEnemySpawner(EnemySpawner spawner)
        {
            mSpawners.Add(spawner);
            Owner.Spawners.Items.Add(spawner);
            Owner.Spawners.SelectedIndex = Owner.Spawners.Items.Count - 1;
        }

        public void AddLevelElement(LevelElement element)
        {
            mLevelElements.Add(element);
            Owner.LevelElements.Items.Add(element);
            Owner.LevelElements.SelectedIndex = Owner.LevelElements.Items.Count - 1;
        }

        //=================================================================================================================================


        public void SetDirty(bool dirty)
        {
            mIsDirty = dirty;
        }

        public bool IsDirty()
        {
            return mIsDirty;
        }

        public String GetFilename()
        {
            return mFilename;
        }

        public void SetFilename(String filename)
        {
            mFilename = filename;
        }

        public bool IsFilenameSet()
        {
            return (mFilename != null);
        }



        public bool ReadParameter(Tokenizer t, string id)
        {
            if (id.Equals("name", StringComparison.OrdinalIgnoreCase))
            {
                LevelTitle = t.readString();
            }
            else if (id.Equals("startPosition", StringComparison.OrdinalIgnoreCase))
            {
                StartPosition = ParseUtil.readVector2(t);
            }
            else
            {
                // unsupported id
                return false;
            }

            t.readToken(";");
            return true;
        }
    }
}