Rev 1461 |
Rev 1478 |
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 BurutaruEditor.file.elements;
using BurutaruEditor.file.enemies;
using BurutaruEditor.view;
using BauzoidNET.math;
using BauzoidNET.parser;
namespace BurutaruEditor
.file
{
public class Document
{
//=================================================================================================================================
public const float VIRTUAL_WIDTH
= 800;
public const float VIRTUAL_HEIGHT
= 480;
public static readonly Vector4 TEXT_COLOR
= new Vector4
(1,
1,
1,
1);
public const float TEXT_SCALE
= 0
.8f
;
//=================================================================================================================================
private MainForm mOwner
= null;
[Browsable
(false)]
public MainForm Owner
{ get
{ return mOwner
; } }
[Browsable
(false)]
public DocumentView View
{ get
{ return Owner
.View; } }
private bool mIsDirty
= false;
private String mFilename
= null;
private List
<CheckPoint
> mCheckPoints
= new List
<CheckPoint
>();
[Browsable
(false)]
public List
<CheckPoint
> CheckPoints
{ get
{ return mCheckPoints
; } }
private List
<EnemySpawner
> mSpawners
= new List
<EnemySpawner
>();
[Browsable
(false)]
public List
<EnemySpawner
> Spawners
{ get
{ return mSpawners
; } }
private List
<LevelElement
> mLevelElements
= new List
<LevelElement
>();
[Browsable
(false)]
public List
<LevelElement
> LevelElements
{ get
{ return mLevelElements
; } }
public string LevelTitle
{ get
; set
; }
public Vector2 mStartPosition
= new Vector2
();
[TypeConverter
(typeof(ExpandableObjectConverter
))]
public Vector2 StartPosition
{ get
{ return mStartPosition
; } }
//=================================================================================================================================
public Document
(MainForm owner
)
{
mOwner
= owner
;
ResetDocument
();
}
public void Init
()
{
ResetDocument
();
}
public void Exit
()
{
ResetDocument
();
}
public void ResetDocument
()
{
mFilename
= null;
LevelTitle
= "Level Title";
mIsDirty
= false;
mSpawners
.Clear();
for (int i
= 0; i
< mLevelElements
.Count; i
++)
mLevelElements
.ElementAt(i
).Exit();
mLevelElements
.Clear();
mCheckPoints
.Clear();
}
public bool NewDocument
()
{
ResetDocument
();
return true;
}
public bool LoadDocument
(String filename
)
{
ResetDocument
();
mFilename
= filename
;
// fill mLevelElements from file
if (!LevelUtil
.LoadLevel(mFilename,
this))
return false;
Owner
.GlView.Refresh();
return true;
}
public bool SaveDocument
()
{
// save mLevelElements
return LevelUtil
.SaveLevel(mFilename,
this);
}
public bool SaveDocument
(String filename
)
{
mFilename
= filename
;
return SaveDocument
();
}
public void CreateCheckPoint
(float x,
float y
)
{
float tx
= x
;
float ty
= y
;
tx
-= MainForm
.App.getGraphics().getWidth() / 2;
ty
-= MainForm
.App.getGraphics().getHeight() / 2;
tx
/= View
.ZoomFactor;
ty
/= View
.ZoomFactor;
tx
-= View
.CurrentPosition.x;
ty
-= View
.CurrentPosition.y;
CheckPoint cp
= new CheckPoint
(this,
"NewCheckPoint");
cp
.Position.x = tx
;
cp
.Position.y = ty
;
AddCheckPoint
(cp
);
}
public void AddCheckPoint
(CheckPoint checkPoint
)
{
mCheckPoints
.Add(checkPoint
);
Owner
.CheckPoints.Items.Add(checkPoint
);
Owner
.CheckPoints.SelectedIndex = Owner
.CheckPoints.Items.Count - 1;
}
public void AddEnemySpawner
(EnemySpawner spawner
)
{
mSpawners
.Add(spawner
);
Owner
.Spawners.Items.Add(spawner
);
Owner
.Spawners.SelectedIndex = Owner
.Spawners.Items.Count - 1;
}
public void AddLevelElement
(LevelElement element
)
{
mLevelElements
.Add(element
);
Owner
.LevelElements.Items.Add(element
);
Owner
.LevelElements.SelectedIndex = Owner
.LevelElements.Items.Count - 1;
}
public void MoveObjectTo
<T
>(List
<T
> objList,
System.Windows.Forms.ListBox lb,
int fromIndex,
int toIndex
)
{
if ((fromIndex
< 0) || (fromIndex
>= objList
.Count) ||
(toIndex
< 0) || (toIndex
>= objList
.Count))
return;
T cp
= objList
.ElementAt(fromIndex
);
objList
.RemoveAt(fromIndex
);
objList
.Insert(toIndex, cp
);
lb
.Items.RemoveAt(fromIndex
);
lb
.Items.Insert(toIndex, cp
);
lb
.SelectedIndex = toIndex
;
}
public void MoveObjectUp
()
{
switch (Owner
.CurrentObjectMode)
{
case MainForm
.ObjectMode.CHECKPOINTS:
MoveObjectTo
(mCheckPoints, Owner
.CheckPoints, Owner
.CheckPoints.SelectedIndex, Owner
.CheckPoints.SelectedIndex - 1);
break;
case MainForm
.ObjectMode.SPAWNERS:
MoveObjectTo
(mSpawners, Owner
.Spawners, Owner
.Spawners.SelectedIndex, Owner
.Spawners.SelectedIndex - 1);
break;
case MainForm
.ObjectMode.ELEMENTS:
MoveObjectTo
(mLevelElements, Owner
.LevelElements, Owner
.LevelElements.SelectedIndex, Owner
.LevelElements.SelectedIndex - 1);
break;
}
}
public void MoveObjectDown
()
{
switch (Owner
.CurrentObjectMode)
{
case MainForm
.ObjectMode.CHECKPOINTS:
MoveObjectTo
(mCheckPoints, Owner
.CheckPoints, Owner
.CheckPoints.SelectedIndex, Owner
.CheckPoints.SelectedIndex + 1);
break;
case MainForm
.ObjectMode.SPAWNERS:
MoveObjectTo
(mSpawners, Owner
.Spawners, Owner
.Spawners.SelectedIndex, Owner
.Spawners.SelectedIndex + 1);
break;
case MainForm
.ObjectMode.ELEMENTS:
MoveObjectTo
(mLevelElements, Owner
.LevelElements, Owner
.LevelElements.SelectedIndex, Owner
.LevelElements.SelectedIndex + 1);
break;
}
}
//=================================================================================================================================
public void SetDirty
(bool dirty
)
{
mIsDirty
= dirty
;
}
public bool IsDirty
()
{
return mIsDirty
;
}
public String GetFilename
()
{
return mFilename
;
}
public void SetFilename
(String filename
)
{
mFilename
= filename
;
}
public bool IsFilenameSet
()
{
return (mFilename
!= null);
}
public bool ReadParameter
(Tokenizer t,
string id
)
{
if (id
.Equals("name", StringComparison
.OrdinalIgnoreCase))
{
LevelTitle
= t
.readString();
}
else if (id
.Equals("startPosition", StringComparison
.OrdinalIgnoreCase))
{
mStartPosition
= ParseUtil
.readVector2(t
);
}
else
{
// unsupported id
return false;
}
t
.readToken(";");
return true;
}
}
}