Beispiel #1
0
        public override void Draw(DevicePanel d)
        {
            if (Object.GetChild("script") != null)
            {
                return;
            }
            int  type  = Object.GetInt("pt");
            bool arrow = ((type == 1 || type == 3 || type == 10) && Object.GetInt("tm") == int.Parse(MapEditor.Instance.MapID) && Map.Instance.GetPortal(Object.GetString("tn")) != null);

            int cx = Map.Instance.CenterX;
            int cy = Map.Instance.CenterY;

            switch (Object.GetInt("pt"))
            {
            case 0:
            case 1:
            case 10:
                d.DrawCircle(cx + Object.GetInt("x"), cy + Object.GetInt("y"), Color.FromArgb(Transparency, (Selected) ? Color.Blue : Color.RoyalBlue)); break;

            case 3:
                d.DrawCircle(cx + Object.GetInt("x"), cy + Object.GetInt("y"), Color.FromArgb(Transparency, (Selected) ? Color.Blue : Color.RoyalBlue));
                d.DrawEmptyCircle(cx + Object.GetInt("x"), cy + Object.GetInt("y"), Color.FromArgb(Transparency, (Selected) ? Color.Blue : Color.RoyalBlue)); break;

            case 2:
                d.DrawBitmap(Image.GetCanvas().GetTexture(d._device), cx + Object.GetInt("x") - Image.GetVector("origin").x, cy + Object.GetInt("y") - Image.GetVector("origin").y, Image.GetCanvas().width, Image.GetCanvas().height, Selected, (Transparency == 50) ? 100 : Transparency); break;
            }

            if (arrow)
            {
                MapPortal p  = Map.Instance.GetPortal(Object.GetString("tn"));
                int       x  = p.Object.GetInt("x");
                int       y  = p.Object.GetInt("y");
                double    di = MapFoothold.Distance(Object.GetInt("x"), Object.GetInt("y"), x, y);
                if (di != 0)
                {
                    double xp = (Object.GetInt("x") * 5 + x * (di - 5)) / di;
                    double yp = (Object.GetInt("y") * 5 + y * (di - 5)) / di;
                    d.DrawArrow(Object.GetInt("x") + cx, Object.GetInt("y") + cy, (int)xp + cx, (int)yp + cy, Color.FromArgb(Transparency, (Selected) ? Color.Blue : Color.RoyalBlue));
                }
            }
        }
Beispiel #2
0
 public void Add(MapItem item)
 {
     if (item is MapLife)
     {
         MapLife  l  = (MapLife)item;
         int      id = 0;
         IMGEntry le = map.GetChild("life");
         if (le == null)
         {
             le      = new IMGEntry();
             le.Name = "life";
             Map.Instance.map.Add(le);
         }
         while (le.childs.Contains(id.ToString()))
         {
             id++;
         }
         l.ID          = id;
         l.Object.Name = l.ID.ToString();
         lifes.Add(l);
         lifes.Sort(Map.CompareItems);
         le.Add(l.Object);
     }
     else if (item is MapReactor)
     {
         MapReactor r  = (MapReactor)item;
         int        id = 0;
         IMGEntry   re = map.GetChild("reactor");
         if (re == null)
         {
             re      = new IMGEntry();
             re.Name = "reactor";
             Map.Instance.map.Add(re);
         }
         while (re.childs.Contains(id.ToString()))
         {
             id++;
         }
         r.ID          = id;
         r.Object.Name = r.ID.ToString();
         reactors.Add(r);
         reactors.Sort(Map.CompareItems);
         re.Add(r.Object);
     }
     else if (item is MapLR)
     {
         MapLR    l    = (MapLR)item;
         int      id   = 1;
         IMGEntry lrse = map.GetChild("ladderRope");
         if (lrse == null)
         {
             lrse      = new IMGEntry();
             lrse.Name = "ladderRope";
             Map.Instance.map.Add(lrse);
         }
         while (lrse.childs.Contains(id.ToString()))
         {
             id++;
         }
         l.ID          = id;
         l.Object.Name = l.ID.ToString();
         lrs.Add(l);
         lrs.Sort(Map.CompareItems);
         lrse.Add(l.Object);
     }
     else if (item is MapSeat)
     {
         MapSeat  s     = (MapSeat)item;
         int      id    = 0;
         IMGEntry seate = map.GetChild("seat");
         if (seate == null)
         {
             seate      = new IMGEntry();
             seate.Name = "seat";
             Map.Instance.map.Add(seate);
         }
         while (seate.childs.Contains(id.ToString()))
         {
             id++;
         }
         s.ID          = id;
         s.Object.Name = s.ID.ToString();
         seats.Add(s);
         seats.Sort(Map.CompareItems);
         seate.Add(s.Object);
     }
     else if (item is MapPortal)
     {
         MapPortal p        = (MapPortal)item;
         int       id       = 0;
         IMGEntry  portalse = map.GetChild("portal");
         if (portalse == null)
         {
             portalse      = new IMGEntry();
             portalse.Name = "portal";
             Map.Instance.map.Add(portalse);
         }
         while (portalse.childs.Contains(id.ToString()))
         {
             id++;
         }
         p.ID          = id;
         p.Object.Name = p.ID.ToString();
         p.Image       = MapEditor.file.Directory.GetIMG("MapHelper.img").GetChild("portal/game/pv/0");
         portals.Add(p);
         portals.Sort(Map.CompareItems);
         portalse.Add(p.Object);
     }
     else if (item is MapToolTip)
     {
         MapToolTip t        = (MapToolTip)item;
         int        id       = 0;
         IMGEntry   ToolTips = map.GetChild("ToolTip");
         if (ToolTips == null)
         {
             ToolTips      = new IMGEntry();
             ToolTips.Name = "ToolTip";
             Map.Instance.map.Add(ToolTips);
         }
         while (ToolTips.childs.Contains(id.ToString()))
         {
             id++;
         }
         t.ID          = id;
         t.Object.Name = t.ID.ToString();
         tooltips.Add(t);
         tooltips.Sort(Map.CompareItems);
         ToolTips.Add(t.Object);
     }
     else if (item is MapClock)
     {
         if (clock == null)
         {
             clock             = item as MapClock;
             clock.Object.Name = "clock";
             clock.Image       = MapEditor.file.Directory.GetIMG("Obj/etc.img").GetChild("clock/fontTime");
             map.Add(clock.Object);
         }
     }
     else
     {
         layers[(int)MapEditor.Instance.Layer.Value].Add(item);
     }
 }
