예제 #1
0
 public void Fix()
 {
     if (Object.GetInt("y1") > Object.GetInt("y2"))
     {
         MapFootholds.SwapInt(Object.GetChild("y1"), Object.GetChild("y2"));
         int temp = s1.ID;
         s1.ID = s2.ID;
         s2.ID = temp;
     }
 }
예제 #2
0
 public void Fix()
 {
     if (Object.GetInt("x1") > Object.GetInt("x2"))
     {
         MapFootholds.SwapInt(Object.GetChild("x1"), Object.GetChild("x2"));
         Swap(MapToolTipCornerType.TopLeft, MapToolTipCornerType.TopRight);
         Swap(MapToolTipCornerType.BottomLeft, MapToolTipCornerType.BottomRight);
     }
     if (Object.GetInt("y1") > Object.GetInt("y2"))
     {
         MapFootholds.SwapInt(Object.GetChild("y1"), Object.GetChild("y2"));
         Swap(MapToolTipCornerType.TopLeft, MapToolTipCornerType.BottomLeft);
         Swap(MapToolTipCornerType.TopRight, MapToolTipCornerType.BottomRight);
     }
 }
예제 #3
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");
            }
        }
예제 #4
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();
                }
            }
        }
예제 #5
0
 private void LinkToFH_Click(object sender, EventArgs e)
 {
     if (LinkToFH.Checked)
     {
         LinkToFH.Checked = false;
         Layer.Enabled = true;
         EditMode.Enabled = true;
         EditTile.Enabled = true;
         EditObj.Enabled = true;
         EditLife.Enabled = true;
         EditFH.Enabled = true;
         EditLR.Enabled = true;
         EditSeat.Enabled = true;
         EditPortal.Enabled = true;
         EditReactor.Enabled = true;
         EditToolTip.Enabled = true;
         EditClock.Enabled = true;
         Open.Enabled = true;
         if (selectedGroup != null)
         {
             selectedGroup.Selected = false;
             selectedGroup = null;
         }
     }
     else
     {
         if(selected.Count > 0){
             Layer.Enabled = false;
             LinkToFH.Checked = true;
             EditMode.Enabled = false;
             EditTile.Enabled = false;
             EditObj.Enabled = false;
             EditLife.Enabled = false;
             EditFH.Enabled = false;
             EditLR.Enabled = false;
             EditSeat.Enabled = false;
             EditPortal.Enabled = false;
             EditReactor.Enabled = false;
             EditToolTip.Enabled = false;
             EditClock.Enabled = false;
             Open.Enabled = false;
             if (EditObj.Checked || EditTile.Checked)
             {
                 int zM = -1;
                 foreach (MapItem s in selected)
                 {
                     int nzM = s.Object.GetInt("zM");
                     if (zM != -1 && zM != nzM)
                     {
                         zM = -1;
                         break;
                     }
                     if (zM == -1)
                     {
                         zM = nzM;
                     }
                 }
                 if (zM != -1 && Map.Instance.layers[(int)Layer.Value].footholdGroups.Contains(zM))
                 {
                     selectedGroup = (MapFootholds)Map.Instance.layers[(int)Layer.Value].footholdGroups[zM];
                     selectedGroup.Selected = true;
                 }
             }
         }
     }
 }
예제 #6
0
 private MapFootholds CreateFootholds(List<List<MapFootholdDesign>> footholdslist)
 {
     IMGEntry gentry = new IMGEntry();
     gentry.Name = Map.Instance.GenerateFootholdsGroupID().ToString();
     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;
     Map.Instance.layers[(int)Layer.Value].footholdGroups.Add(group.ID, group);
     foreach (List<MapFootholdDesign> footholds in footholdslist)
     {
         List<IMGEntry> fhs = new List<IMGEntry>();
         for (int i = 0; i < footholds.Count - 1; i++)
         {
             IMGEntry entry = new IMGEntry();
             entry.Name = Map.Instance.GenerateFootholdID().ToString();
             entry.SetInt("x1", footholds[i].GetX() - Map.Instance.CenterX);
             entry.SetInt("y1", footholds[i].GetY() - Map.Instance.CenterY);
             entry.SetInt("x2", footholds[i + 1].GetX() - Map.Instance.CenterX);
             entry.SetInt("y2", footholds[i + 1].GetY() - Map.Instance.CenterY);
             if (i == 0)
             {
                 entry.SetInt("prev", 0);
             }
             else
             {
                 entry.SetInt("prev", int.Parse(fhs[i - 1].Name));
                 fhs[i - 1].SetInt("next", int.Parse(entry.Name));
             }
             entry.SetInt("next", 0);
             gentry.Add(entry);
             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);
             fhs.Add(entry);
         }
     }
     return group;
 }
