public ITileMapPlaceable CreateEntity(TileMapObject tileMapObj) { if (tileMapObj is null) { throw new ArgumentNullException(nameof(tileMapObj)); } bool success = tileMapObj.CustomProperties.TryGetValue("ClassName", out string className); if (!success) { throw new TileMapObjectCreationException(tileMapObj, CLASS_NAME_PROP_MISSING_ERR_MSG); } ITileMapPlaceable entity = null; try { entity = (ITileMapPlaceable)Activator.CreateInstance(Type.GetType(className)); Vector2 position = new Vector2(tileMapObj.X, tileMapObj.Y); entity.Initialize(_gameServices, _content, tileMapObj.CustomProperties, position); } catch (Exception ex) { throw new TileMapObjectCreationException(tileMapObj, "An error occurred while instantiating the object.", ex); } return(entity); }
protected virtual void ProcessTileMap() { if (TileMap == null) { return; } int renderLayer = (int)RenderLayer.One; foreach (var tileLayer in TileMap.Layers.OfType <TileMapTileLayer>()) { TileMapLayerRenderer renderer = new TileMapLayerRenderer(tileLayer); renderer.RenderLayer = (RenderLayer)renderLayer; EntityManager.AddEntity(renderer); renderLayer++; } foreach (var tileMapObjLayer in TileMap.Layers.OfType <TileMapObjectLayer>()) { foreach (var tileMapObj in tileMapObjLayer.Objects .Where(o => o.ObjectType == TileMapObjectType.Point && o.Type == OBJECT_TYPE_GAME_ENTITY)) { ITileMapPlaceable placeableObj = _tileMapEntitiyFactory.CreateEntity(tileMapObj); EntityManager.AddEntity(placeableObj); } foreach (var tileMapObj in tileMapObjLayer.Objects .Where(o => (o.ObjectType == TileMapObjectType.Polygon || o.ObjectType == TileMapObjectType.Rectangle) && o.Type == OBJECT_TYPE_COLLIDER)) { TileMapCollisionObject collisionObject = new TileMapCollisionObject(tileMapObj, _debugTexture); Collider collider = null; if (tileMapObj.ObjectType == TileMapObjectType.Polygon) { collider = _gameServices.GetService <IPhysicsManager>()?.CreatePolygonCollider(collisionObject, ((TileMapPolygonObject)tileMapObj).Vertices, 0); } else { collider = _gameServices.GetService <IPhysicsManager>()?.CreateRectCollider(collisionObject, ((TileMapRectangleObject)tileMapObj).Size, false); } collisionObject.Collider = collider; this.EntityManager.AddEntity(collisionObject); } } }