예제 #1
0
        // Load the map
        private void CreateMap()
        {
            // Load map
            TmxFile2D mapFile = ResourceCache.GetTmxFile2D("test/map_1.tmx");

            if (mapFile == null)
            {
                throw new Exception("Map not found");
            }

            Node mapNode = scene.CreateChild("TileMap");

            mapNode.Position = new Vector3(0f, 0f, 10f);
            mapNode.SetScale(1f / 0.7f);

            tileMap         = mapNode.CreateComponent <TileMap2D>();
            tileMap.TmxFile = mapFile;

            // Load pickup sprites
            var weaponSprite = ResourceCache.GetSprite2D("map/levels/platformer-art-complete-pack-0/Request pack/Tiles/raygunBig.png");
            var armorSprite  = ResourceCache.GetSprite2D("map/levels/platformer-art-complete-pack-0/Request pack/Tiles/shieldGold.png");

            if (weaponSprite == null || armorSprite == null)
            {
                throw new Exception("Texture not found");
            }

            // Initialize map
            Random r = new Random();

            for (uint layerID = 0; layerID < tileMap.NumLayers; ++layerID)
            {
                TileMapLayer2D layer = tileMap.GetLayer(layerID);
                for (int x = 0; x < layer.Width; ++x)
                {
                    for (int y = 0; y < layer.Height; ++y)
                    {
                        Node n = layer.GetTileNode(x, y);
                        if (n == null)
                        {
                            continue;
                        }

                        Vector2 pos = tileMap.TileIndexToPosition(x, y);
                        pos /= 0.7f;
                        pos += new Vector2(0.5f, 0.5f);

                        // Solid Block
                        if (layer.GetProperty("Solid") == "True")
                        {
                            MapTile tile = new MapTile(pos);
                            Tiles.Add(tile);
                            collisionObjects.Add(tile);
                            continue;
                        }

                        // Spawner
                        switch (layer.GetProperty("Spawn"))
                        {
                        case "Player":
                            playerSpawns.Add(pos);
                            break;

                        case "Enemy":
                            enemySpawns.Add(pos);
                            break;

                        case "Weapon":
                            if (r.NextDouble() < weaponSpawnRate)
                            {
                                Pickups.Add(new PickupWeaponUpgrade(scene, weaponSprite, pos));
                            }
                            break;

                        case "Armor":
                            if (r.NextDouble() < armorSpawnRate)
                            {
                                Pickups.Add(new PickupArmor(scene, armorSprite, pos));
                            }
                            break;

                        default:
                            continue;
                        }

                        // Skipped if not a spawner
                        n.Remove();
                    }
                }
            }
        }
