Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
        }