Subversion Repositories AndroidProjects

Rev

Rev 1483 | 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.Windows.Forms;
using System.IO;

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

using BauzoidNET.graphics.sprite;

namespace BurutaruEditor.interaction
{
    public class CreateObject : Interaction
    {
        private bool mIsMouseInside = false;

        private string mFileName = null;

        private Sprite mPreviewSprite = null;
        private SpriteInstance mPreviewSpriteInstance = null;

        private float mLastX = 0;
        private float mLastY = 0;
       
        public CreateObject(MainForm owner)
            : base(owner)
        {

        }

        public bool Load(string filename)
        {
            Destroy();

            string atlasFile = Path.ChangeExtension(filename, "txt");

            if (!File.Exists(atlasFile))
                atlasFile = null;

            mPreviewSprite = new Sprite(MainForm.App.getGraphics(), filename, atlasFile);
            mPreviewSprite.init();

            mPreviewSpriteInstance = mPreviewSprite.createSpriteInstanceForAll();

            mFileName = filename;

            return true;
        }

        public void Destroy()
        {
            if (mPreviewSprite != null)
            {
                mPreviewSprite.dispose();
                mPreviewSprite = null;
            }
            mPreviewSpriteInstance = null;
        }

        public override void MouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (Owner.CurrentObjectMode == MainForm.ObjectMode.CHECKPOINTS)
                {
                    // create Checkpoint
                    Owner.Doc.CreateCheckPoint(e.X, e.Y);
                }
                else if (Owner.CurrentObjectMode == MainForm.ObjectMode.SPAWNERS)
                {
                    Owner.Doc.CreateEnemySpawner(e.X, e.Y);
                }
                else if (Owner.CurrentObjectMode == MainForm.ObjectMode.ELEMENTS)
                {
                    if (mFileName != null)
                        Owner.Doc.CreateLevelElement(e.X, e.Y, mFileName);
                }
                else if (Owner.CurrentObjectMode == MainForm.ObjectMode.SCRIPTING)
                {
                    Owner.Doc.CreateScripting(e.X, e.Y);
                }
            }

            mLastX = e.X;
            mLastY = e.Y;
        }

        public override void MouseMove(MouseEventArgs e)
        {
            Owner.GlView.Cursor = Cursors.Cross;
           
            mLastX = e.X;
            mLastY = e.Y;
        }

        public override void MouseUp(MouseEventArgs e)
        {
        }

        public override void MouseEnter(EventArgs e)
        {
            mIsMouseInside = true;
        }

        public override void MouseLeave(EventArgs e)
        {
            mIsMouseInside = false;
            Owner.GlView.Refresh();
        }

        public override void Render()
        {
            if ((mIsMouseInside) && (mPreviewSpriteInstance != null))
            {
                float tx, ty;
                Owner.View.TransformToWorldSpace(out tx, out ty, mLastX, mLastY);

                mPreviewSpriteInstance.transform.x = tx;
                mPreviewSpriteInstance.transform.y = ty;

                mPreviewSpriteInstance.transform.w = mPreviewSpriteInstance.getSpriteRegion().getWidth() * mPreviewSpriteInstance.getSprite().getTextureWidth();
                mPreviewSpriteInstance.transform.h = mPreviewSpriteInstance.getSpriteRegion().getHeight() * mPreviewSpriteInstance.getSprite().getTextureHeight();

                mPreviewSpriteInstance.centerPivot();

                mPreviewSpriteInstance.render();
            }
        }

    }
}