public SectorRenderer(Application application, Level level, Sector sector) { this.application = application; this.level = level; this.sector = sector; Layer layer = new Layer(); foreach (IDrawableLayer IDrawableLayer in sector.GetObjects(typeof(IDrawableLayer))) { Node node = IDrawableLayer.GetSceneGraphNode(); if (IDrawableLayer is Tilemap) //Special handling for tilemaps { node = new TilemapNode((Tilemap)IDrawableLayer, level.Tileset); } ColorNode colorNode = new ColorNode(node, new Color(1f, 1f, 1f, 1f), true); layer.Add(IDrawableLayer.Layer, colorNode); colors[IDrawableLayer] = colorNode; } objectsNode = new NodeWithChilds(); objectsColorNode = new ColorNode(objectsNode, new Color(1f, 1f, 1f, 1f)); layer.Add(1, objectsColorNode); foreach (IObject Object in sector.GetObjects(typeof(IObject))) { Node node = Object.GetSceneGraphNode(); if (node != null) { objectsNode.AddChild(node); } } // fill remaining place with one color sectorFill = new SceneGraph.Rectangle(); sectorFill.Fill = true; ColorNode color = new ColorNode(sectorFill, new Drawing.Color(0.4f, 0.3f, 0.4f)); layer.Add(-10000, color); // draw border around sector... sectorBBox = new SceneGraph.Rectangle(); sectorBBox.Fill = false; color = new ColorNode(sectorBBox, new Drawing.Color(1, 0.3f, 1)); layer.Add(1000, color); // draw border around selected layer... color = new ColorNode(new TilemapBorder(application), new Drawing.Color(1, 1, 0)); layer.Add(1001, color); OnSizeChanged(sector); this.SceneGraphRoot = layer; sector.ObjectAdded += OnObjectAdded; sector.ObjectRemoved += OnObjectRemoved; sector.SizeChanged += OnSizeChanged; application.TilemapChanged += OnTilemapChanged; //TODO: It should be possible to iterate over all (currently present?) types that implements ILayer.. How? FieldOrProperty.AnyFieldChanged += OnFieldChanged; }
private void OnObjectAdded(Sector sector, IGameObject Object) { if (Object is IObject) { IObject iObject = (IObject)Object; Node node = iObject.GetSceneGraphNode(); if (node != null) { objectsNode.AddChild(node); } } Layer layer = (Layer)SceneGraphRoot; if (Object is Tilemap) { Tilemap tilemap = (Tilemap)Object; Node tnode = new TilemapNode(tilemap, level.Tileset); ColorNode colorNode = new ColorNode(tnode, new Color(1f, 1f, 1f, 1f)); layer.Add(tilemap.Layer, colorNode); colors[tilemap] = colorNode; } if (Object is IDrawableLayer) { IDrawableLayer IDrawableLayer = (IDrawableLayer)Object; Node mynode = IDrawableLayer.GetSceneGraphNode(); if (mynode != null) { ColorNode colorNode = new ColorNode(mynode, new Color(1f, 1f, 1f, 1f)); layer.Add(IDrawableLayer.Layer, colorNode); colors[IDrawableLayer] = colorNode; } } }