public static Vector2 projection(Vector2 source, Vector2 target) { var tmp = source.scalar(target) / target.normSquare(); var projection = target * tmp; return(projection); }
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); }
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()); }
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); }
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); }
public static float normSquare(this Vector2 self) { return((float)Math.Pow(Math.Abs(self.X), 2) + (float)Math.Pow(Math.Abs(self.Y), 2)); }
public static float magnitude(this Vector2 self) { return(Mathf.Sqrt(self.X * self.X + self.Y * self.Y)); }
public static float scalar(this Vector2 self, Vector2 other) { return(self.X * other.X + self.Y * other.Y); }
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); }