예제 #7
0
        private void GraphicPanel_OnMouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (DrawMode.Checked)
                {
                    createdCurve = new MapCurve();
                    createdCurve.AddPoint(e.Location);
                    curves.Add(createdCurve);
                }
                else
                {
                    if (LinkToFH.Checked)
                    {
                        if (EditTile.Checked || EditObj.Checked)
                        {
                            MapFootholds group = Map.Instance.layers[(int)Layer.Value].GetFootholdGroupAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (group != null)
                            {
                                foreach (MapItem s in selected)
                                {
                                    s.Object.SetInt("zM", group.ID);
                                    if (s is ICached) (s as ICached).Cache();
                                }
                                if (selectedGroup != null)
                                {
                                    selectedGroup.Selected = false;
                                }
                                selectedGroup = group;
                                selectedGroup.Selected = true;
                            }
                        }
                        return;
                    }
                    else if (FootholdsCreator.Checked)
                    {
                        if (EditFH.Checked)
                        {
                            MapFootholdDesign fh = Map.Instance.layers[(int)Layer.Value].GetFootholdDesignAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (fh != null)
                            {
                                if (!FHCreating.Contains(fh))
                                {
                                    FHCreating.Add(fh);
                                }
                            }
                            else
                            {
                                if (FHCreating.Count > 0)
                                {
                                    CreateFootholds(FHCreating);
                                    FHCreating.Clear();
                                }
                            }
                        }
                        else if (EditLR.Checked)
                        {
                            MapLRDesign lr = Map.Instance.layers[(int)Layer.Value].GetLRDesignAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (lr != null && !LRCreating.Contains(lr))
                            {
                                if (LRCreating.Count > 0)
                                {
                                    if (LRCreating[0].GetX() == lr.GetX() && LRCreating[0].ladder == lr.ladder)
                                    {
                                        LRCreating.Add(lr);
                                        CreateLRs(LRCreating);
                                        LRCreating.Clear();
                                    }
                                }
                                else
                                {
                                    LRCreating.Add(lr);
                                }
                            }
                            else
                            {
                                LRCreating.Clear();
                            }
                        }
                        return;
                    }
                    //GraphicPanel.Focus();
                    if (EditMode.Checked && Map.Instance != null && !dragged)
                    {
                        if (EditTile.Checked || EditObj.Checked || EditLife.Checked || EditReactor.Checked || EditBack.Checked)
                        {
                            if (Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom)) == null)
                            {
                                draggingSelection = true;
                                selectingX = e.X;
                                selectingY = e.Y;
                                if (!CtrlPressed && !ShiftPressed)
                                {
                                    Deselect();
                                }
                            }
                            else
                            {
                                if (CtrlPressed && selected.Count > 0)
                                {
                                    MapItem at = Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (at != null)
                                    {
                                        if (selected.Contains(at))
                                        {
                                            selected.Remove(at);
                                            at.Selected = false;
                                            if (selected.Count == 0) Deselect();
                                            else if (selected.Count == 1 && EditObj.Checked) toolStripStatusLabel1.Text = "Z: " + selected[0].Object.GetInt("z");

                                        }
                                        else
                                        {
                                            selected.Add(at);
                                            at.Selected = true;
                                            toolStripStatusLabel1.Text = "";
                                        }
                                    }
                                }
                                else
                                {
                                    if (EditTile.Checked && selected.Count == 1 && selected[0].IsPointInArea((int)(e.X / Zoom), (int)(e.Y / Zoom)))
                                    {
                                        dragged = true;
                                        selectedDragged = selected[0];
                                        sX = e.X;
                                        sY = e.Y;
                                    }
                                    else
                                    {
                                        MapItem at = Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                        if (selected.Count > 1 && at != null && (selected.Contains(at)))
                                        {
                                            dragged = true;
                                            selectedDragged = at;
                                            sX = e.X;
                                            sY = e.Y;
                                        }
                                        else
                                        {
                                            Deselect();
                                            if (at != null)
                                            {
                                                selected.Add(at);
                                                at.Selected = true;
                                                if (EditObj.Checked)
                                                    toolStripStatusLabel1.Text = "Z: " + at.Object.GetInt("z");
                                            }
                                        }
                                    }
                                }
                            }
                            if (EditTile.Checked) Map.Instance.layers[(int)Layer.Value].OrderTiles();
                        }
                        else if (EditFH.Checked)
                        {
                            if (Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom)).Count == 0)
                            {
                                draggingSelection = true;
                                selectingX = e.X;
                                selectingY = e.Y;
                                if (!CtrlPressed && !ShiftPressed)
                                {
                                    Deselect();
                                }
                            }
                            else
                            {
                                if (CtrlPressed && selected.Count > 0)
                                {
                                    List<MapFootholdSide> list = Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (list.Count > 0)
                                    {
                                        if (selected.Contains(list[0]))
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Remove(f);
                                                f.Selected = false;
                                            }
                                            if (selected.Count == 0) Deselect();

                                        }
                                        else
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Add(f);
                                                f.Selected = true;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    List<MapFootholdSide> list = Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (selected.Count > 2 && list.Count > 0 && selected.Contains(list[0]))
                                    {
                                        dragged = true;
                                        selectedDragged = list[0];
                                        if (list.Count > 1)
                                            selectedDragged2 = list[1];
                                        sX = e.X;
                                        sY = e.Y;
                                    }
                                    else
                                    {
                                        Deselect();
                                        if (list.Count > 0)
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Add(f);
                                                f.Selected = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (EditLR.Checked)
                        {
                            MapLRSide lr = Map.Instance.layers[(int)Layer.Value].GetLRSideAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (lr != null && selected.Contains(lr))
                            {
                                dragged = true;
                                selectedDragged = lr;
                                sX = e.X;
                                sY = e.Y;
                            }
                            else
                            {
                                Deselect();
                                if (lr != null)
                                {
                                    selected.Add(lr);
                                    lr.Selected = true;
                                }
                            }
                        }
                        else if (EditSeat.Checked || EditPortal.Checked || EditToolTip.Checked || EditClock.Checked)
                        {
                            MapItem item = null;

                            item = Map.Instance.GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));

                            if (item != null && selected.Contains(item))
                            {
                                dragged = true;
                                selectedDragged = item;
                                sX = e.X;
                                sY = e.Y;
                            }
                            else
                            {
                                Deselect();
                                if (item != null)
                                {
                                    selected.Add(item);
                                    item.Selected = true;
                                }
                            }
                        }
                    }
                    if (selected.Count > 0)
                    {
                        bool clickedIn = false;
                        foreach (MapItem s in selected)
                        {
                            if (s.IsPointInArea((int)(e.X / Zoom), (int)(e.Y / Zoom)))
                            {
                                clickedIn = true;
                            }
                        }
                        if (clickedIn)
                        {
                            dragged = true;
                            sX = e.X;
                            sY = e.Y;
                            lastX = e.X;
                            lastY = e.Y;
                        }
                    }
                    if (selected.Count == 1)
                    {
                        toolStripStatusLabel1.Text = selected[0].ToString();
                    }
                }

                if (scrolling)
                {
                    scrolling = false;
                    Cursor = Cursors.Default;
                }
            }
            else if (e.Button == MouseButtons.Middle)
            {
                wheelClicked = true;
                scrolling = true;
                scrollingDragged = false;
                scrollPosition = new Point(e.X - ShiftX, e.Y - ShiftY);
                if (vScrollBar1.Visible && hScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMove2D;
                }
                else if (vScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMoveVert;
                }
                else if (hScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMoveHoriz;
                }
                else
                {
                    scrolling = false;
                }
            }
        }
예제 #8
0
파일: Map.cs 프로젝트: smolson4/wzmapeditor
        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");
            }

        }