最新ソースはこちら(gitHub)。
https://github.com/takishita2nd/HokkaidoWar
バトルシーンを追加するに当たりまして、
今まではエンジンに直接オブジェクトを配置していましたが、
シーンを使用するとなると、このやり方では上手くいけないっぽい。
なので、メインシーンを追加して、このシーンのレイヤーにオブジェクトを配置する必要があります。
なので、今回はその修正を実行。
class HokkaidoWar
{
public HokkaidoWar()
{
}
public void Run()
{
asd.Engine.Initialize("北海道大戦", 1200, 1000, new asd.EngineOption());
// シーンの登録
var scene = new MainScene();
asd.Engine.ChangeScene(scene);
while (asd.Engine.DoEvents())
{
asd.Engine.Update();
}
asd.Engine.Terminate();
}
}
いままでエンジンに追加していたオブジェクトは全て無くなり、シーンを作成して、そのシーンに移行、という処理に変わります。
class MainScene : asd.Scene
{
中略
protected override void OnRegistered()
{
var layer = Singleton.GetMainSceneLayer();
AddLayer(layer);
// 下地
var background = new asd.GeometryObject2D();
layer.AddObject(background);
var bgRect = new asd.RectangleShape();
bgRect.DrawingArea = new asd.RectF(0, 0, 1800, 1000);
background.Shape = bgRect;
cities = new List<City>();
var r = new Random();
foreach (var map in mapData.list)
{
City city = new City(map.name, map.point, map.population);
cities.Add(city);
}
_battle = new Battle(cities);
aliveCities = _battle.GetAliveCityList();
}
protected override void OnUpdated()
{
asd.Vector2DF pos = asd.Engine.Mouse.Position;
switch (gameStatus)
{
case GameStatus.SelectCity:
cycleProcessSelectCity(pos);
break;
case GameStatus.ActionEnemy:
cycleProcessActionEnemy(pos);
break;
case GameStatus.ActionPlayer:
cycleProcessActionPlayer(pos);
break;
case GameStatus.ShowResult:
break;
case GameStatus.GameEnd:
cycleProcessGameEnd();
break;
case GameStatus.GameOver:
cycleProcessGameOver(pos);
break;
}
if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
{
switch (gameStatus)
{
case GameStatus.SelectCity:
onClickMouseSelectCity(pos);
break;
case GameStatus.ActionEnemy:
break;
case GameStatus.ActionPlayer:
onClickMouseActionPlayer(pos);
break;
case GameStatus.ShowResult:
onClickMouseShowResult();
break;
case GameStatus.GameEnd:
break;
case GameStatus.GameOver:
break;
}
}
}
後略
OnRegistered()はシーン登録時に実行されます。
オブジェクトの配置はここで行います。
レイヤーはシングルトンで取り出すようにしました。(いろんなところでオブジェクトの配置やっているので)
OnUpdated()には、while (asd.Engine.DoEvents()){ }内で実行していた処理を行います。
これは、asd.Engine.Update();実行時に実行されるイメージです。
細かい所は結構修正しているのですが、概要はこんな感じです。
とりあえず、シーンを使用して、今までと同じ動きが出来ることを確認しました。
次はバトルシーンの追加をしていきましょうか。