Subversion Repositories AndroidProjects

Rev

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

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

namespace BurutaruEditor.file.elements
{
    public abstract class LevelElement : LevelObject
    {
            public const int BACKGROUND_LAYER1 = 0;
            public const int BACKGROUND_LAYER2 = 1;
            public const int MAIN_LAYER = 2;
            public const int FOREGROUND_LAYER = 3;
            public const int NUM_LAYERS = 4;
        public const int DEFAULT_LAYER = MAIN_LAYER;

        [Category("Basic Parameters")]
        public int Layer { get; set; }

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

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

        public abstract void Init();
        public abstract void Exit();
        public abstract void Render();

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

        public override void WriteData(TextWriter tw)
        {
            tw.WriteLine("\tlayer " + Layer + ";");
        }

        public override bool ReadParameter(Tokenizer t, string id)
        {
            if (id.Equals("layer", StringComparison.OrdinalIgnoreCase))
            {
                Layer = MathUtil.clamp((int)t.readNumber(), 0, NUM_LAYERS - 1);
            }
            else
            {
                return false;
            }

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

        public static LevelElement CreateElement(Document doc, string elementType, string elementName)
        {
            if (elementType.Equals("BackgroundElement"))
                return new BackgroundElement(doc, elementName);
            else if (elementType.Equals("StaticElement"))
                return new StaticElement(doc, elementName);

            return null;
        }

        public void writeSpriteTransform(TextWriter tw, SpriteTransform transform)
        {
            tw.WriteLine("\tposition " + transform.x + ", " + transform.y + ";");
            tw.WriteLine("\tsize " + transform.w + ", " + transform.h + ";");
            tw.WriteLine("\tangle " + transform.angle + ";");
            tw.WriteLine("\tpivot " + transform.pivotX + ", " + transform.pivotY + ";");
            tw.WriteLine("\tmirror " + (transform.mirrorX ? "true" : "false") + ", " + (transform.mirrorY ? "true" : "false") + ";");
        }
               
        /** Parse sprite transform parameters (position, size, etc.), returns true if id is a sprite transform parameter. */
        public static bool parseSpriteTransform(Tokenizer t, String id, SpriteTransform transform)
            {
                    if (id.Equals("position", StringComparison.OrdinalIgnoreCase))
                    {
                            Vector2 position = ParseUtil.readVector2(t);
                            transform.x = position.x;
                            transform.y = position.y;
                    }
                    // scale
                    else if (id.Equals("size", StringComparison.OrdinalIgnoreCase))
                    {
                            Vector2 size = ParseUtil.readVector2(t);
                            transform.w = size.x;
                            transform.h = size.y;
                    }
                    // angle
                    else if (id.Equals("angle", StringComparison.OrdinalIgnoreCase))
                    {
                            transform.angle = t.readNumber();
                    }
                    // pivot
                    else if (id.Equals("pivot", StringComparison.OrdinalIgnoreCase))
                    {
                            Vector2 pivot = ParseUtil.readVector2(t);
                            transform.pivotX = pivot.x;
                            transform.pivotY = pivot.y;
                    }
            // pivot
            else if (id.Equals("mirror", StringComparison.OrdinalIgnoreCase))
            {
                bool mirrorX = t.readIdentifier().Equals("true", StringComparison.OrdinalIgnoreCase);
                t.readToken(",");
                bool mirrorY = t.readIdentifier().Equals("true", StringComparison.OrdinalIgnoreCase);
                transform.mirrorX = mirrorX;
                transform.mirrorY = mirrorY;
            }
                    else
                    {
                            // unknown id
                            return false;
                    }
       
                    return true;
            }
    }
}