Beispiel #3
0
 public void Delete(MapItem item)
 {
     if (item is MapLife)
     {
         MapLife l = (MapLife)item;
         if (lifes.Contains(l))
         {
             lifes.Remove(l);
             map.GetChild("life").childs.Remove(l.Object.Name);
             Map.Pad(map.GetChild("life"), lifes.ToArray());
         }
     }
     else if (item is MapReactor)
     {
         MapReactor r = (MapReactor)item;
         if (reactors.Contains(r))
         {
             reactors.Remove(r);
             map.GetChild("reactor").childs.Remove(r.Object.Name);
             Map.Pad(map.GetChild("reactor"), reactors.ToArray());
         }
     }
     else if (item is MapLR)
     {
         MapLR l = (MapLR)item;
         if (lrs.Contains(l))
         {
             lrs.Remove(l);
             map.GetChild("ladderRope").childs.Remove(l.Object.Name);
             Map.Pad(map.GetChild("ladderRope"), lrs.ToArray(), 1);
         }
     }
     else if (item is MapSeat)
     {
         MapSeat s = (MapSeat)item;
         if (seats.Contains(s))
         {
             seats.Remove(s);
             map.GetChild("seat").childs.Remove(s.Object.Name);
             Map.Pad(map.GetChild("seat"), seats.ToArray());
         }
     }
     else if (item is MapPortal)
     {
         MapPortal p = (MapPortal)item;
         if (portals.Contains(p))
         {
             portals.Remove(p);
             map.GetChild("portal").childs.Remove(p.Object.Name);
             Map.Pad(map.GetChild("portal"), portals.ToArray());
             // TODO SORT
         }
     }
     else if (item is MapToolTip)
     {
         MapToolTip t = (MapToolTip)item;
         if (tooltips.Contains(t))
         {
             tooltips.Remove(t);
             map.GetChild("ToolTip").childs.Remove(t.Object.Name);
             t.Image.parent.childs.Remove(t.Object.Name);
             Map.Pad(map.GetChild("ToolTip"), t.Image.parent, tooltips.ToArray());
         }
     }
     else if (item is MapToolTipCorner)
     {
         Delete(((MapToolTipCorner)item).ToolTip);
     }
     else if (item is MapClock)
     {
         if (clock != null)
         {
             map.childs.Remove("clock");
             clock = null;
         }
     }
     else
     {
         layers[(int)MapEditor.Instance.Layer.Value].Delete(item);
     }
 }
