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;
}
}
}