class FieldMap
{
public int MaxX { get { return 44; } }
public int MaxY { get { return 35; } }
private Map[,] _map;
public FieldMap()
{
_map = new Map[44, 35];
}
public Map GetMap(int x, int y)
{
return _map[x, y];
}
public void SetMap(Map map)
{
_map[map.X, map.Y] = map;
}
class Singleton
{
private static FieldMap _map = null;
public static FieldMap GetFieldMap()
{
if (_map == null)
{
_map = new FieldMap();
}
return _map;
}
public City(string name, Point[] points, int population)
{
_name = name;
_population = population;
_maps = new List<Map>();
var r = Singleton.GetRandom();
_color = new asd.Color((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));
var fieldMap = Singleton.GetFieldMap();
foreach (var p in points)
{
Map m = new Map(p.x, p.y, _color);
_maps.Add(m);
fieldMap.SetMap(m);
}
}
たぶん、これだけでOKのはずなので、うまく管理出来ているか、テストコードで確認したいと思います。
マウスカーソルのあるマップの隣にあるマップの色を変化させます。
class City
{
public void OnMouse(asd.Vector2DF pos)
{
var fieldMap = Singleton.GetFieldMap();
foreach (var m in _maps)
{
if(m.IsOnMouse(pos))
{
var info = Singleton.GetInfomationWindow();
info.ShowText(pos, _name + "\r\n" + _population.ToString());
// test
fieldMap.onMouse(m);
}
}
}
class FieldMap
{
// Test
public void onMouse(Map map)
{
for(int x = 0; x < MaxX; x++)
{
for(int y = 0; y < MaxY; y++)
{
if(_map[x,y] != null)
{
_map[x, y].unlinkedMap();
}
}
}
if(map.X > 0)
{
if (_map[map.X + 1, map.Y] != null)
{
_map[map.X + 1, map.Y].linkedMap();
}
}
if (map.X < MaxX)
{
if (_map[map.X - 1, map.Y] != null)
{
_map[map.X - 1, map.Y].linkedMap();
}
}
if (map.Y > 0)
{
if (_map[map.X, map.Y - 1] != null)
{
_map[map.X, map.Y - 1].linkedMap();
}
}
if (map.Y < MaxY)
{
if (_map[map.X, map.Y + 1] != null)
{
_map[map.X, map.Y + 1].linkedMap();
}
}
}
class Map
{
// Test
public void linkedMap()
{
var changeColor = new asd.Color(200, 200, 200);
_geometryObj.Color = changeColor;
}
public void unlinkedMap()
{
_geometryObj.Color = _color;
}