Subversion Repositories AndroidProjects

Rev

Rev 1823 | 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.IO;

using BurutaruEditor.file;

using BauzoidNET.parser;
using BauzoidNET.math;
using BurutaruEditor.view;
using BauzoidNET.graphics.sprite;

namespace BurutaruEditor.file.conditions
{
    public class BaseCondition: LevelObject
    {
        public const float CONDITION_SIZE = 32;

        public Vector2 Position { get { return mPosition; } }

        private Vector2 mPosition = new Vector2();

        public BaseCondition(Document doc, string name)
            : base(doc, name)
        {
        }

        public override void WriteData(TextWriter tw)
        {
            LevelUtil.WriteProperty(tw, "position", Position, 1);
            /*
            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);*/

        }

        public override void WriteData(Serializer s)
        {
            s.Write("position"); s.Write(Position);
            /*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))
            {
                mPosition = ParseUtil.readVector2(t);
            }
            else
            {
                return base.ReadParameter(t, id);
            }

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

        public virtual void Render()
        {
            SpriteTransform t = DocumentView.Resources.ScriptingSprite.getSpriteTransform();
            t.x = Position.x + Doc.View.CurrentPosition.x;
            t.y = Position.y + Doc.View.CurrentPosition.y;
            t.w = CONDITION_SIZE;
            t.h = CONDITION_SIZE;
            t.centerPivot();
            DocumentView.Resources.ScriptingSprite.render();

            float w = MainForm.App.getGraphics().getFont().getTextWidth(this.Name, Document.TEXT_SCALE);
            MainForm.App.getGraphics().getFont().drawTextDirect(this.Name, t.x - w / 2, t.y + CONDITION_SIZE / 2, Document.TEXT_COLOR, Document.TEXT_SCALE);
        }

        public override void RenderSelected(int selectedPart, bool forHover)
        {
            float triggerX = Position.x + Doc.View.CurrentPosition.x;
            float triggerY = Position.y + Doc.View.CurrentPosition.y;

            float halfSize = (CONDITION_SIZE / 2 + DocumentView.SELECTION_FRAME_OFFSET);

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

        public override bool IsInside(float x, float y, out int selectedPart)
        {
            selectedPart = -1;
            float px = Position.x + Doc.View.CurrentPosition.x;
            float py = Position.y + Doc.View.CurrentPosition.y;

            if ((Math.Abs(px - x) <= (CONDITION_SIZE / 2)) && (Math.Abs(py - y) < (CONDITION_SIZE / 2)))
            {
                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 static BaseCondition createCondition(Document doc, string condType, string condName)
        {
            if (condType.Equals("EnemyDestroyCondition"))
            {
                return new EnemyDestroyCondition(doc, condName);
            }
           
            return null;
        }
    }
}