using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.IO;
using BauzoidNET.math;
using BauzoidNET.parser;
using BurutaruEditor.view;
namespace BurutaruEditor
.file
{
public class CheckPoint
: LevelObject
{
public const float INTERACTION_SIZE
= DocumentView
.CHECKPOINT_SIZE;
//=================================================================================================================================
public enum StarFieldControlStatus
{
DISABLED,
NORMAL,
WARP,
}
//=================================================================================================================================
[TypeConverter
(typeof(ExpandableObjectConverter
))]
[Category
("Basic Parameters")]
public Vector2 Position
{ get
; set
; }
[TypeConverter
(typeof(ExpandableObjectConverter
))]
[Category
("Basic Parameters")]
public Vector2 FreeScroll
{ get
; set
; }
[Category
("Basic Parameters")]
public float ScrollSpeed
{ get
; set
; }
[Category
("Conditions")]
public string ContinueCondition
{ get
; set
; }
[Category
("Basic Parameters")]
public StarFieldControlStatus StarFieldStatus
{ get
; set
; }
[Category
("Basic Parameters")]
public float StarFieldStatusSwitchTime
{ get
; set
; }
//=================================================================================================================================
public CheckPoint
(Document doc,
string name
)
: base(doc, name
)
{
Position
= new Vector2
();
FreeScroll
= new Vector2
();
ScrollSpeed
= 10;
ContinueCondition
= "";
StarFieldStatus
= StarFieldControlStatus
.DISABLED;
StarFieldStatusSwitchTime
= 0
.0f
;
}
public override void RenderSelected
(int selectedPart,
bool forHover
= false)
{
float posX
= Position
.x + Document
.VIRTUAL_WIDTH / 2 + Doc
.View.CurrentPosition.x;
float posY
= Position
.y + Document
.VIRTUAL_HEIGHT / 2 + Doc
.View.CurrentPosition.y;
float halfSize
= INTERACTION_SIZE
/ 2 + DocumentView
.SELECTION_FRAME_OFFSET;
if (forHover
)
Doc
.View.RenderSelectionFrame(posX
- halfSize, posY
- halfSize, posX
+ halfSize, posY
+ halfSize, DocumentView
.SELECTION_FRAME_HOVER_ALPHA);
else
Doc
.View.RenderSelectionFrame(posX
- halfSize, posY
- halfSize, posX
+ halfSize, posY
+ halfSize
);
}
public override bool IsInside
(float x,
float y,
out int selectedPart
)
{
selectedPart
= -1;
if ((Math
.Abs(x
- Position
.x) <= INTERACTION_SIZE
) && (Math
.Abs(y
- Position
.y) <= INTERACTION_SIZE
))
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 override string GetPropertiesType
()
{
return "CheckPoint";
}
public override void WriteData
(TextWriter tw
)
{
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);
/*tw.WriteLine("\tposition " + Position.x.ToString("F") + ", " + Position.y.ToString("F") + ";");
tw.WriteLine("\tfreeScroll " + FreeScroll.x + ", " + FreeScroll.y + ";");
tw.WriteLine("\tcontinueCondition \"" + ContinueCondition + "\";");
tw.WriteLine("\tscrollSpeed " + ScrollSpeed + ";");
tw.WriteLine("\tstarFieldStatus " + (int)StarFieldStatus + ";");
tw.WriteLine("\tstarFieldStatusSwitchTime " + StarFieldStatusSwitchTime + ";");*/
}
public override void WriteData
(Serializer s
)
{
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))
{
Position
= ParseUtil
.readVector2(t
);
}
else if (id
.Equals("freeScroll", StringComparison
.OrdinalIgnoreCase))
{
FreeScroll
= ParseUtil
.readVector2(t
);
}
else if (id
.Equals("continueCondition", StringComparison
.OrdinalIgnoreCase))
{
ContinueCondition
= t
.readString();
}
else if (id
.Equals("scrollSpeed", StringComparison
.OrdinalIgnoreCase))
{
ScrollSpeed
= t
.readNumber();
}
else if (id
.Equals("starFieldStatus", StringComparison
.OrdinalIgnoreCase))
{
int status
= (int)t
.readNumber();
StarFieldStatus
= (StarFieldControlStatus
)status
;
}
else if (id
.Equals("starFieldStatusSwitchTime", StringComparison
.OrdinalIgnoreCase))
{
StarFieldStatusSwitchTime
= t
.readNumber();
}
else
{
return base.ReadParameter(t, id
);
}
t
.readToken(";");
return true;
}
}
}