Beispiel #4
0
        public Map(IMGEntry map)
        {
            Instance = this;

            MapEditor.Instance.EditBack.Enabled = false;

            this.map = map;

            IMGEntry Info    = map.GetChild("info");
            IMGEntry MiniMap = map.GetChild("miniMap");

            if (Info.GetChild("VRTop") != null)
            {
                VRLeft   = Info.GetInt("VRLeft");
                VRTop    = Info.GetInt("VRTop");
                VRRight  = Info.GetInt("VRRight");
                VRBottom = Info.GetInt("VRBottom");
            }
            if (MiniMap == null)
            {
                if (VRTop == 0)
                {
                    throw new Exception("Unhandled Map");
                }
                CenterX = -VRLeft + 50;
                CenterY = -VRTop + 50;
                Width   = VRRight + CenterX + 100;
                Height  = VRBottom + CenterY + 100;
            }
            else
            {
                CenterX = MiniMap.GetInt("centerX");
                CenterY = MiniMap.GetInt("centerY");
                Width   = MiniMap.GetInt("width");
                Height  = MiniMap.GetInt("height");
                if (VRTop == 0)
                {
                    VRLeft   = -CenterX + 69;
                    VRTop    = -CenterY + 86;
                    VRRight  = Width - CenterX - 69;
                    VRBottom = Height - CenterY - 86;
                }
            }

            fly = Info.GetBool("swim") ? -1 : 1;

            int maxX = Int32.MinValue;
            int maxY = Int32.MinValue;
            int minX = Int32.MaxValue;
            int minY = Int32.MaxValue;

            for (int i = 0; i < 8; i++)
            {
                MapLayer layer = new MapLayer();

                IMGEntry layerEntry = map.GetChild(i.ToString());

                layer.layer = layerEntry;
                layer.info  = layerEntry.GetChild("info");
                layer.ID    = i;

                IMGEntry objects = layerEntry.GetChild("obj");
                foreach (IMGEntry o in objects.childs.Values)
                {
                    MapObject mo = new MapObject();

                    mo.Object = o;
                    mo.Image  = GetRealImage(MapEditor.file.Directory.GetIMG("Obj/" + o.GetString("oS") + ".img").GetChild(o.GetString("l0") + "/" + o.GetString("l1") + "/" + o.GetString("l2") + "/0"));
                    mo.ID     = int.Parse(o.Name);

                    mo.CreateFootholdDesignList();

                    footholdsGroups.Add(o.GetInt("zM"));

                    layer.objects.Add(mo);
                }

                layer.objects.Sort(CompareItems);

                layer.OrderObjects();

                IMGEntry tiles = layerEntry.GetChild("tile");
                foreach (IMGEntry t in tiles.childs.Values)
                {
                    MapTile mt = new MapTile();

                    mt.Object = t;
                    mt.Image  = MapEditor.file.Directory.GetIMG("Tile/" + layer.info.GetString("tS") + ".img").GetChild(t.GetString("u") + "/" + t.GetInt("no").ToString());
                    //mt.Image = MapEditor.file.Directory.GetIMG("Tile/blackTile.img").GetChild(t.GetString("u") + "/0");
                    mt.ID = int.Parse(t.Name);

                    mt.SetDesign(t.GetString("u"));

                    mt.CreateFootholdDesignList();

                    footholdsGroups.Add(t.GetInt("zM"));

                    layer.tiles.Add(mt);
                }

                layer.tiles.Sort(CompareItems);

                layer.OrderTiles();

                IMGEntry footholds = map.GetChild("foothold/" + i.ToString());
                if (footholds != null)
                {
                    foreach (IMGEntry group in footholds.childs.Values)
                    {
                        //if (group.Name != "3") continue;
                        MapFootholds f = new MapFootholds(int.Parse(group.Name));

                        f.Object = group;

                        layer.footholdGroups.Add(f.ID, f);

                        foreach (IMGEntry fhe in group.childs.Values)
                        {
                            MapFoothold fh = new MapFoothold(int.Parse(fhe.Name));

                            fh.Object      = fhe;
                            fh.Group       = f;
                            fh.s1          = new MapFootholdSide();
                            fh.s2          = new MapFootholdSide();
                            fh.s1.Object   = fhe;
                            fh.s2.Object   = fhe;
                            fh.s1.ID       = 1;
                            fh.s2.ID       = 2;
                            fh.s1.Foothold = fh;
                            fh.s2.Foothold = fh;

                            if (fhe.GetInt("x1") < minX)
                            {
                                minX = fhe.GetInt("x1");
                            }
                            if (fhe.GetInt("y1") < minY)
                            {
                                minY = fhe.GetInt("y1");
                            }
                            if (fhe.GetInt("x2") < minX)
                            {
                                minX = fhe.GetInt("x2");
                            }
                            if (fhe.GetInt("y2") < minY)
                            {
                                minY = fhe.GetInt("y2");
                            }
                            if (fhe.GetInt("x1") > maxX)
                            {
                                maxX = fhe.GetInt("x1");
                            }
                            if (fhe.GetInt("y1") > maxY)
                            {
                                maxY = fhe.GetInt("y1");
                            }
                            if (fhe.GetInt("x2") > maxX)
                            {
                                maxX = fhe.GetInt("x2");
                            }
                            if (fhe.GetInt("y2") > maxY)
                            {
                                maxY = fhe.GetInt("y2");
                            }

                            f.footholds.Add(fh.ID, fh);
                        }
                    }
                }


                layers.Add(layer);
            }

            /*if (VRTop == 0)
             * {
             *  if (maxX != Int32.MinValue)
             *  {
             *      VRLeft = minX + 30;
             *      VRRight = maxX - 30;
             *      VRTop = minY - 300;
             *      VRBottom = maxY + 10;
             *  }
             * }*/
            left   = minX + 30;
            right  = maxX - 30;
            top    = minY - 300;
            bottom = maxY + 10;
            if (Info.GetChild("VRLeft") != null)
            {
                if (left < Info.GetInt("VRLeft") + 20)
                {
                    left = Info.GetInt("VRLeft") + 20;
                }
                if (right > Info.GetInt("VRRight"))
                {
                    right = Info.GetInt("VRRight");
                }
                if (top < Info.GetInt("VRTop") + 65)
                {
                    top = Info.GetInt("VRTop") + 65;
                }
                if (bottom > Info.GetInt("VRBottom"))
                {
                    bottom = Info.GetInt("VRBottom");
                }
            }
            left   -= 10;
            right  += 10;
            top    -= 10;
            bottom += 10;

            IMGEntry back = map.GetChild("back");

            foreach (IMGEntry b in back.childs.Values)
            {
                if (b.GetString("bS") != "")
                {
                    MapBack mb = new MapBack();

                    mb.Object = b;
                    if (b.GetInt("ani") == 0)
                    {
                        mb.Image = MapEditor.file.Directory.GetIMG("Back/" + b.GetString("bS") + ".img").GetChild("back/" + b.GetInt("no").ToString());
                    }
                    else
                    {
                        mb.Image = MapEditor.file.Directory.GetIMG("Back/" + b.GetString("bS") + ".img").GetChild("ani/" + b.GetInt("no").ToString() + "/0");
                    }
                    mb.ID = int.Parse(b.Name);

                    if (b.GetInt("ani") == 1)
                    {
                        mb.GenerateFrames();
                    }

                    backs.Add(mb);
                }
            }

            backs = backs.OrderBy(o => o.ID).ToList <MapBack>();

            IMGEntry elr = map.GetChild("ladderRope");

            if (elr != null)
            {
                foreach (IMGEntry lr in elr.childs.Values)
                {
                    MapLR mlr = new MapLR();

                    mlr.Object    = lr;
                    mlr.ID        = int.Parse(lr.Name);
                    mlr.s1        = new MapLRSide();
                    mlr.s2        = new MapLRSide();
                    mlr.s1.Object = lr;
                    mlr.s2.Object = lr;
                    mlr.s1.ID     = 1;
                    mlr.s2.ID     = 2;
                    mlr.s1.LR     = mlr;
                    mlr.s2.LR     = mlr;

                    lrs.Add(mlr);
                }
            }

            lrs = lrs.OrderBy(l => l.ID).ToList <MapLR>();

            IMGEntry eseats = map.GetChild("seat");

            if (eseats != null)
            {
                foreach (IMGEntry s in eseats.childs.Values)
                {
                    MapSeat ms = new MapSeat();

                    ms.Object = s;
                    ms.ID     = int.Parse(s.Name);

                    seats.Add(ms);
                }
            }

            seats = seats.OrderBy(l => l.ID).ToList <MapSeat>();


            IMGEntry eLifes = map.GetChild("life");

            if (eLifes != null)
            {
                foreach (IMGEntry l in eLifes.childs.Values)
                {
                    MapLife ml;
                    if (l.GetString("type") == "n")
                    {
                        ml = new MapNPC();
                    }
                    else
                    {
                        ml = new MapMob();
                    }

                    ml.Object = l;

                    if (ml is MapNPC)
                    {
                        IMGFile npc = MapEditor.npc.Directory.GetIMG(l.GetString("id") + ".img");
                        if (npc.GetChild("info/link") != null)
                        {
                            npc = MapEditor.npc.Directory.GetIMG(npc.GetString("info/link") + ".img");
                        }
                        ml.Image = npc.GetChild("stand/0");
                    }
                    else
                    {
                        IMGFile mob = MapEditor.mob.Directory.GetIMG(l.GetString("id") + ".img");
                        if (mob.GetChild("info/link") != null)
                        {
                            mob = MapEditor.mob.Directory.GetIMG(mob.GetString("info/link") + ".img");
                        }
                        ml.Image = mob.GetChild("stand/0");
                        if (ml.Image == null)
                        {
                            ml.Image = mob.GetChild("fly/0");
                        }
                    }
                    ml.Image = GetRealImage(ml.Image);
                    ml.ID    = int.Parse(l.Name);

                    lifes.Add(ml);
                }
            }

            lifes = lifes.OrderBy(l => l.ID).ToList <MapLife>();

            IMGEntry eReactors = map.GetChild("reactor");

            if (eReactors != null)
            {
                foreach (IMGEntry r in eReactors.childs.Values)
                {
                    MapReactor mr = new MapReactor();
                    mr.Object = r;

                    IMGFile reactor = MapEditor.reactor.Directory.GetIMG(r.GetString("id") + ".img");
                    if (reactor.GetChild("info/link") != null)
                    {
                        reactor = MapEditor.reactor.Directory.GetIMG(reactor.GetString("info/link") + ".img");
                    }
                    mr.Image = reactor.GetChild("0/0");
                    mr.Image = GetRealImage(mr.Image);
                    mr.ID    = int.Parse(r.Name);

                    reactors.Add(mr);
                }
            }

            lifes = lifes.OrderBy(l => l.ID).ToList <MapLife>();

            IMGEntry pImage = MapEditor.file.Directory.GetIMG("MapHelper.img").GetChild("portal/game/pv/0");

            IMGEntry ePortals = map.GetChild("portal");

            if (ePortals != null)
            {
                foreach (IMGEntry p in ePortals.childs.Values)
                {
                    MapPortal mp = new MapPortal();

                    mp.Object = p;
                    mp.ID     = int.Parse(p.Name);
                    mp.Image  = pImage;

                    portals.Add(mp);
                }
            }

            seats = seats.OrderBy(l => l.ID).ToList <MapSeat>();

            IMGEntry tooltipsE = map.GetChild("ToolTip");

            if (tooltipsE != null)
            {
                foreach (IMGEntry tte in tooltipsE.childs.Values)
                {
                    if (tte.Name.Contains("char"))
                    {
                        continue;
                    }
                    MapToolTip tt = new MapToolTip();

                    tt.Object     = tte;
                    tt.ID         = int.Parse(tte.Name);
                    tt.Image      = MapEditor.stringf.Directory.GetIMG("ToolTipHelp.img").GetChild("Mapobject").GetChild(int.Parse(MapEditor.Instance.MapID).ToString()).GetChild(tte.Name);
                    tt.c1         = new MapToolTipCorner();
                    tt.c1.Object  = tte;
                    tt.c1.type    = MapToolTipCornerType.TopLeft;
                    tt.c1.ToolTip = tt;
                    tt.c2         = new MapToolTipCorner();
                    tt.c2.Object  = tte;
                    tt.c2.type    = MapToolTipCornerType.TopRight;
                    tt.c2.ToolTip = tt;
                    tt.c3         = new MapToolTipCorner();
                    tt.c3.Object  = tte;
                    tt.c3.type    = MapToolTipCornerType.BottomLeft;
                    tt.c3.ToolTip = tt;
                    tt.c4         = new MapToolTipCorner();
                    tt.c4.Object  = tte;
                    tt.c4.type    = MapToolTipCornerType.BottomRight;
                    tt.c4.ToolTip = tt;

                    tooltips.Add(tt);
                }
            }
            IMGEntry clockEntry = map.GetChild("clock");

            if (clockEntry != null)
            {
                clock = new MapClock();

                clock.Object = clockEntry;
                clock.Image  = MapEditor.file.Directory.GetIMG("Obj/etc.img").GetChild("clock/fontTime");
            }
        }
