示例#1
0
        public static Vector2 projection(Vector2 source, Vector2 target)
        {
            var tmp        = source.scalar(target) / target.normSquare();
            var projection = target * tmp;

            return(projection);
        }
示例#2
0
        public static Vector2 PredictedPosition2d(this Data_PlayerInfo playerInfo, float time)
        {
            if (playerInfo.ID.Index == 0 && playerInfo.ID.Generation == 0)
            {
                return(Vector2.Zero);
            }
            Vector2 position = playerInfo.ID.ToGame().Get("Position");
            Vector2 velocity = playerInfo.ID.ToGame().Get("Velocity");

            return(position + velocity.Normalized * time);
        }
示例#3
0
        public static Vector3 PredictedPosition(this Data_PlayerInfo playerInfo, float time)
        {
            if (playerInfo.ID.Index == 0 && playerInfo.ID.Generation == 0)
            {
                return(new Vector3(0, 0, 0));
            }
            Vector2 position          = playerInfo.ID.ToGame().Get("Position");
            Vector2 velocity          = playerInfo.ID.ToGame().Get("Velocity");
            Vector2 predictedPosition = position + velocity.Normalized * time;

            return(new Vector3(predictedPosition.X, 0, predictedPosition.Y));
            //return Loader.Controller.UnityMain.GetObjectPosition(playerInfo.ID.ToGame());
        }
示例#4
0
        public static Vector2 position(this GameObjectId self, float time = 0f)
        {
            //real-time
            Vector2 pos = refs?.client?.GetState(self, "Position", false) ?? default;

            if (time <= 0)
            {
                return(pos);
            }

            //prediction
            Vector2 velocity = refs?.client?.GetState(self, "Velocity", false) ?? default;

            return(pos + velocity.Normalized * time);
        }
示例#5
0
 public Boolean InDanger(Data_PlayerInfo player)
 {
     foreach (ActiveObject current in ViewState.ActiveObjects.Values)
     {
         if (LocalPlayer.Team == current.Team)
         {
             continue;
         }
         Vector2 StartPosition = current.ObjectId.Get("StartPosition");
         if (StartPosition == default(GameValue))
         {
             Vector2 TargetsHit = current.ObjectId.Get("TargetsHit");
             if (TargetsHit == default(GameValue))
             {
                 continue;
             }
             var owner          = ((GameObjectId)current.ObjectId.Get("Owner"));
             var attackingEnemy = EnemyTeamData.FirstOrDefault(t => t.ID.ToGame() == owner);
             if (Vector3.Distance(LocalPlayer.ID.ToGame().Position(), attackingEnemy.ID.ToGame().Position()) < 2.5f)
             {
                 return(true);
             }
         }
         Vector2 Direction   = current.ObjectId.Get("Direction");
         Single  Range       = current.ObjectId.Get("Range");
         Single  Thickness   = current.ObjectId.Get("SpellCollisionRadius");
         Vector2 EndPosition = StartPosition + Direction.Normalized * Range;
         Boolean intersect   =
             MathCore.GeometryMath.CircleVsThickLine(
                 new Vector2(player.ID.ToGame().Position().x, player.ID.ToGame().Position().z), 0.6f,
                 StartPosition, EndPosition, Thickness, true);
         if (intersect)
         {
             return(true);
         }
     }
     return(false);
 }
示例#6
0
 public static float normSquare(this Vector2 self)
 {
     return((float)Math.Pow(Math.Abs(self.X), 2) + (float)Math.Pow(Math.Abs(self.Y), 2));
 }
示例#7
0
 public static float magnitude(this Vector2 self)
 {
     return(Mathf.Sqrt(self.X * self.X + self.Y * self.Y));
 }
示例#8
0
 public static float scalar(this Vector2 self, Vector2 other)
 {
     return(self.X * other.X + self.Y * other.Y);
 }
