Rev 1499 |
Rev 1551 |
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 System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Drawing;
using System.Drawing.Design;
using BauzoidNET.graphics.sprite;
using BauzoidNET.parser;
using BauzoidNET.math;
using BurutaruEditor.view;
namespace BurutaruEditor
.file.elements
{
public class BackgroundElement
: LevelElement
{
private string mTextureFile
= null;
[System.ComponentModel.Editor(typeof(Document
.SpriteFileNameEditor),
typeof(System.Drawing.Design.UITypeEditor))]
[Category
("Basic Parameters")]
public string TextureFile
{
get
{
return mTextureFile
;
}
set
{
LoadSprite
(value
);
}
}
private SpriteTransform mTransform
= new SpriteTransform
();
private Vector2 mScrollFactor
= new Vector2
(1,
1);
private SimpleSprite mSprite
= null;
[Browsable
(false)]
public SimpleSprite Sprite
{ get
{ return mSprite
; } }
[TypeConverter
(typeof(ExpandableObjectConverter
))]
[Category
("Basic Parameters")]
public SpriteTransform Transform
{
get
{ return mTransform
; }
}
[TypeConverter
(typeof(ExpandableObjectConverter
))]
[Category
("Basic Parameters")]
public Vector2 ScrollFactor
{
get
{ return mScrollFactor
; }
}
private Vector4 mMultiplyColor
= new Vector4
(1,
1,
1,
1);
private Vector4 mLerpColor
= new Vector4
(0,
0,
0,
0);
[Category
("Basic Parameters")]
[Editor
(typeof(ColorEditor
),
typeof(UITypeEditor
))] // specify editor for the property
public Color MultiplyColor
{
get
{
return Color
.FromArgb(255,
(int)(mMultiplyColor
.x * 255),
(int)(mMultiplyColor
.y * 255),
(int)(mMultiplyColor
.z * 255));
}
set
{
mMultiplyColor
.set((float)value
.R / 255
.0f,
(float)value
.G / 255
.0f,
(float)value
.B / 255
.0f, 1
.0f
);
}
}
private float mMultiplyFactor
= 1
.0f
;
[Category
("Basic Parameters")]
public float MultiplyFactor
{
get
{ return mMultiplyFactor
; }
set
{ mMultiplyFactor
= MathUtil
.clamp(value,
0,
1); }
}
[Category
("Basic Parameters")]
[Editor
(typeof(ColorEditor
),
typeof(UITypeEditor
))] // specify editor for the property
public Color LerpColor
{
get
{
return Color
.FromArgb(255,
(int)(mLerpColor
.x * 255),
(int)(mLerpColor
.y * 255),
(int)(mLerpColor
.z * 255));
}
set
{
mLerpColor
.set((float)value
.R / 255
.0f,
(float)value
.G / 255
.0f,
(float)value
.B / 255
.0f, 1
.0f
);
}
}
private float mLerpFactor
= 0
.0f
;
[Category
("Basic Parameters")]
public float LerpFactor
{
get
{ return mLerpFactor
; }
set
{ mLerpFactor
= MathUtil
.clamp(value,
0,
1); }
}
//=================================================================================================================================
public BackgroundElement
(Document doc,
string name
)
: base(doc, name
)
{
}
public override void Init
()
{
string s
= Path
.Combine(Application
.StartupPath,
@"..\\..\\..\\..\\..\\BauzoidApps\\BurutaruZ_v2\\burutaru-android\\assets");
string fullPath
= Path
.GetFullPath(s
) + "\\" + mTextureFile
;
mSprite
= new SimpleSprite
(MainForm
.App.getGraphics(), fullPath
);
mSprite
.init();
}
public override void Exit
()
{
if (mSprite
!= null)
{
mSprite
.dispose();
mSprite
= null;
}
}
public void LoadSprite
(string filename
)
{
Exit
();
string path
= Path
.GetFullPath(Path
.Combine(Application
.StartupPath,
@"..\\..\\..\\..\\..\\BauzoidApps\\BurutaruZ_v2\\burutaru-android\\assets\\"));
System.Uri uri1
= new Uri
(path, UriKind
.Absolute);
System.Uri uri2
= new Uri
(filename, UriKind
.Absolute);
mTextureFile
= uri1
.MakeRelativeUri(uri2
).ToString();
Init
();
}
public override void Render
()
{
mSprite
.getSpriteTransform().set(mTransform
);
mSprite
.getSpriteTransform().x += Doc
.View.CurrentPosition.x * mScrollFactor
.x;
mSprite
.getSpriteTransform().y += Doc
.View.CurrentPosition.y * mScrollFactor
.y;
mSprite
.getSpriteInstance().color.setFrom(mMultiplyColor
);
mSprite
.getSpriteInstance().color.w = mMultiplyFactor
;
mSprite
.getSpriteInstance().fogColor.setFrom(mLerpColor
);
mSprite
.getSpriteInstance().fogColor.w = mLerpFactor
;
mSprite
.render();
}
public override void RenderSelected
(int selectedPart,
bool forHover
= false)
{
/*if (selectedPart == PART_SPAWN_TRIGGER)
base.RenderSelected(selectedPart);
float posX = SpawnTrigger.x + SpawnPosition.x + Doc.View.CurrentPosition.x;
float posY = SpawnTrigger.y + SpawnPosition.y + Doc.View.CurrentPosition.y;
float halfSize = BLOB_ENEMY_SIZE / 2 + DocumentView.SELECTION_FRAME_OFFSET;
Doc.View.RenderSelectionFrame(posX - halfSize, posY - halsSize, posX + halfSize, posY + halfSize);*/
mSprite
.getSpriteTransform().set(mTransform
);
mSprite
.getSpriteTransform().x += Doc
.View.CurrentPosition.x * mScrollFactor
.x;
mSprite
.getSpriteTransform().y += Doc
.View.CurrentPosition.y * mScrollFactor
.y;
SpriteTransform t
= mSprite
.getSpriteTransform();
Vector2 min
= t
.getAABoxMin();
Vector2 max
= t
.getAABoxMax();
/*float posX = SpawnTrigger.x + SpawnPosition.x + Doc.View.CurrentPosition.x;
float posY = SpawnTrigger.y + SpawnPosition.y + Doc.View.CurrentPosition.y;
float halfSize = BLOB_ENEMY_SIZE / 2 + DocumentView.SELECTION_FRAME_OFFSET;*/
if (forHover
)
Doc
.View.RenderSelectionFrame(min
.x, min
.y, max
.x, max
.y, DocumentView
.SELECTION_FRAME_HOVER_ALPHA);
else
Doc
.View.RenderSelectionFrame(min
.x, min
.y, max
.x, max
.y);
}
public override bool IsInside
(float x,
float y,
out int selectedPart
)
{
selectedPart
= -1;
mSprite
.getSpriteTransform().set(mTransform
);
mSprite
.getSpriteTransform().x += Doc
.View.CurrentPosition.x * mScrollFactor
.x;
mSprite
.getSpriteTransform().y += Doc
.View.CurrentPosition.y * mScrollFactor
.y;
SpriteTransform t
= mSprite
.getSpriteTransform();
if (t
.isInside(x, y
))
return true;
/*Vector2 min = t.getAABoxMin();
Vector2 max = t.getAABoxMax();
if ((x >= min.x) && (y >= min.y) && (x <= max.x) && (y <= max.y))
return true;*/
return false;
}
public override void MoveBy
(float dx,
float dy,
int selectedPart
)
{
mTransform
.x += (dx
/ Doc
.View.ZoomFactor);
mTransform
.y += (dy
/ Doc
.View.ZoomFactor);
}
public override string GetPropertiesType
()
{
return "BackgroundElement";
}
public override void WriteData
(TextWriter tw
)
{
base.WriteData(tw
);
writeSpriteTransform
(tw, mTransform
);
tw
.WriteLine("\ttexture \"" + mTextureFile
+ "\";");
tw
.WriteLine("\tscrollFactor " + mScrollFactor
.x + ", " + mScrollFactor
.y + ";");
tw
.WriteLine("\tmultiplyColor " + mMultiplyColor
.x + ", " + mMultiplyColor
.y + ", " + mMultiplyColor
.z + ", " + mMultiplyFactor
+ ";");
tw
.WriteLine("\tlerpColor " + mLerpColor
.x + ", " + mLerpColor
.y + ", " + mLerpColor
.z + ", " + mLerpFactor
+ ";");
}
public override bool ReadParameter
(Tokenizer t,
string id
)
{
// texture
if (id
.Equals("texture", StringComparison
.OrdinalIgnoreCase))
{
mTextureFile
= t
.readString();
}
// scroll speed
else if (id
.Equals("scrollFactor", StringComparison
.OrdinalIgnoreCase))
{
mScrollFactor
= ParseUtil
.readVector2(t
);
}
else if (id
.Equals("multiplyColor", StringComparison
.OrdinalIgnoreCase))
{
mMultiplyColor
= ParseUtil
.readVector4(t
);
mMultiplyFactor
= mMultiplyColor
.w;
mMultiplyColor
.w = 1
.0f
;
}
else if (id
.Equals("lerpColor", StringComparison
.OrdinalIgnoreCase))
{
mLerpColor
= ParseUtil
.readVector4(t
);
mLerpFactor
= mLerpColor
.w;
mLerpColor
.w = 1
.0f
;
}
// read other parameter types
else if (!parseSpriteTransform
(t, id, mTransform
))
{
// no other parameter type, so check super-class
return base.ReadParameter(t, id
);
}
t
.readToken(";");
return true;
}
}
}