Beispiel #5
0
        private void AddLine_Click(object sender, EventArgs e)
        {
            Point pos = new Point((int)(ShiftX / Zoom), (int)(ShiftY / Zoom));
            pos.X += Math.Min(splitContainer1.SplitterDistance, GraphicPanel.Width)/2 - Map.Instance.CenterX;
            pos.Y += Math.Min(splitContainer1.Height, GraphicPanel.Height) / 2 - Map.Instance.CenterY;
            if (EditFH.Checked)
            {
                IMGEntry gentry = new IMGEntry();
                gentry.Name = Map.Instance.GenerateFootholdsGroupID().ToString();
                IMGEntry entry = new IMGEntry();
                entry.Name = Map.Instance.GenerateFootholdID().ToString();
                entry.SetInt("x1", pos.X);
                entry.SetInt("y1", pos.Y);
                entry.SetInt("x2", pos.X + 20);
                entry.SetInt("y2", pos.Y);
                entry.SetInt("prev", 0);
                entry.SetInt("next", 0);
                gentry.Add(entry);
                IMGEntry layer = Map.Instance.map.GetChild("foothold/" + (int)Layer.Value);
                if(layer == null)
                {
                    layer = new IMGEntry();
                    layer.Name = ((int)Layer.Value).ToString();
                    Map.Instance.map.GetChild("foothold").Add(layer);
                }
                layer.Add(gentry);
                MapFootholds group = new MapFootholds(int.Parse(gentry.Name));
                group.Object = gentry;
                MapFoothold fh = new MapFoothold(int.Parse(entry.Name));
                fh.Object = entry;
                fh.s1 = new MapFootholdSide();
                fh.s2 = new MapFootholdSide();
                fh.s1.ID = 1;
                fh.s2.ID = 2;
                fh.s1.Object = entry;
                fh.s2.Object = entry;
                fh.s1.Foothold = fh;
                fh.s2.Foothold = fh;
                fh.Group = group;
                group.footholds.Add(fh.ID, fh);
                group.ToFix = true;
                Map.Instance.layers[(int)Layer.Value].footholdGroups.Add(group.ID, group);
            }
            if (EditLR.Checked)
            {
                IMGEntry entry = new IMGEntry();
                entry.SetInt("l", 1);
                entry.SetInt("uf", 1);
                entry.SetInt("x", pos.X);
                entry.SetInt("y1", pos.Y);
                entry.SetInt("y2", pos.Y + 20);
                entry.SetInt("page", (int)Layer.Value);
                MapLR lr = new MapLR();
                lr.Object = entry;
                lr.s1 = new MapLRSide();
                lr.s2 = new MapLRSide();
                lr.s1.ID = 1;
                lr.s2.ID = 2;
                lr.s1.Object = entry;
                lr.s2.Object = entry;
                lr.s1.LR = lr;
                lr.s2.LR = lr;
                Map.Instance.Add(lr);
            }
            else if (EditSeat.Checked)
            {
                IMGEntry entry = new IMGEntry();
                entry.SetVector(new WZVector(pos.X, pos.Y));

                MapSeat seat = new MapSeat();
                seat.Object = entry;

                Map.Instance.Add(seat);
                undo.Push(new ActionAdd(seat));
                redo.Clear();
            }
            else if (EditPortal.Checked)
            {
                IMGEntry entry = new IMGEntry();

                entry.SetString("pn", "sp");
                entry.SetInt("pt", 0);
                entry.SetInt("x", pos.X);
                entry.SetInt("y", pos.Y);
                entry.SetInt("tm", 999999999);
                entry.SetString("tn", "");

                MapPortal portal = new MapPortal();
                portal.Object = entry;

                Map.Instance.Add(portal);
                undo.Push(new ActionAdd(portal));
                redo.Clear();
            }
            else if (EditToolTip.Checked)
            {
                IMGEntry entry = new IMGEntry();
                entry.SetInt("x1", pos.X);
                entry.SetInt("y1", pos.Y);
                entry.SetInt("x2", pos.X + 40);
                entry.SetInt("y2", pos.Y + 20);
                MapToolTip tt = new MapToolTip();

                tt.Object = entry;
                tt.c1 = new MapToolTipCorner();
                tt.c1.Object = entry;
                tt.c1.type = MapToolTipCornerType.TopLeft;
                tt.c1.ToolTip = tt;
                tt.c2 = new MapToolTipCorner();
                tt.c2.Object = entry;
                tt.c2.type = MapToolTipCornerType.TopRight;
                tt.c2.ToolTip = tt;
                tt.c3 = new MapToolTipCorner();
                tt.c3.Object = entry;
                tt.c3.type = MapToolTipCornerType.BottomLeft;
                tt.c3.ToolTip = tt;
                tt.c4 = new MapToolTipCorner();
                tt.c4.Object = entry;
                tt.c4.type = MapToolTipCornerType.BottomRight;
                tt.c4.ToolTip = tt;
                Map.Instance.Add(tt);
                lock (StringLock)
                {
                    IMGEntry ToolTipsStrings = stringf.Directory.GetIMG("ToolTipHelp.img").GetChild("Mapobject").GetChild(int.Parse(MapEditor.Instance.MapID).ToString());
                    if (ToolTipsStrings == null)
                    {
                        ToolTipsStrings = new IMGEntry();
                        ToolTipsStrings.Name = int.Parse(MapID).ToString();
                        stringf.Directory.GetIMG("ToolTipHelp.img").GetChild("Mapobject").Add(ToolTipsStrings);
                    }
                    IMGEntry strings = new IMGEntry(tt.Object.Name);
                    strings.SetString("Title", "Title");
                    strings.SetString("Desc", "Desc");
                    ToolTipsStrings.Add(strings);
                    stringf.Directory.GetIMG("ToolTipHelp.img").ToSave = true;
                    tt.Image = strings;
                }
            }
            else if (EditClock.Checked)
            {
                if (Map.Instance.clock == null)
                {
                    IMGEntry entry = new IMGEntry();

                    entry.SetInt("x", pos.X - 100);
                    entry.SetInt("y", pos.Y - 100);
                    entry.SetInt("width", 200);
                    entry.SetInt("height", 200);

                    MapClock clock = new MapClock();
                    clock.Object = entry;

                    lock(MapLock)
                        Map.Instance.Add(clock);
                    undo.Push(new ActionAdd(clock));
                    redo.Clear();
                }
            }
        }