示例#9
0
        public Vector3 GetClosestTargetPos(Boolean ally, Boolean enemy, Boolean orb, Single time, out Single distance, out Data_PlayerInfo player)
        {
            //orb = false;
            player = default(Data_PlayerInfo);
            Vector3 closest = Vector3.zero;

            //lane plane = new Plane(Vector3.up, Vector3.zero);
            //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //if (plane.Raycast(ray, out distance))
            {
                Vector3 mousePosition = LocalPlayer.ID.ToGame().Position();// ray.GetPoint(distance);
                distance = Single.MaxValue;
                List <Data_PlayerInfo> search = new List <Data_PlayerInfo>();
                if (ally)
                {
                    search.AddRange(LocalTeamData);
                }
                if (enemy)
                {
                    search.AddRange(EnemyTeamData);
                }
                //object ListModelStateList = ListModelStateListField.GetValue(GameClientObject);
                //ModelState[] modelStates = (ModelState[])ModelStateListField.GetValue(ListModelStateList);
                var p = (CollisionLibrary.Pathfinder)GameClientObject.GetField("Pathfinding");
                foreach (Data_PlayerInfo tar in search)
                {
                    if (tar.IsDead ||
                        tar.Health.Value.Current == 0 ||
                        (tar.Shield > 4 && distance != Single.MaxValue)
                        // || !modelStates.FirstOrDefault(m => m.Id == tar.ID.ToGame()).IsModelVisible
                        || (!tar.AllyTeam && AvoidTargetting(tar)) ||
                        tar.LocalPlayer ||
                        tar.ID.ToGame().Get("IsUnHitable"))
                    {
                        continue;
                    }

                    var v      = LocalPlayer.PredictedPosition2d(0);
                    var cansee = p.CanSee(mousePosition.ToGameplayVector2(), tar.PredictedPosition2d(0), 0.5f);
                    if (!cansee)
                    {
                        continue;
                    }
                    Single newDistance = Vector3.Distance(mousePosition, tar.ID.ToGame().Position());
                    if (newDistance < distance)
                    {
                        player   = tar;
                        distance = newDistance;
                        closest  = tar.PredictedPosition(time);
                    }
                }
                if (orb)
                {
                    foreach (ActiveObject current in ViewState.ActiveObjects.Values)
                    {
                        if (current.TypeId.ToString(GameData).Contains("RiteOf") && current.TypeId.ToString(GameData).EndsWith("Object"))
                        {
                            Vector2 orbPos      = current.ObjectId.Get("Position");
                            Vector3 orbPos3d    = new Vector3(orbPos.X, 0, orbPos.Y);
                            Single  newDistance = Vector3.Distance(mousePosition, orbPos3d);
                            if (newDistance < distance)
                            {
                                player = new Data_PlayerInfo()
                                {
                                    ID = new UIGameObjectId(current.ObjectId.Index, current.ObjectId.Generation)
                                };
                                distance = newDistance;
                                closest  = orbPos3d;
                            }
                            continue;
                        }
                    }
                }
                if (ViewState.ActiveObjects.Values.Count(o => o.TypeId.ToString(GameData).Contains("Training")) > 0)
                {
                    foreach (ActiveObject current in ViewState.ActiveObjects.Values)
                    {
                        if (current.TypeId.ToString(GameData).Contains("Arena") && current.TypeId.ToString(GameData).Contains("Dummy"))
                        {
                            if (current.ObjectId.Get("Health") <= 0.0f)
                            {
                                continue;
                            }
                            Vector2 orbPos      = current.ObjectId.Get("Position");
                            Vector3 orbPos3d    = new Vector3(orbPos.X, 0, orbPos.Y);
                            Single  newDistance = Vector3.Distance(mousePosition, orbPos3d);
                            if (newDistance < distance)
                            {
                                player = new Data_PlayerInfo()
                                {
                                    ID = new UIGameObjectId(current.ObjectId.Index, current.ObjectId.Generation)
                                };
                                if (AvoidTargetting(player))
                                {
                                    continue;
                                }
                                distance = newDistance;
                                closest  = orbPos3d;
                            }
                        }
                    }
                }
            }
            return(closest);
        }