예제 #1
0
        private async Task OnCreateResourcesAsync(EngineCreateResourcesEventArgs e)
        {
            var grass     = GrassSprite.Resolve(Entity);
            var snow      = SnowSprite.Resolve(Entity);
            var rock      = RockSprite.Resolve(Entity);
            var heightMap = _terrain.HeightMap.Resolve(Entity);

            if (!heightMap.IsPreScaled || !grass.IsPreScaled || !snow.IsPreScaled || !rock.IsPreScaled)
            {
                throw new ArgumentException("The heightmap, grass, snow and rock textures must be prescaled in order to be used for terrain rendering");
            }

            // Calculate average colors (these are used at small zoom levels)
            _grassColor = GetAverageColor(e.Sender, grass.Image);
            _snowColor  = GetAverageColor(e.Sender, snow.Image);
            _rockColor  = GetAverageColor(e.Sender, rock.Image);

            _normalHeightMap = await RenderNormalHeightMapAsync(e.Sender, heightMap.Image, _terrain.Height - _terrain.BaseHeight);

            var wrap       = CanvasEdgeBehavior.Wrap;
            var grassTiled = new BorderEffect {
                Source = grass.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };
            var snowTiled = new BorderEffect {
                Source = snow.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };
            var rockTiled = new BorderEffect {
                Source = rock.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };

            var shaderBytes = await Utilities.ReadBytesFromUriAsync(new Uri("ms-appx:///Shaders/TerrainShader.bin"));

            _terrainMap = new PixelShaderEffect(shaderBytes)
            {
                Source1     = _normalHeightMap,
                Source2     = grassTiled,
                Source3     = snowTiled,
                Source4     = rockTiled,
                CacheOutput = true
            };
        }
예제 #2
0
파일: FWPGame.cs 프로젝트: xcmel/FWPGame
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            chiF = Content.Load<SpriteFont>("ChillerFont");

            dadGod = Content.Load<Texture2D>("gods/DaddyGod");
            broGod = Content.Load<Texture2D>("gods/BrotherGod");
            sisGod = Content.Load<Texture2D>("gods/SisterGod");

            dadFont = Content.Load<SpriteFont>("gods/DaddyFont");
            broFont = Content.Load<SpriteFont>("gods/BrotherFont");
            sisFont = Content.Load<SpriteFont>("gods/SisterFont");

            intro = new Introduction(this, Content.Load<Texture2D>("gods/DaddyGod"), new Vector2(0,0), new Vector2(0,0), dadFont);

            myGrass = new GrassSprite(Content.Load<Texture2D>("grass"),
                new Vector2(0, 0), new Vector2(0, 0));
            myWater = new WaterSprite(Content.Load<Texture2D>("water"),
                new Vector2(0, 0), new Vector2(0, 0));
            myRoad = new Road(Content.Load<Texture2D>("road"),
                new Vector2(0, 0), new Vector2(0, 0));
            //Kill the game with Escape
            GameAction closeGame = new GameAction(this, this.GetType().GetMethod("ExitGame"), new object[0]);
            InputManager.AddToKeyboardMap(Keys.Escape, closeGame);

            GrowGrass grassPower = new GrowGrass(Content.Load<Texture2D>("UI/sprouts"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(grassPower);
            Rain rainPower = new Rain(Content.Load<Texture2D>("UI/raindrop"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(rainPower);
            sproutTree = new SproutTree(Content.Load<Texture2D>("UI/treeicon"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(sproutTree);
            BuildRoad buildRoad = new BuildRoad(Content.Load<Texture2D>("UI/roadicon"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(buildRoad);
            Fire fire = new Fire(Content.Load<Texture2D>("UI/fireicon"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(fire);
            BuildHouse housePower = new BuildHouse(Content.Load<Texture2D>("UI/house_icon"), this, new Vector2(0, 0), new Vector2(0, 0));
            powers.Add(housePower);

            //Protect protect = new Protect(Content.Load<Texture2D>("UI/protect"), this, new Vector2(0, 0), new Vector2(0, 0));

            Dictionary<string, Power> myPowers = new Dictionary<string, Power>();
            myPowers.Add("grass", grassPower);
            myPowers.Add("sprout", sproutTree);
            myPowers.Add("fire", fire);
            myPowers.Add("house", housePower);

            List<Power> availablePowers = new List<Power>();
            //availablePowers.Add(protect);

            cursor = new Cursor(Content.Load<Texture2D>("cursor"), new Vector2(0,0), this, powers);
            player = new Player(Content.Load<Texture2D>("UI/icon"), Content.Load<Texture2D>("UI/iconBG"), chiF, new Vector2(0, 0),
                new Vector2(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), tempMapSize,
                cursor, powers, availablePowers);

            map = new Map(Content.Load<Texture2D>("Maps/Mars/marsorbit"),
                new Vector2(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height),
                new Vector2(0, 0),
                player);
            worldScale = map.baseScale;

            // TODO: use this.Content to load your game content here
            LoadObjects();

            FontPos = new Vector2(graphics.GraphicsDevice.Viewport.Width / 2,
                graphics.GraphicsDevice.Viewport.Height / 2);

            myApocalypse = new Apocalypse(this, myPowers);
            //myApocalypse.BuildVillage();

            mainMusic = Content.Load<SoundEffect>("Sound/mainMusic");
            mainMusicInstance = mainMusic.CreateInstance();
            mainMusicInstance.IsLooped = true;
            mainMusicInstance.Play();
        }