public static RawImage GetFloor(int labdata, int floor) { LabData ld = LabData.GetLabData(labdata); FloorData floordata = ld.GetFloor(floor); int texture = floordata.Texture; return(GameData.Floors3D.Open(texture)); }
public static RawImage GetObject(int labdata, int obj) { LabData ld = LabData.GetLabData(labdata); ObjectInfo objectdata = ld.GetObjectInfo(obj); int texture = objectdata.Texture; var img = GameData.Objects3D.Open(texture); img.Width = objectdata.TextureWidth; img.Height = objectdata.TextureHeight; return(img); }
public static RawImage GetWall(int labdata, int wall) { LabData ld = LabData.GetLabData(labdata); WallData walldata = ld.GetWall(wall); int texture = walldata.Texture; var bg = GameData.Walls3D.Open(texture); bg.Width = walldata.TextureWidth; bg.Height = walldata.TextureHeight; var plane = new GraphicPlane(bg.Width, bg.Height); plane.Background = bg; /*foreach(var ovrl in walldata.Overlays) * { * var img = GameData.Overlays3D.Open(ovrl.Texture); * img.Width = ovrl.TextureWidth; * img.Height = ovrl.TextureHeight; * plane.Objects.Add(new GraphicObject(img, new Point(ovrl.X, ovrl.Y))); * }*/ plane.Bake(); return((RawImage)plane.Background); }
/// <summary> /// Combines all tiles to form a graphic plane. /// </summary> /// <returns> /// Newly created graphic plane. /// </returns> public GraphicPlane Combine(CombineArgs args) { if (this.Type == MapType.Map2D) { GraphicPlane plane = new GraphicPlane(this.Width * 16, this.Height * 16); plane.Palette = ImagePalette.GetFullPalette(this.Palette); foreach (Tile t in this.TileData) { Point loc = new Point(t.X * 16, t.Y * 16); if (args.ShowUnderlays) { RawImage ul = MapIcons.GetTileUnderlay(this.Tileset, t); plane.Objects.Add(new GraphicObject(ul, loc)); } if (!args.ShowHelpers && IsHelperTile(tilesid, t.Overlay)) { continue; } if (args.ShowOverlays) { RawImage ol = MapIcons.GetTileOverlay(this.Tileset, t); plane.Objects.Add(new GraphicObject(ol, loc)); } } if (args.ShowNPCs2D) { foreach (NPC npc in UsedNPCs) { ImageBase img = NPCGraphics.GetNPCBig(npc.ObjectID)[6]; Point loc = new Point(npc.X * 16, npc.Y * 16 - img.GetHeight() + 16); plane.Objects.Add(new GraphicObject(img, loc)); } } return(plane); } else if (this.Type == MapType.Map3D) { MinimapType mt = MinimapType.Classic; LabData ld = LabData.GetLabData(this.Labdata); GraphicPlane plane = new GraphicPlane(this.Width * 8, this.Height * 8); ImagePalette src = ImagePalette.GetFullPalette(this.Palette); ImagePalette dest = plane.Palette = new MinimapPalette(src); if (ld != null) { if (args.ShowFloors) { //Floors IndexedCache <RawImage> floorcache = new IndexedCache <RawImage>(i => Minimize(LabGraphics.GetFloor(this.Labdata, i), src, dest)); foreach (Block b in this.BlockData) { if (b.Floor != 0) { Point loc = new Point(b.X * 8, b.Y * 8); plane.Objects.Add(new GraphicObject(floorcache[b.Floor], loc)); } } } if (args.ShowWalls) { //Walls foreach (Block b in this.BlockData) { if (b.IsWall && !ld.GetMinimapForm(b).VisibleOnMinimap) { WallForm form = WallForm.Close; if (b.Y > 0 && BlockData[b.X, b.Y - 1].IsWall) { form |= WallForm.OpenTop; } if (b.X < Width - 1 && BlockData[b.X + 1, b.Y].IsWall) { form |= WallForm.OpenRight; } if (b.Y < Height - 1 && BlockData[b.X, b.Y + 1].IsWall) { form |= WallForm.OpenBottom; } if (b.X > 0 && BlockData[b.X - 1, b.Y].IsWall) { form |= WallForm.OpenLeft; } Point loc = new Point(b.X * 8, b.Y * 8); plane.Objects.Add(new GraphicObject(AutoGFX.GetWall(form, mt), loc)); } } } } foreach (Block b in this.BlockData) { Point loc = new Point(b.X * 8, (b.Y - 1) * 8); if (args.ShowNPCs3D) { //NPCs foreach (NPC npc in UsedNPCs) { if (npc.Positions[0].X == b.X && npc.Positions[0].Y == b.Y) { byte type = 0; if (npc.Interaction == 2) { type = 8; } else { type = 17; } if (type != 0) { plane.Objects.Add(new GraphicObject(AutoGFX.GetIcon(type, mt), loc)); } } } } if (args.ShowObjects) { //Objects if (ld != null) { if (!b.IsEmpty) { byte type = ld.GetMinimapForm(b).MinimapType; plane.Objects.Add(new GraphicObject(AutoGFX.GetIcon(type, mt), loc)); } } } if (args.ShowGotoPoints) { //Goto-points if (b.GotoPoint != null) { plane.Objects.Add(new GraphicObject(AutoGFX.GetIcon(18, mt), loc)); } } } return(plane); } return(null); }