示例#1
0
文件: Map.cs 项目: Hakua/PokeSharp
		private void initialize(int id) {
			try {
				Texture2D t2d = Texture2D.FromStream(engine.GraphicsDevice, File.OpenRead("Content/maps/" + id + ".png"));

				this.w = t2d.Width;
				this.h = t2d.Height;

				tiles = new Tile[w * h];

				uint[] colors = new uint[w * h];
				t2d.GetData<uint>(colors);

				for (int y = 0; y < h; y++) {
					for (int x = 0; x < w; x++) {
						uint col = colors[x + y * w] & 0xffffff;
						Tile t = new GrassTile(this, x, y);
						if (col == 0xffffff) t = new GrassTile(this, x, y);
						else if (col == 0x00ffff) {
							t = new ErrorTile(this, x, y);
							this.player = new PlayerEntity(this, x << 4, y << 4);
						} else if (col == 0x000000) t = new RockTile(this, x, y);
						else t = new ErrorTile(this, x, y);
						tiles[x + y * w] = t;
					}
				}

				GrassTile.GrassRandom = new Random(0xffffff);
			} catch (Exception e) {
				Console.WriteLine("OH SHIT: " + e);
			}
		}
示例#2
0
        public void refreshTexture()
        {
            bool u = false, d = false, l = false, r = false;
            bool ul = false, dl = false, ur = false, dr = false;
            int  layerU = 0, layerD = 0, layerL = 0, layerR = 0;
            int  layerUL = 0, layerUR = 0, layerDL = 0, layerDR = 0;

            if (map.getTile(x, y - 1) is RockTile)
            {
                RockTile rock = (RockTile)map.getTile(x, y - 1);
                if (rock.layer == layer)
                {
                    u = true;
                }
                else
                {
                    layerU = rock.layer;
                }
            }
            if (map.getTile(x, y + 1) is RockTile)
            {
                RockTile rock = (RockTile)map.getTile(x, y + 1);
                if (rock.layer == layer)
                {
                    d = true;
                }
                else
                {
                    layerD = rock.layer;
                }
            }
            if (map.getTile(x - 1, y) is RockTile)
            {
                RockTile rock = (RockTile)map.getTile(x - 1, y);
                if (rock.layer == layer)
                {
                    l = true;
                }
                else
                {
                    layerL = rock.layer;
                }
            }
            if (map.getTile(x + 1, y) is RockTile)
            {
                RockTile rock = (RockTile)map.getTile(x + 1, y);
                if (rock.layer == layer)
                {
                    r = true;
                }
                else
                {
                    layerR = rock.layer;
                }
            }

            ul = map.getTile(x - 1, y - 1) is RockTile;             //|| map.getTile(x, y - 1) is StairTile;
            dl = map.getTile(x - 1, y + 1) is RockTile;             //|| map.getTile(x, y - 1) is StairTile;
            ur = map.getTile(x + 1, y - 1) is RockTile;             //|| map.getTile(x, y - 1) is StairTile;
            dr = map.getTile(x + 1, y + 1) is RockTile;             //|| map.getTile(x, y - 1) is StairTile;

            if (x == 7 && y == 5 && !(map is MapConnection))
            {
                //Tile t = map.getTile(x + 1, y);
                //Console.WriteLine(map.getTile(x + 1, y));
            }

            if (ul)
            {
                RockTile rock = (RockTile)map.getTile(x - 1, y - 1);
                if (rock.layer != layer)
                {
                    ul      = false;
                    layerUL = rock.layer;
                }
            }
            if (ur)
            {
                RockTile rock = (RockTile)map.getTile(x + 1, y - 1);
                if (rock.layer != layer)
                {
                    ur      = false;
                    layerUR = rock.layer;
                }
            }
            if (dl)
            {
                RockTile rock = (RockTile)map.getTile(x - 1, y + 1);
                if (rock.layer != layer)
                {
                    dl      = false;
                    layerDL = rock.layer;
                }
            }
            if (dr)
            {
                RockTile rock = (RockTile)map.getTile(x + 1, y + 1);
                if (rock.layer != layer)
                {
                    dr      = false;
                    layerDR = rock.layer;
                }
            }

            /*byte stair = 0;
             *
             * if (map.getTile(x - 1, y) is StairTile) {
             *      stair = 1;
             * }
             * if (map.getTile(x + 1, y) is StairTile) {
             *      stair = 1;
             * }
             * if (map.getTile(x, y + 1) is StairTile || map.getTile(x - 1, y + 1) is StairTile || map.getTile(x + 1, y + 1) is StairTile) {
             *      stair = 2;
             * }
             *
             * if (stair > 0) {
             *      if (stair == 1) {
             *      if (map.getTile(x + 1, y + 1) is GrassTile && map.getTile(x + 1, y) is StairTile && map.getTile(x, y + 1) is RockTile) BatchUtil.Draw(map.engine,Art.blocks[9, tex], rx, ry);
             *      else BatchUtil.Draw(map.engine,Art.blocks[7, tex], rx, ry);
             *      }
             *      if (stair == 2) BatchUtil.Draw(map.engine,Art.blocks[7, tex], rx, ry);
             *      return;
             * }*/

            if (layer < 1)
            {
                setTex(0, 0);
            }
            else
            {
                setTex(0, 0);
            }
            if (!u && !d && !l && !r)
            {
                setTex(31, 31);
            }
            else if (u && !d && !l && !r)
            {
                setTex(31, 31);
            }
            else if (!u && d && !l && !r)
            {
                setTex(9, 0);
            }
            else if (u && d && !l && !r)
            {
                if (layerR > layer)
                {
                    setTex(5, tex);
                }
                else if (layerL > layer)
                {
                    setTex(6, tex);
                }
                else
                {
                    if (map.getTile(x + 1, y) is GrassTile)
                    {
                        setTex(5, tex);
                    }
                    else if (map.getTile(x - 1, y) is GrassTile || map.getTile(x - 1, y) is GrassTile)
                    {
                        setTex(6, tex);
                    }
                }
            }
            else if (u && !d && l && !r)
            {
                if (layerR > layer)
                {
                    setTex(0, tex);
                }
                else
                {
                    setTex(4, tex);
                }
            }
            else if (u && !d && !l && r)
            {
                if (layerDL > layer)
                {
                    setTex(0, tex);
                }
                else
                {
                    setTex(3, tex);
                }
            }
            else if (!u && d && l && !r)
            {
                if (layerR > layer)
                {
                    setTex(0, tex);
                }
                else
                {
                    setTex(2, tex);
                }
            }
            else if (!u && d && !l && r)
            {
                if (layerL > layer)
                {
                    setTex(0, tex);
                }
                else
                {
                    setTex(1, tex);
                }
            }
            else if (!u && !d && l && r)
            {
                if (layerL > 0)
                {
                    setTex(7, tex);
                }
                else if (layerD > 0)
                {
                    setTex(8, tex);
                }
                else
                {
                    if (map.getTile(x, y + 1) is GrassTile && layer != 0)
                    {
                        setTex(8, 1);
                    }
                    else if (map.getTile(x, y - 1) is GrassTile)
                    {
                        setTex(7, 0);
                    }
                    else
                    {
                        setTex(7, 0);
                    }
                }
            }
            else if (u && d && l && !r)
            {
                if (layerR > layer)
                {
                    setTex(0, 0);
                }
                else
                {
                    setTex(6, tex);
                }
            }
            else if (u && d && !l && r)
            {
                if (layerL > layer)
                {
                    setTex(dr ? 0 : 9, tex);
                }
                else
                {
                    setTex(5, tex);
                }
            }
            else if (!u && d && l && r)
            {
                if (layerU > layer)
                {
                    setTex(dr ? 0 : 9, tex);
                }
                else
                {
                    if (!dr)
                    {
                        setTex(10, tex);
                    }
                    else
                    {
                        setTex(8, 0);
                    }
                }
            }
            else if (u && !d && l && r)
            {
                if (layerD > layer)
                {
                    setTex(0, tex);
                }
                else
                {
                    setTex(7, 0);
                }
            }
            else if (u && d && l && r)
            {
                if (layerDL > layer)
                {
                    setTex(0, tex);
                }
                else if (layerDR > layer)
                {
                    setTex(0, tex);
                }
                else if (!dl)
                {
                    setTex(10, tex);
                }
                else if (!dr)
                {
                    setTex(9, tex);
                }
                else
                {
                    setTex(0, tex);
                }
            }
            else if (!u && !d && !l && r)
            {
                setTex(7, tex);
            }
            else if (!u && !d && l && !r)
            {
                setTex(7, tex);
            }
        }