Example #1
0
        public static int TracePath(Vector2 fromPos, Vector2 toPos, PlayerTeam team, bool fullCheck = false)
        {
            int     width      = 4;
            float   angle      = TwoPointAngle(fromPos, toPos);
            Vector2 diff       = toPos - fromPos;
            float   offsetX    = (float)Math.Cos(angle) * (width + 8);
            float   offsetY    = (float)Math.Sin(angle) * (width + 8);
            int     itCount    = (int)Math.Ceiling(diff.X / offsetX);
            Vector2 currentPos = fromPos;
            int     vision     = 0;

            for (int i = 0; i < itCount; i++)
            {
                Area      area    = new Area(currentPos.Y + width / 2.0f, currentPos.X - width / 2.0f, currentPos.Y - width / 2.0f, currentPos.X + width / 2.0f);
                IObject[] objList = GlobalGame.GetObjectsByArea(area);
                for (int j = 0; j < objList.Length; j++)
                {
                    string name = objList[j].Name;
                    if (name.StartsWith("Bg") || name.StartsWith("FarBg"))
                    {
                        continue;
                    }
                    if (IsPlayer(name))
                    {
                        TPlayer pl = GetPlayer((IPlayer)objList[j]);
                        if (pl.IsAlive() && !fullCheck)
                        {
                            if (pl.Team == team)
                            {
                                vision = 3;
                            }
                            else
                            {
                                return(vision);
                            }
                        }
                        else
                        {
                            vision = Math.Max(vision, 1);
                        }
                    }
                    else if (VisionObjects.ContainsKey(name))
                    {
                        vision = Math.Max(vision, VisionObjects[name]);
                    }
                    if (vision >= 3)
                    {
                        return(vision);
                    }
                }
                currentPos.X += offsetX;
                currentPos.Y += offsetY;
            }
            return(vision);
        }
Example #2
0
        public static TPlayer GetRandomPlayer(PlayerTeam team, bool isAlive)
        {
            List <TPlayer> players = new List <TPlayer>();

            for (int i = 0; i < PlayerList.Count; i++)
            {
                TPlayer player = PlayerList[i];
                if (player.Team == team && player.IsAlive() == isAlive)
                {
                    players.Add(player);
                }
            }
            if (players.Count == 0)
            {
                return(null);
            }
            int index = GlobalRandom.Next(0, players.Count);

            return(players[index]);
        }
Example #3
0
            public void CallReinforcement(TPlayer player)
            {
                Area area = GlobalGame.GetCameraArea();

                for (int i = 0; i < PlayerList.Count; i++)
                {
                    TPlayer pl = PlayerList[i];
                    if (pl != null && pl.IsActive() && pl != player && pl.Team == player.Team && !pl.IsAlive())
                    {
                        float   x           = GlobalRandom.Next((int)(area.Left + area.Width / 5), (int)(area.Right - area.Width / 5));
                        float   y           = WorldTop + 50;
                        IObject crate       = GlobalGame.CreateObject("SupplyCrate00", new Vector2(x, y));
                        IObject platf       = GlobalGame.CreateObject("Lift00A", new Vector2(x, y - 10));
                        IObject leftBorder  = GlobalGame.CreateObject("Lift00A", new Vector2(x - 10, y), (float)Math.PI / -2);
                        IObject rightBorder = GlobalGame.CreateObject("Lift00A", new Vector2(x + 10, y), (float)Math.PI / 2);
                        leftBorder.SetBodyType(BodyType.Dynamic);
                        rightBorder.SetBodyType(BodyType.Dynamic);
                        IObjectDestroyTargets destroy = (IObjectDestroyTargets)GlobalGame.CreateObject("DestroyTargets", new Vector2(x, y));
                        platf.SetMass(1e-3f);
                        leftBorder.SetMass(1e-3f);
                        rightBorder.SetMass(1e-3f);
                        IObjectWeldJoint joint = (IObjectWeldJoint)GlobalGame.CreateObject("WeldJoint", new Vector2(x, y));
                        joint.AddTargetObject(crate);
                        joint.AddTargetObject(platf);
                        joint.AddTargetObject(rightBorder);
                        joint.AddTargetObject(leftBorder);
                        destroy.AddTriggerDestroyObject(crate);
                        destroy.AddObjectToDestroy(joint);
                        destroy.AddObjectToDestroy(platf);
                        destroy.AddObjectToDestroy(leftBorder);
                        destroy.AddObjectToDestroy(rightBorder);
                        ObjectsToRemove.Add(destroy);
                        ObjectsToRemove.Add(platf);
                        ObjectsToRemove.Add(joint);
                        ObjectsToRemove.Add(leftBorder);
                        ObjectsToRemove.Add(rightBorder);
                        pl.Equipment.Clear();
                        pl.Armor.SetId(0);
                        pl.Revive(100, false, true, x, y);
                        player.AddExp(5, 5);
                    }
                }
            }