private static GameObject CreateGameObject(MapObject mapObject, Team[] teams, ContentManager contentManager) { var gameObject = contentManager.InstantiateObject(mapObject.TypeName); // TODO: Is there any valid case where we'd want to return null instead of throwing an exception? if (gameObject == null) { return(null); } // TODO: If the object doesn't have a health value, how do we initialise it? if (gameObject.Definition.Body is ActiveBodyModuleData body) { var healthMultiplier = mapObject.Properties.TryGetValue("objectInitialHealth", out var health) ? (uint)health.Value / 100.0f : 1.0f; // TODO: Should we use InitialHealth or MaximumHealth here? var initialHealth = body.InitialHealth * healthMultiplier; gameObject.Health = (decimal)initialHealth; } if (mapObject.Properties.TryGetValue("originalOwner", out var teamName)) { var team = teams.FirstOrDefault(t => t.Name == (string)teamName.Value); gameObject.Owner = team; } if (mapObject.Properties.TryGetValue("objectSelectable", out var selectable)) { gameObject.IsSelectable = (bool)selectable.Value; } return(gameObject); }
private void CreateTowers( ContentManager contentManager, GameObjectCollection gameObjects, GameObject gameObject, MapObject mapObject) { var towers = new List <GameObject>(); void CreateTower(string objectName, float x, float y) { var tower = AddDisposable(contentManager.InstantiateObject(objectName)); var offset = new Vector3(x, y, 0); var transformedOffset = Vector3.Transform(offset, gameObject.Transform.Rotation); tower.Transform.Translation = gameObject.Transform.Translation + transformedOffset; tower.Transform.Rotation = gameObject.Transform.Rotation; gameObjects.Add(tower); } var landmarkBridgeTemplate = GetBridgeTemplate(contentManager, mapObject); var halfLength = gameObject.Definition.Geometry.MinorRadius; var halfWidth = gameObject.Definition.Geometry.MajorRadius; CreateTower(landmarkBridgeTemplate.TowerObjectNameFromLeft, -halfWidth, -halfLength); CreateTower(landmarkBridgeTemplate.TowerObjectNameFromRight, halfWidth, -halfLength); CreateTower(landmarkBridgeTemplate.TowerObjectNameToLeft, -halfWidth, halfLength); CreateTower(landmarkBridgeTemplate.TowerObjectNameToRight, halfWidth, halfLength); }
private static void LoadObjects( ContentManager contentManager, Entity objectsEntity, HeightMap heightMap, MapObject[] mapObjects, SceneSettings sceneSettings) { var waypoints = new List <Waypoint>(); foreach (var mapObject in mapObjects) { switch (mapObject.RoadType) { case RoadType.None: var position = mapObject.Position; switch (mapObject.TypeName) { case "*Waypoints/Waypoint": var waypointID = (uint)mapObject.Properties["waypointID"].Value; var waypointName = (string)mapObject.Properties["waypointName"].Value; waypoints.Add(new Waypoint(waypointID, waypointName, position)); break; default: position.Z = heightMap.GetHeight(position.X, position.Y); var objectEntity = contentManager.InstantiateObject(mapObject.TypeName); if (objectEntity != null) { objectEntity.Transform.LocalPosition = position; objectEntity.Transform.LocalEulerAngles = new Vector3(0, 0, mapObject.Angle); objectsEntity.AddChild(objectEntity); } else { // TODO } break; } break; default: // TODO: Roads. break; } } sceneSettings.Waypoints = new WaypointCollection(waypoints); }
private static void LoadObjects( ContentManager contentManager, Entity objectsEntity, HeightMap heightMap, MapObject[] mapObjects, SceneSettings sceneSettings) { var waypoints = new List <Waypoint>(); foreach (var mapObject in mapObjects) { switch (mapObject.RoadType) { case RoadType.None: var position = mapObject.Position; switch (mapObject.TypeName) { case "*Waypoints/Waypoint": waypoints.Add(CreateWaypoint(mapObject)); break; default: // TODO: Handle locomotors when they're implemented. position.Z += heightMap.GetHeight(position.X, position.Y); var objectEntity = contentManager.InstantiateObject(mapObject.TypeName); if (objectEntity != null) { objectEntity.Transform.LocalPosition = position; objectEntity.Transform.LocalEulerAngles = new Vector3(0, 0, mapObject.Angle); objectsEntity.AddChild(objectEntity); } else { // TODO } break; } break; default: // TODO: Roads. break; } } sceneSettings.Waypoints = new WaypointCollection(waypoints); }