Subversion Repositories AndroidProjects

Rev

Rev 1588 | 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 System.ComponentModel;
using System.IO;

using BauzoidNET.math;
using BauzoidNET.parser;

using BurutaruEditor.view;

namespace BurutaruEditor.file
{
    public class CheckPoint : LevelObject
    {
        public const float INTERACTION_SIZE = DocumentView.CHECKPOINT_SIZE;

        //=================================================================================================================================
       
        public enum StarFieldControlStatus
        {
            DISABLED,
            NORMAL,
            WARP,
        }

        //=================================================================================================================================
        [TypeConverter(typeof(ExpandableObjectConverter))]
        [Category("Basic Parameters")]
        public Vector2 Position { get; set; }

        [TypeConverter(typeof(ExpandableObjectConverter))]
        [Category("Basic Parameters")]
        public Vector2 FreeScroll { get; set; }

        [Category("Basic Parameters")]
        public float ScrollSpeed { get; set; }

        [Category("Conditions")]
        public string ContinueCondition { get; set; }

        [Category("Basic Parameters")]
        public StarFieldControlStatus StarFieldStatus { get; set; }

        [Category("Basic Parameters")]
        public float StarFieldStatusSwitchTime { get; set; }

        //=================================================================================================================================
        public CheckPoint(Document doc, string name)
            : base(doc, name)
        {
            Position = new Vector2();
            FreeScroll = new Vector2();
            ScrollSpeed = 10;
            ContinueCondition = "";
            StarFieldStatus = StarFieldControlStatus.DISABLED;
            StarFieldStatusSwitchTime = 0.0f;
        }

        public override void RenderSelected(int selectedPart, bool forHover = false)
        {
            float posX = Position.x + Document.VIRTUAL_WIDTH / 2 + Doc.View.CurrentPosition.x;
            float posY = Position.y + Document.VIRTUAL_HEIGHT / 2 + Doc.View.CurrentPosition.y;
            float halfSize = INTERACTION_SIZE / 2 + DocumentView.SELECTION_FRAME_OFFSET;

            if (forHover)
                Doc.View.RenderSelectionFrame(posX - halfSize, posY - halfSize, posX + halfSize, posY + halfSize, DocumentView.SELECTION_FRAME_HOVER_ALPHA);
            else
                Doc.View.RenderSelectionFrame(posX - halfSize, posY - halfSize, posX + halfSize, posY + halfSize);
        }

        public override bool IsInside(float x, float y, out int selectedPart)
        {
            selectedPart = -1;
            if ((Math.Abs(x - Position.x) <= INTERACTION_SIZE) && (Math.Abs(y - Position.y) <= INTERACTION_SIZE))
                return true;
            return false;
        }

        public override void MoveBy(float dx, float dy, int selectedPart)
        {
            Position.x += (dx / Doc.View.ZoomFactor);
            Position.y += (dy / Doc.View.ZoomFactor);
        }

        public override string GetPropertiesType()
        {
            return "CheckPoint";
        }

        public override void WriteData(TextWriter tw)
        {
            LevelUtil.WriteProperty(tw, "position", Position, 1);
            LevelUtil.WriteProperty(tw, "freeScroll", FreeScroll, 1);
            LevelUtil.WriteProperty(tw, "continueCondition", ContinueCondition, 1);
            LevelUtil.WriteProperty(tw, "scrollSpeed", ScrollSpeed, 1);
            LevelUtil.WriteProperty(tw, "starFieldStatus", (int)StarFieldStatus, 1);
            LevelUtil.WriteProperty(tw, "starFieldStatusSwitchTime", StarFieldStatusSwitchTime, 1);

            /*tw.WriteLine("\tposition " + Position.x.ToString("F") + ", " + Position.y.ToString("F") + ";");
            tw.WriteLine("\tfreeScroll " + FreeScroll.x + ", " + FreeScroll.y + ";");
            tw.WriteLine("\tcontinueCondition \"" + ContinueCondition + "\";");
            tw.WriteLine("\tscrollSpeed " + ScrollSpeed + ";");
            tw.WriteLine("\tstarFieldStatus " + (int)StarFieldStatus + ";");
            tw.WriteLine("\tstarFieldStatusSwitchTime " + StarFieldStatusSwitchTime + ";");*/

        }

        public override void WriteData(Serializer s)
        {
            s.Write("position"); s.Write(Position);
            s.Write("freeScroll"); s.Write(FreeScroll);
            s.Write("continueCondition"); s.Write(ContinueCondition);
            s.Write("scrollSpeed"); s.Write(ScrollSpeed);
            s.Write("starFieldStatus"); s.Write((int)StarFieldStatus);
            s.Write("starFieldStatusSwitchTime"); s.Write(StarFieldStatusSwitchTime);            
        }

        public override bool ReadParameter(Tokenizer t, string id)
        {
            if (id.Equals("position", StringComparison.OrdinalIgnoreCase))
            {
                Position = ParseUtil.readVector2(t);
            }
            else if (id.Equals("freeScroll", StringComparison.OrdinalIgnoreCase))
            {
                FreeScroll = ParseUtil.readVector2(t);
            }
            else if (id.Equals("continueCondition", StringComparison.OrdinalIgnoreCase))
            {
                ContinueCondition = t.readString();
            }
            else if (id.Equals("scrollSpeed", StringComparison.OrdinalIgnoreCase))
            {
                ScrollSpeed = t.readNumber();
            }
            else if (id.Equals("starFieldStatus", StringComparison.OrdinalIgnoreCase))
            {
                int status = (int)t.readNumber();
                StarFieldStatus = (StarFieldControlStatus)status;
            }
            else if (id.Equals("starFieldStatusSwitchTime", StringComparison.OrdinalIgnoreCase))
            {
                StarFieldStatusSwitchTime = t.readNumber();
            }
            else
            {
                return base.ReadParameter(t, id);
            }

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


    }
}