private void LoadPortal(NXNode node) { List<Portal> portals = new List<Portal>(); foreach (NXNode sub in node["portal"]) { Portal portal = new Portal(); portal.ID = int.Parse(sub.Name); portal.PortalName = sub["pn"].ValueOrDie<string>(); portal.PortalType = sub["pt"].GetInt(); portal.DestinationMapID = sub["tm"].GetInt(); portal.DestinationPortalName = sub["tn"].ValueOrDie<string>(); portal.X = sub["x"].GetInt(); portal.Y = sub["y"].GetInt(); portals.Add(portal); } Portals = portals.ToArray(); }
public void Move(Portal portal) { var field = MainGame.Instance.Field; if (field == null) return; Foothold fh = field.FindBelow(portal); int x = (fh.X1 + fh.X2) / 2; int y = (fh.Y1 + fh.Y2) / 2; Move(x, y); }
public Foothold FindBelow(Portal portal) { foreach (Foothold fh in Foothold) { if (fh.X1 <= portal.X && fh.X2 >= portal.X && !fh.Wall) { if (fh.Y1 != fh.Y2) { int calcY; double s1 = Math.Abs(fh.Y2 - fh.Y1); double s2 = Math.Abs(fh.X2 - fh.X1); double s4 = Math.Abs(portal.X - fh.X1); double alpha = Math.Atan(s2 / s1); double beta = Math.Atan(s1 / s2); double s5 = Math.Cos(alpha) * (s4 / Math.Cos(beta)); if (fh.Y2 < fh.Y1) { calcY = fh.Y1 - ((int)s5); } else { calcY = fh.Y1 + ((int)s5); } if (calcY >= portal.Y) { return fh; } } else if (fh.Y1 >= portal.Y) { return fh; } } } return null; }