private _2DSprite GetAirSprite(WorldState world) { var _Sprite = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; var airTiles = TextureGenerator.GetAirTiles(world.Device); Texture2D sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = airTiles[2]; _Sprite.DestRect = FLOORDEST_FAR; _Sprite.Depth = ArchZBuffers[14]; break; case WorldZoom.Medium: sprite = airTiles[1]; _Sprite.DestRect = FLOORDEST_MED; _Sprite.Depth = ArchZBuffers[13]; break; case WorldZoom.Near: sprite = airTiles[0]; _Sprite.DestRect = FLOORDEST_NEAR; _Sprite.Depth = ArchZBuffers[12]; break; } _Sprite.Pixel = sprite; _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); return(_Sprite); }
public override void Draw(GraphicsDevice device, WorldState world) { #if !DEBUG if (!Visible) { return; } #endif if (this.DrawGroup != null) { dgrp.Draw(world); } if (Headline != null) { var headOff = new Vector3(0, 0, 0.66f); var headPx = world.WorldSpace.GetScreenFromTile(headOff); var item = new _2DSprite(); item.Pixel = Headline; item.Depth = TextureGenerator.GetWallZBuffer(device)[30]; item.RenderMode = _2DBatchRenderMode.Z_BUFFER; item.SrcRect = new Rectangle(0, 0, Headline.Width, Headline.Height); item.WorldPosition = headOff; var off = PosCenterOffsets[(int)world.Zoom - 1]; item.DestRect = new Rectangle( ((int)headPx.X - Headline.Width / 2) + (int)off.X, ((int)headPx.Y - Headline.Height / 2) + (int)off.Y, Headline.Width, Headline.Height); world._2D.Draw(item); } }
public override void Draw(GraphicsDevice device, WorldState world) { if (_Dirty) { if (_Floor == null) { _Floor = Content.Get().WorldFloors.Get((ulong)_FloorID); if (_Floor != null) { _Sprite = new _2DSprite { RenderMode = _2DBatchRenderMode.NO_DEPTH }; } } if (_DirtyTexture && _Floor != null) { SPR2 sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = _Floor.Far; _Sprite.DestRect = DESTINATION_FAR; break; case WorldZoom.Medium: sprite = _Floor.Medium; _Sprite.DestRect = DESTINATION_MED; break; case WorldZoom.Near: sprite = _Floor.Near; _Sprite.DestRect = DESTINATION_NEAR; break; } if (world.Rotation == WorldRotation.TopRight || world.Rotation == WorldRotation.BottomRight) { _Sprite.FlipVertically = true; } if ((int)world.Rotation > 1) { _Sprite.FlipHorizontally = true; //todo - find out why these don't work (really it is a mystery) } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[0]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); } _DirtyTexture = false; _Dirty = false; } if (_Sprite != null) { world._2D.Draw(_Sprite); } }
private _2DSprite GetFloorSprite(Floor pattern, int rotation, WorldState world) { var _Sprite = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; if (pattern == null) { return(_Sprite); } SPR2 sprite = null; bool vertFlip = world.Rotation == WorldRotation.TopRight || world.Rotation == WorldRotation.BottomRight; int bufOff = (vertFlip) ? 3 : 0; switch (world.Zoom) { case WorldZoom.Far: sprite = pattern.Far; _Sprite.DestRect = FLOORDEST_FAR; _Sprite.Depth = ArchZBuffers[14 + bufOff]; break; case WorldZoom.Medium: sprite = pattern.Medium; _Sprite.DestRect = FLOORDEST_MED; _Sprite.Depth = ArchZBuffers[13 + bufOff]; break; case WorldZoom.Near: sprite = pattern.Near; _Sprite.DestRect = FLOORDEST_NEAR; _Sprite.Depth = ArchZBuffers[12 + bufOff]; break; } if (sprite != null) { _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[rotation]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); if (vertFlip) { _Sprite.FlipVertically = true; } if ((int)world.Rotation > 1) { _Sprite.FlipHorizontally = true; } } return(_Sprite); }
public override void Draw(GraphicsDevice device, WorldState world) { if (this.DrawGroup == null) { return; } if (!world.TempDraw) { LastScreenPos = world.WorldSpace.GetScreenFromTile(Position) + world.WorldSpace.GetScreenOffset() + PosCenterOffsets[(int)world.Zoom - 1]; LastZoomLevel = (int)world.Zoom; } if (!Visible) { return; } dgrp.Draw(world); if (Headline != null) { var headOff = new Vector3(0, 0, 0.66f); var headPx = world.WorldSpace.GetScreenFromTile(headOff); var item = new _2DSprite(); item.Pixel = Headline; item.Depth = TextureGenerator.GetWallZBuffer(device)[30]; item.RenderMode = _2DBatchRenderMode.Z_BUFFER; item.SrcRect = new Rectangle(0, 0, Headline.Width, Headline.Height); item.WorldPosition = headOff; var off = PosCenterOffsets[(int)world.Zoom - 1]; item.DestRect = new Rectangle( ((int)headPx.X - Headline.Width / 2) + (int)off.X, ((int)headPx.Y - Headline.Height / 2) + (int)off.Y, Headline.Width, Headline.Height); world._2D.Draw(item); } bool forceDynamic = ForceDynamic; if (Container != null && Container is ObjectComponent) { forceDynamic = ((ObjectComponent)Container).ForceDynamic; if (forceDynamic && renderInfo.Layer == WorldObjectRenderLayer.STATIC) { blueprint.Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_GRAPHIC_CHANGE, TileX, TileY, Level, this)); } } if (renderInfo.Layer == WorldObjectRenderLayer.DYNAMIC && !forceDynamic && DynamicCounter++ > 120 && blueprint != null) { blueprint.Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_RETURN_TO_STATIC, TileX, TileY, Level, this)); } }
public override void Draw(GraphicsDevice device, WorldState world) { if (_Dirty) { if (_Floor == null) { _Floor = Content.Get().WorldFloors.Get((ulong)_FloorID); if (_Floor != null) { _Sprite = new _2DSprite { RenderMode = _2DBatchRenderMode.NO_DEPTH }; } } if (_DirtyTexture && _Floor != null) { SPR2 sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = _Floor.Far; _Sprite.DestRect = DESTINATION_FAR; break; case WorldZoom.Medium: sprite = _Floor.Medium; _Sprite.DestRect = DESTINATION_MED; break; case WorldZoom.Near: sprite = _Floor.Near; _Sprite.DestRect = DESTINATION_NEAR; break; } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[0]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); } _DirtyTexture = false; _Dirty = false; } if (_Sprite != null) { world._2D.Draw(_Sprite); } }
public override void Draw(GraphicsDevice device, WorldState world) { var headpos = Avatar.Skeleton.GetBone("HEAD").AbsolutePosition / 3.0f; var transhead = Vector3.Transform(new Vector3(headpos.X, headpos.Z, headpos.Y), Matrix.CreateRotationZ((float)(RadianDirection + Math.PI))) + this.Position - new Vector3(0.5f, 0.5f, 0f); if (!world.TempDraw) { LastScreenPos = world.WorldSpace.GetScreenFromTile(transhead) + world.WorldSpace.GetScreenOffset() + PosCenterOffsets[(int)world.Zoom - 1]; LastZoomLevel = (int)world.Zoom; } if (!Visible) { return; } if (Avatar != null) { world._3D.DrawMesh(Matrix.CreateRotationY((float)(Math.PI - RadianDirection)) * this.World, Avatar, (short)ObjectID, Room); //negated so avatars spin clockwise } if (Headline != null) { var headOff = (transhead - Position) + new Vector3(0, 0, 0.66f); var headPx = world.WorldSpace.GetScreenFromTile(headOff); var item = new _2DSprite(); item.Pixel = Headline; item.Depth = TextureGenerator.GetWallZBuffer(device)[30]; item.RenderMode = _2DBatchRenderMode.Z_BUFFER; item.SrcRect = new Rectangle(0, 0, Headline.Width, Headline.Height); item.WorldPosition = headOff; var off = PosCenterOffsets[(int)world.Zoom - 1]; item.DestRect = new Rectangle( ((int)headPx.X - Headline.Width / 2) + (int)off.X, ((int)headPx.Y - Headline.Height / 2) + (int)off.Y, Headline.Width, Headline.Height); item.Room = Room; world._2D.Draw(item); } }
public override void Draw(GraphicsDevice device, WorldState world) { if (ArchZBuffers == null) { ArchZBuffers = TextureGenerator.GetWallZBuffer(device); } var pxOffset = world.WorldSpace.GetScreenOffset(); var floorContent = Content.Content.Get().WorldFloors; for (sbyte level = 1; level <= world.Level; level++) { for (short y = 0; y < blueprint.Height; y++) { //ill decide on a reasonable system for components when it's finished ok pls :( for (short x = 0; x < blueprint.Width; x++) { var comp = blueprint.GetFloor(x, y, level); if (comp.Pattern != 0) { ushort room = (ushort)blueprint.RoomMap[level - 1][x + y * blueprint.Width]; var tilePosition = new Vector3(x, y, (level - 1) * 2.95f); world._2D.OffsetPixel(world.WorldSpace.GetScreenFromTile(tilePosition)); world._2D.OffsetTile(tilePosition); if (comp.Pattern > 65534) { //determine adjacent pool tiles int poolAdj = 0; for (int i = 0; i < PoolDirections.Length; i++) { var testTile = new Point(x, y) + PoolDirections[i]; if ((testTile.X < 0 || testTile.X >= blueprint.Width) || (testTile.Y < 0 || testTile.Y >= blueprint.Height)) { continue; } if (blueprint.GetFloor((short)testTile.X, (short)testTile.Y, level).Pattern == comp.Pattern) { poolAdj |= 1 << i; } } var adj = RotatePoolSegs((PoolSegments)poolAdj, (int)world.Rotation); //get and draw the base tile int spriteNum = 0; if ((adj & PoolSegments.TopRight) > 0) { spriteNum |= 1; } if ((adj & PoolSegments.TopLeft) > 0) { spriteNum |= 2; } if ((adj & PoolSegments.BottomLeft) > 0) { spriteNum |= 4; } if ((adj & PoolSegments.BottomRight) > 0) { spriteNum |= 8; } var _Sprite = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; SPR2 sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = floorContent.GetGlobalSPR((ushort)(0x400 + spriteNum)); _Sprite.DestRect = FLOORDEST_FAR; _Sprite.Depth = ArchZBuffers[14]; break; case WorldZoom.Medium: sprite = floorContent.GetGlobalSPR((ushort)(0x410 + spriteNum)); _Sprite.DestRect = FLOORDEST_MED; _Sprite.Depth = ArchZBuffers[13]; break; case WorldZoom.Near: sprite = floorContent.GetGlobalSPR((ushort)(0x420 + spriteNum)); _Sprite.DestRect = FLOORDEST_NEAR; _Sprite.Depth = ArchZBuffers[12]; break; } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[0]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); _Sprite.Room = room; world._2D.Draw(_Sprite); //draw any corners on top PoolSegments[] CornerChecks = { (PoolSegments.TopLeft | PoolSegments.TopRight), (PoolSegments.TopLeft | PoolSegments.BottomLeft), (PoolSegments.BottomLeft | PoolSegments.BottomRight), (PoolSegments.TopRight | PoolSegments.BottomRight) }; if ((adj & CornerChecks[0]) == CornerChecks[0] && (adj & PoolSegments.Top) == 0) { //top corner var tcS = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x430 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Center.X - tcS.Pixel.Width / 2, _Sprite.DestRect.Y, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[21 + (3 - (int)world.Zoom)]; tcS.Room = room; world._2D.Draw(tcS); } if ((adj & CornerChecks[1]) == CornerChecks[1] && (adj & PoolSegments.Left) == 0) { //left corner var tcS = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x431 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.X, _Sprite.DestRect.Center.Y + 1 - tcS.Pixel.Height / 2, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[24 + (3 - (int)world.Zoom)]; tcS.Room = room; world._2D.Draw(tcS); } if ((adj & CornerChecks[2]) == CornerChecks[2] && (adj & PoolSegments.Bottom) == 0) { //bottom corner var tcS = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x432 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Center.X - tcS.Pixel.Width / 2, _Sprite.DestRect.Bottom - tcS.Pixel.Height, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[27 + (3 - (int)world.Zoom)]; tcS.Room = room; world._2D.Draw(tcS); } if ((adj & CornerChecks[3]) == CornerChecks[3] && (adj & PoolSegments.Right) == 0) { //right corner var tcS = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x433 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Right - tcS.Pixel.Width, _Sprite.DestRect.Center.Y + 1 - tcS.Pixel.Height / 2, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[24 + (3 - (int)world.Zoom)]; tcS.Room = room; world._2D.Draw(tcS); } } else { var floor = GetFloorSprite(floorContent.Get(comp.Pattern), 0, world); floor.Room = room; if (floor.Pixel != null) { world._2D.Draw(floor); } } } else if (world.BuildMode && level > 1 && blueprint.Supported[level - 2][y * blueprint.Height + x]) { var tilePosition = new Vector3(x, y, (level - 1) * 2.95f); world._2D.OffsetPixel(world.WorldSpace.GetScreenFromTile(tilePosition)); world._2D.OffsetTile(tilePosition); var floor = GetAirSprite(world); floor.Room = 65535; if (floor.Pixel != null) { world._2D.Draw(floor); } } } } } }