コード例 #1
0
ファイル: MapLoader.cs プロジェクト: vtsingaras/OpenSAGE
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: MapLoader.cs プロジェクト: ElonGame/OpenSAGE
        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);
        }
コード例 #4
0
ファイル: MapLoader.cs プロジェクト: Nostritius/OpenSAGE
        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);
        }