Beispiel #6
0
        public Map(IMGEntry map)
        {
            Instance = this;

            MapEditor.Instance.EditBack.Enabled = false;

            this.map = map;

            IMGEntry Info = map.GetChild("info");
            IMGEntry MiniMap = map.GetChild("miniMap");
            if (Info.GetChild("VRTop") != null)
            {
                VRLeft = Info.GetInt("VRLeft");
                VRTop = Info.GetInt("VRTop");
                VRRight = Info.GetInt("VRRight");
                VRBottom = Info.GetInt("VRBottom");
            }
            if (MiniMap == null)
            {
                if (VRTop == 0) throw new Exception("Unhandled Map");
                CenterX = -VRLeft + 50;
                CenterY = -VRTop + 50;
                Width = VRRight + CenterX + 100;
                Height = VRBottom + CenterY + 100;
            }
            else
            {
                CenterX = MiniMap.GetInt("centerX");
                CenterY = MiniMap.GetInt("centerY");
                Width = MiniMap.GetInt("width");
                Height = MiniMap.GetInt("height");
                if (VRTop == 0)
                {
                    VRLeft = -CenterX + 69;
                    VRTop = -CenterY + 86;
                    VRRight = Width - CenterX - 69;
                    VRBottom = Height - CenterY - 86;
                }
            }

            fly = Info.GetBool("swim") ? -1 : 1;

            int maxX = Int32.MinValue;
            int maxY = Int32.MinValue;
            int minX = Int32.MaxValue;
            int minY = Int32.MaxValue;

            for (int i = 0; i < 8; i++)
            {
                MapLayer layer = new MapLayer();

                IMGEntry layerEntry = map.GetChild(i.ToString());

                layer.layer = layerEntry;
                layer.info = layerEntry.GetChild("info");
                layer.ID = i;

                IMGEntry objects = layerEntry.GetChild("obj");
                foreach (IMGEntry o in objects.childs.Values)
                {
                    MapObject mo = new MapObject();

                    mo.Object = o;
                    mo.Image = GetRealImage(MapEditor.file.Directory.GetIMG("Obj/" + o.GetString("oS") + ".img").GetChild(o.GetString("l0") + "/" + o.GetString("l1") + "/" + o.GetString("l2") + "/0"));
                    mo.ID = int.Parse(o.Name);

                    mo.CreateFootholdDesignList();

                    footholdsGroups.Add(o.GetInt("zM"));

                    layer.objects.Add(mo);
                }

                layer.objects.Sort(CompareItems);

                layer.OrderObjects();

                IMGEntry tiles = layerEntry.GetChild("tile");
                foreach (IMGEntry t in tiles.childs.Values)
                {
                    MapTile mt = new MapTile();

                    mt.Object = t;
                    mt.Image = MapEditor.file.Directory.GetIMG("Tile/" + layer.info.GetString("tS") + ".img").GetChild(t.GetString("u") + "/" + t.GetInt("no").ToString());
                    //mt.Image = MapEditor.file.Directory.GetIMG("Tile/blackTile.img").GetChild(t.GetString("u") + "/0");
                    mt.ID = int.Parse(t.Name);

                    mt.SetDesign(t.GetString("u"));

                    mt.CreateFootholdDesignList();

                    footholdsGroups.Add(t.GetInt("zM"));

                    layer.tiles.Add(mt);
                }

                layer.tiles.Sort(CompareItems);

                layer.OrderTiles();

                IMGEntry footholds = map.GetChild("foothold/" + i.ToString());
                if (footholds != null)
                {
                    foreach (IMGEntry group in footholds.childs.Values)
                    {
                        //if (group.Name != "3") continue;
                        MapFootholds f = new MapFootholds(int.Parse(group.Name));

                        f.Object = group;

                        layer.footholdGroups.Add(f.ID, f);

                        foreach (IMGEntry fhe in group.childs.Values)
                        {
                            MapFoothold fh = new MapFoothold(int.Parse(fhe.Name));

                            fh.Object = fhe;
                            fh.Group = f;
                            fh.s1 = new MapFootholdSide();
                            fh.s2 = new MapFootholdSide();
                            fh.s1.Object = fhe;
                            fh.s2.Object = fhe;
                            fh.s1.ID = 1;
                            fh.s2.ID = 2;
                            fh.s1.Foothold = fh;
                            fh.s2.Foothold = fh;

                            if (fhe.GetInt("x1") < minX) minX = fhe.GetInt("x1");
                            if (fhe.GetInt("y1") < minY) minY = fhe.GetInt("y1");
                            if (fhe.GetInt("x2") < minX) minX = fhe.GetInt("x2");
                            if (fhe.GetInt("y2") < minY) minY = fhe.GetInt("y2");
                            if (fhe.GetInt("x1") > maxX) maxX = fhe.GetInt("x1");
                            if (fhe.GetInt("y1") > maxY) maxY = fhe.GetInt("y1");
                            if (fhe.GetInt("x2") > maxX) maxX = fhe.GetInt("x2");
                            if (fhe.GetInt("y2") > maxY) maxY = fhe.GetInt("y2");

                            f.footholds.Add(fh.ID, fh);
                        }
                    }

                }


                layers.Add(layer);
            }
            /*if (VRTop == 0)
            {
                if (maxX != Int32.MinValue)
                {
                    VRLeft = minX + 30;
                    VRRight = maxX - 30;
                    VRTop = minY - 300;
                    VRBottom = maxY + 10;
                }
            }*/
            left = minX + 30;
            right = maxX - 30;
            top = minY - 300;
            bottom = maxY + 10;
            if (Info.GetChild("VRLeft") != null)
            {
                if (left < Info.GetInt("VRLeft") + 20) left = Info.GetInt("VRLeft") + 20;
                if (right > Info.GetInt("VRRight")) right = Info.GetInt("VRRight");
                if (top < Info.GetInt("VRTop") + 65) top = Info.GetInt("VRTop") + 65;
                if (bottom > Info.GetInt("VRBottom")) bottom = Info.GetInt("VRBottom");
            }
            left -= 10;
            right += 10;
            top -= 10;
            bottom += 10;

            IMGEntry back = map.GetChild("back");
            foreach (IMGEntry b in back.childs.Values)
            {
                if (b.GetString("bS") != "")
                {
                    MapBack mb = new MapBack();

                    mb.Object = b;
                    if (b.GetInt("ani") == 0) mb.Image = MapEditor.file.Directory.GetIMG("Back/" + b.GetString("bS") + ".img").GetChild("back/" + b.GetInt("no").ToString());
                    else mb.Image = MapEditor.file.Directory.GetIMG("Back/" + b.GetString("bS") + ".img").GetChild("ani/" + b.GetInt("no").ToString() + "/0");
                    mb.ID = int.Parse(b.Name);

                    if (b.GetInt("ani") == 1) mb.GenerateFrames();

                    backs.Add(mb);
                }
            }

            backs = backs.OrderBy(o => o.ID).ToList<MapBack>();

            IMGEntry elr = map.GetChild("ladderRope");
            if (elr != null)
            {
                foreach (IMGEntry lr in elr.childs.Values)
                {
                    MapLR mlr = new MapLR();

                    mlr.Object = lr;
                    mlr.ID = int.Parse(lr.Name);
                    mlr.s1 = new MapLRSide();
                    mlr.s2 = new MapLRSide();
                    mlr.s1.Object = lr;
                    mlr.s2.Object = lr;
                    mlr.s1.ID = 1;
                    mlr.s2.ID = 2;
                    mlr.s1.LR = mlr;
                    mlr.s2.LR = mlr;

                    lrs.Add(mlr);
                }
            }

            lrs = lrs.OrderBy(l => l.ID).ToList<MapLR>();

            IMGEntry eseats = map.GetChild("seat");
            if (eseats != null)
            {
                foreach (IMGEntry s in eseats.childs.Values)
                {
                    MapSeat ms = new MapSeat();

                    ms.Object = s;
                    ms.ID = int.Parse(s.Name);

                    seats.Add(ms);
                }
            }

            seats = seats.OrderBy(l => l.ID).ToList<MapSeat>();


            IMGEntry eLifes = map.GetChild("life");
            if (eLifes != null)
            {
                foreach (IMGEntry l in eLifes.childs.Values)
                {
                    MapLife ml;
                    if (l.GetString("type") == "n")
                    {
                        ml = new MapNPC();
                    }
                    else
                    {
                        ml = new MapMob();
                    }

                    ml.Object = l;

                    if (ml is MapNPC)
                    {
                        IMGFile npc = MapEditor.npc.Directory.GetIMG(l.GetString("id") + ".img");
                        if (npc.GetChild("info/link") != null)
                        {
                            npc = MapEditor.npc.Directory.GetIMG(npc.GetString("info/link") + ".img");
                        }
                        ml.Image = npc.GetChild("stand/0");

                    }
                    else
                    {
                        IMGFile mob = MapEditor.mob.Directory.GetIMG(l.GetString("id") + ".img");
                        if (mob.GetChild("info/link") != null)
                        {
                            mob = MapEditor.mob.Directory.GetIMG(mob.GetString("info/link") + ".img");
                        }
                        ml.Image = mob.GetChild("stand/0");
                        if (ml.Image == null) ml.Image = mob.GetChild("fly/0");
                    }
                    ml.Image = GetRealImage(ml.Image);
                    ml.ID = int.Parse(l.Name);

                    lifes.Add(ml);
                }
            }

            lifes = lifes.OrderBy(l => l.ID).ToList<MapLife>();

            IMGEntry eReactors = map.GetChild("reactor");
            if (eReactors != null)
            {
                foreach (IMGEntry r in eReactors.childs.Values)
                {
                    MapReactor mr = new MapReactor();
                    mr.Object = r;

                    IMGFile reactor = MapEditor.reactor.Directory.GetIMG(r.GetString("id") + ".img");
                    if (reactor.GetChild("info/link") != null)
                    {
                        reactor = MapEditor.reactor.Directory.GetIMG(reactor.GetString("info/link") + ".img");
                    }
                    mr.Image = reactor.GetChild("0/0");
                    mr.Image = GetRealImage(mr.Image);
                    mr.ID = int.Parse(r.Name);

                    reactors.Add(mr);
                }
            }

            lifes = lifes.OrderBy(l => l.ID).ToList<MapLife>();

            IMGEntry pImage = MapEditor.file.Directory.GetIMG("MapHelper.img").GetChild("portal/game/pv/0");

            IMGEntry ePortals = map.GetChild("portal");
            if (ePortals != null)
            {
                foreach (IMGEntry p in ePortals.childs.Values)
                {
                    MapPortal mp = new MapPortal();

                    mp.Object = p;
                    mp.ID = int.Parse(p.Name);
                    mp.Image = pImage;

                    portals.Add(mp);
                }
            }

            seats = seats.OrderBy(l => l.ID).ToList<MapSeat>();

            IMGEntry tooltipsE = map.GetChild("ToolTip");
            if (tooltipsE != null)
            {
                foreach (IMGEntry tte in tooltipsE.childs.Values)
                {
                    if (tte.Name.Contains("char")) continue;
                    MapToolTip tt = new MapToolTip();

                    tt.Object = tte;
                    tt.ID = int.Parse(tte.Name);
                    tt.Image = MapEditor.stringf.Directory.GetIMG("ToolTipHelp.img").GetChild("Mapobject").GetChild(int.Parse(MapEditor.Instance.MapID).ToString()).GetChild(tte.Name);
                    tt.c1 = new MapToolTipCorner();
                    tt.c1.Object = tte;
                    tt.c1.type = MapToolTipCornerType.TopLeft;
                    tt.c1.ToolTip = tt;
                    tt.c2 = new MapToolTipCorner();
                    tt.c2.Object = tte;
                    tt.c2.type = MapToolTipCornerType.TopRight;
                    tt.c2.ToolTip = tt;
                    tt.c3 = new MapToolTipCorner();
                    tt.c3.Object = tte;
                    tt.c3.type = MapToolTipCornerType.BottomLeft;
                    tt.c3.ToolTip = tt;
                    tt.c4 = new MapToolTipCorner();
                    tt.c4.Object = tte;
                    tt.c4.type = MapToolTipCornerType.BottomRight;
                    tt.c4.ToolTip = tt;

                    tooltips.Add(tt);
                }
            }
            IMGEntry clockEntry = map.GetChild("clock");
            if (clockEntry != null)
            {
                clock = new MapClock();

                clock.Object = clockEntry;
                clock.Image = MapEditor.file.Directory.GetIMG("Obj/etc.img").GetChild("clock/fontTime");
            }

        }