예제 #2
0
        void CreateScene()
        {
            scene = new Scene();
            scene.CreateComponent <Octree>();

            // Create camera node
            CameraNode = scene.CreateChild("Camera");
            // Set camera's position
            CameraNode.Position = (new Vector3(0.0f, 0.0f, -10.0f));

            Camera camera = CameraNode.CreateComponent <Camera>();

            camera.Orthographic = true;

            var graphics = Graphics;

            camera.OrthoSize = (float)graphics.Height * PixelSize;
            // Set zoom according to user's resolution to ensure full visibility (initial zoom (1.0) is set for full visibility at 1280x800 resolution)
            camera.Zoom = (1.0f * Math.Min((float)graphics.Width / 1280.0f, (float)graphics.Height / 800.0f));

            var cache = ResourceCache;
            // Get tmx file
            TmxFile2D tmxFile = cache.GetTmxFile2D("data/isometric_grass_and_water.tmx");

            if (tmxFile == null)
            {
                return;
            }

            /*var n = tmxFile.NumLayers;
             * for (uint i=0; i<n; i++)
             * {
             *  TmxLayer2D layer = tmxFile.GetLayer(i);
             *  layer.
             * }*/


            Node tileMapNode = scene.CreateChild("TileMap");

            tileMapNode.Position = new Vector3(0.0f, 0.0f, -1.0f);

            TileMap2D tileMap = tileMapNode.CreateComponent <TileMap2D>();

            // Set animation
            tileMap.TmxFile = tmxFile;


            var n     = tileMap.NumLayers;
            var layer = tileMap.GetLayer(0);
            var node  = tileMap.Node;
            var name  = node.Name;

            while (node.GetNumChildren() == 1)
            {
                node = node.Children[0];
                name = node.Name;
            }
            var n0 = node.GetNumChildren();

            int ii     = 0;
            var result = from Node xx in node.Children /*where (ii++ > n / 3) && (ii < n * 2 / 3)*/ select xx;

            foreach (var nn in result)
            {
                nn.Remove();
            }

            var nx = result.Count();
            var n1 = node.GetNumChildren();

            //node.GetChild()


            // Set camera's position
            TileMapInfo2D info = tileMap.Info;

            float x = info.MapWidth * 0.5f;
            float y = info.MapHeight * 0.5f;

            CameraNode.Position = new Vector3(x, y, -10.0f);

            // Create a Zone component for ambient lighting & fog control
            var zoneNode = scene.CreateChild("Zone");
            var zone     = zoneNode.CreateComponent <Zone>();

            zone.SetBoundingBox(new BoundingBox(-1000.0f, 1000.0f));
            zone.AmbientColor = new Color(0.15f, 0.15f, 0.15f);
            zone.FogColor     = new Color(0.5f, 0.5f, 0.7f);
            zone.FogStart     = 100.0f;
            zone.FogEnd       = 300.0f;

            // Create a directional light to the world. Enable cascaded shadows on it
            var lightNode = scene.CreateChild("DirectionalLight");

            lightNode.SetDirection(new Vector3(0.6f, -1.0f, 0.8f));
            var light = lightNode.CreateComponent <Light>();

            light.LightType   = LightType.Directional;
            light.CastShadows = true;
            light.ShadowBias  = new BiasParameters(0.00025f, 0.5f);
            // Set cascade splits at 10, 50 and 200 world units, fade shadows out at 80% of maximum shadow distance
            light.ShadowCascade = new CascadeParameters(10.0f, 50.0f, 200.0f, 0.0f, 0.8f);


            // Create some mushrooms
            const uint numMushrooms = 240;

            for (uint i = 0; i < numMushrooms; ++i)
            {
                var mushroomNode = scene.CreateChild("Mushroom");
                mushroomNode.Position = new Vector3(NextRandom(90.0f) - 45.0f, 0.0f, NextRandom(90.0f) - 45.0f);
                mushroomNode.Rotation = new Quaternion(0.0f, NextRandom(360.0f), 0.0f);
                mushroomNode.SetScale(0.5f + NextRandom(2.0f));

                StaticModel mushroomObject = mushroomNode.CreateComponent <StaticModel>();
                mushroomObject.Model = cache.GetModel("data/Mushroom.mdl");
                mushroomObject.SetMaterial(cache.GetMaterial("data/Mushroom.xml"));
                mushroomObject.CastShadows = true;
            }

            {
                mobileMushroom          = scene.CreateChild("Mushroom");
                mobileMushroom.Position = new Vector3(20.0f, 10.0f, -10.0f);
                mobileMushroom.Rotation = new Quaternion(0.0f, NextRandom(360.0f), 0.0f);
                mobileMushroom.SetScale(0.5f + NextRandom(2.0f));

                StaticModel mushroomObject = mobileMushroom.CreateComponent <StaticModel>();
                mushroomObject.Model = cache.GetModel("data/Mushroom.mdl");
                mushroomObject.SetMaterial(cache.GetMaterial("data/Mushroom.xml"));
                mushroomObject.CastShadows = true;
            }
        }
예제 #3
0
        // This method loads the pickups
        // Recieves a line of serialized pickup data
        private void LoadPickups(string line)
        {
            InvokeOnMain(() =>
            {
                // Create images
                var weaponSprite = ResourceCache.GetSprite2D("map/levels/platformer-art-complete-pack-0/Request pack/Tiles/raygunBig.png");
                var armorSprite  = ResourceCache.GetSprite2D("map/levels/platformer-art-complete-pack-0/Request pack/Tiles/shieldGold.png");
                if (weaponSprite == null || armorSprite == null)
                {
                    throw new Exception("Texture not found");
                }

                // Clear Tilemap of old pickups
                for (uint layerID = 0; layerID < tileMap.NumLayers; ++layerID)
                {
                    TileMapLayer2D layer = tileMap.GetLayer(layerID);
                    for (int x = 0; x < layer.Width; ++x)
                    {
                        for (int y = 0; y < layer.Height; ++y)
                        {
                            Node n = layer.GetTileNode(x, y);
                            if (n == null)
                            {
                                continue;
                            }
                            if (layer.HasProperty("Spawn"))
                            {
                                n.Remove();
                            }
                        }
                    }
                }

                // Remove added pickups from map.
                foreach (Pickup p in Pickups)
                {
                    p.WorldNode.Remove();
                }
                Pickups.Clear();

                // Load each pickup
                string[] pickupsSplit = line.Split(';');
                foreach (var pickup in pickupsSplit.Take(pickupsSplit.Length - 1))
                {
                    Pickup pickupObj;

                    // determine type
                    var pickupType = pickup.Split(',')[0];
                    if (pickupType == "Royale_Platformer.Model.PickupArmor")
                    {
                        pickupObj = new PickupArmor();
                    }
                    else
                    {
                        pickupObj = new PickupWeaponUpgrade();
                    }

                    // determine position
                    var position = pickupObj.Deserialize(pickup);

                    // Load
                    if (pickupType == "Royale_Platformer.Model.PickupArmor")
                    {
                        Pickups.Add(new PickupArmor(scene, armorSprite, new Vector2(position.X, position.Y)));
                    }
                    else
                    {
                        Pickups.Add(new PickupWeaponUpgrade(scene, weaponSprite, new Vector2(position.X, position.Y)));
                    }
                }
            });
        }