//public static void ToggleSolidRopesProc() //{ // SolidRopes = !SolidRopes; // SubQueue.AddSubtitle("VRope Solid Ropes: " + (SolidRopes ? "[ON]" : "(OFF)"), 24); //} //public static void IncrementMinRopeLength(bool negativeIncrement = false, bool halfIncrement = false) //{ // float lengthIncrement = (halfIncrement ? 0.5f : 1.0f); // if (!negativeIncrement && MIN_ROPE_LENGTH < MAX_MIN_ROPE_LENGTH) // { // MIN_ROPE_LENGTH += lengthIncrement; // } // else if (negativeIncrement && MIN_ROPE_LENGTH > (MIN_MIN_ROPE_LENGTH + lengthIncrement)) // { // MIN_ROPE_LENGTH -= lengthIncrement; // } // SubQueue.AddSubtitle(166, "VRope Minimum Rope Length: " + MIN_ROPE_LENGTH.ToString("0.00"), 17); //} public static void MultipleObjectSelectionProc() { if (Game.Player.Exists() && !Game.Player.IsDead && Game.Player.CanControlCharacter && Game.Player.IsAiming && SelectedHooks.Count < MAX_SELECTED_HOOKS) { RaycastResult rayResult = Util.CameraRaycastForward(); HookPair selectedHook = new HookPair(RopeHook); Entity targetEntity = null; if (Util.GetEntityPlayerIsAimingAt(ref targetEntity) && targetEntity != null) { selectedHook.entity1 = targetEntity; selectedHook.hookPoint1 = rayResult.HitCoords; selectedHook.hookOffset1 = (selectedHook.hookPoint1 != Vector3.Zero ? (selectedHook.hookPoint1 - selectedHook.entity1.Position) : Vector3.Zero); SelectedHooks.Add(selectedHook); } } }
public static void ApplyForceObjectPairProc() { try { if (CanUseModFeatures()) { Entity targetEntity = null; RaycastResult rayResult = Util.CameraRaycastForward(); Entity playerEntity = Game.Player.Character; if (SelectedHooks.Count > 0) { bool hasTargetEntity = Util.GetEntityPlayerIsAimingAt(ref targetEntity); foreach (var hook in SelectedHooks) { if (hook.entity1 == null || hook.entity1 == playerEntity || hook.entity1 == targetEntity || targetEntity == playerEntity) { continue; } hook.entity2 = targetEntity; hook.hookPoint2 = rayResult.HitCoords; hook.hookOffset2 = Vector3.Zero; Vector3 entity1HookPosition = hook.entity1.Position + hook.hookOffset1; Vector3 entity2HookPosition = Vector3.Zero; if (hasTargetEntity && targetEntity != null) { hook.hookOffset2 = (hook.hookPoint2 != Vector3.Zero ? (hook.hookPoint2 - hook.entity2.Position) : Vector3.Zero); entity2HookPosition = hook.entity2.Position + hook.hookOffset2; } else if (rayResult.DitHitAnything) { entity2HookPosition = hook.hookPoint2; } else { continue; } ApplyForce(hook, entity1HookPosition, entity2HookPosition); } SelectedHooks.Clear(); return; } if (Util.GetEntityPlayerIsAimingAt(ref targetEntity)) { if (ForceHook.entity1 == null) { if (ForceHook.entity2 != null) { ForceHook.entity2 = null; } ForceHook.entity1 = targetEntity; //rayResult.HitEntity; ForceHook.hookPoint1 = rayResult.HitCoords; //targetEntity.Position; ForceHook.hookOffset1 = (ForceHook.hookPoint1 != Vector3.Zero ? (ForceHook.hookPoint1 - ForceHook.entity1.Position) : Vector3.Zero); } else if (ForceHook.entity2 == null) { ForceHook.entity2 = targetEntity; //rayResult.HitEntity; ForceHook.hookPoint2 = rayResult.HitCoords; //targetEntity.Position; ForceHook.hookOffset2 = (ForceHook.hookPoint2 != Vector3.Zero ? (ForceHook.hookPoint2 - ForceHook.entity2.Position) : Vector3.Zero); ForceHook.isEntity2AMapPosition = false; if (ForceHook.entity2 == ForceHook.entity1 || ForceHook.entity2 == playerEntity || ForceHook.entity1 == playerEntity) { ForceHook.entity1 = null; ForceHook.entity2 = null; } } if (ForceHook.entity1 != null && ForceHook.entity2 != null) { Vector3 entity2HookPosition = ForceHook.entity2.Position + ForceHook.hookOffset2; Vector3 entity1HookPosition = ForceHook.entity1.Position + ForceHook.hookOffset1; ApplyForce(entity1HookPosition, entity2HookPosition); ForceHook.entity1 = null; ForceHook.entity2 = null; } } else if (rayResult.DitHitAnything) { if ((ForceHook.entity1 != null && ForceHook.entity2 == null) && (FreeRangeMode || ForceHook.entity1.Position.DistanceTo(rayResult.HitCoords) < MaxHookCreationDistance)) { ForceHook.hookPoint2 = rayResult.HitCoords; ForceHook.hookOffset2 = Vector3.Zero; ForceHook.isEntity2AMapPosition = true; Vector3 entity1HookPosition = ForceHook.entity1.Position + ForceHook.hookOffset1; ApplyForce(entity1HookPosition, ForceHook.hookPoint2); } ForceHook.entity1 = null; ForceHook.entity2 = null; } else { ForceHook.entity1 = null; ForceHook.entity2 = null; } } } catch (Exception exc) { UI.Notify("VRope ApplyForceObjectPairProc Error:\n" + GetErrorMessage(exc)); } }
public static void AttachEntityToEntityProc(bool chainRope = false) { Entity playerEntity = Game.Player.Character; RaycastResult rayResult = Util.CameraRaycastForward(); Entity targetEntity = null; if (SelectedHooks.Count > 0) { bool hasTargetEntity = Util.GetEntityPlayerIsAimingAt(ref targetEntity); foreach (var hook in SelectedHooks) { if (hook.entity1 == null || hook.entity1 == playerEntity || hook.entity1 == targetEntity || targetEntity == playerEntity) { continue; } hook.entity2 = targetEntity; hook.hookPoint2 = rayResult.HitCoords; hook.hookOffset2 = Vector3.Zero; hook.ropeType = EntityToEntityHookRopeType; if (hasTargetEntity && targetEntity != null) { hook.hookOffset2 = (hook.hookPoint2 != Vector3.Zero ? (hook.hookPoint2 - hook.entity2.Position) : Vector3.Zero); hook.isEntity2AMapPosition = false; } else if (rayResult.DitHitAnything) { hook.isEntity2AMapPosition = true; } else { continue; } //if (!chainRope) CreateHook(hook, true, MinRopeLength); //else // CreateRopeChain(hook, true); } SelectedHooks.Clear(); return; } if (Util.GetEntityPlayerIsAimingAt(ref targetEntity)) { if (RopeHook.entity1 == null) { if (RopeHook.entity2 != null) { RopeHook.entity2 = null; } RopeHook.entity1 = targetEntity; RopeHook.hookPoint1 = rayResult.HitCoords; RopeHook.hookOffset1 = (RopeHook.hookPoint1 != Vector3.Zero ? (RopeHook.hookPoint1 - RopeHook.entity1.Position) : Vector3.Zero); } else if (RopeHook.entity2 == null) { RopeHook.entity2 = targetEntity; RopeHook.hookPoint2 = rayResult.HitCoords; RopeHook.hookOffset2 = (RopeHook.hookPoint2 != Vector3.Zero ? (RopeHook.hookPoint2 - RopeHook.entity2.Position) : Vector3.Zero); //Player attachment not allowed here. if (RopeHook.entity2 == RopeHook.entity1 || RopeHook.entity2 == playerEntity || RopeHook.entity1 == playerEntity) { RopeHook.entity1 = null; RopeHook.entity2 = null; } } if (RopeHook.entity1 != null && RopeHook.entity2 != null) { if (RopeHook.entity1.Position.DistanceTo(RopeHook.entity2.Position) < MaxHookCreationDistance) { RopeHook.ropeType = EntityToEntityHookRopeType; RopeHook.isEntity2AMapPosition = false; //if (!chainRope) CreateHook(RopeHook, true, MinRopeLength); //else // CreateRopeChain(ropeHook, false); } RopeHook.entity1 = null; RopeHook.entity2 = null; } } else if (rayResult.DitHitAnything) { if (RopeHook.entity1 != null && RopeHook.entity2 == null && //(ropeHook.entity1.Position.DistanceTo(rayResult.HitCoords) < MAX_HOOK_CREATION_DISTANCE)) (FreeRangeMode || RopeHook.entity1.Position.DistanceTo(rayResult.HitCoords) < MaxHookCreationDistance)) { RopeHook.hookPoint2 = rayResult.HitCoords; RopeHook.ropeType = EntityToEntityHookRopeType; RopeHook.isEntity2AMapPosition = true; RopeHook.hookOffset2 = Vector3.Zero; //if (!chainRope) CreateHook(RopeHook, true, MinRopeLength); //else // CreateRopeChain(ropeHook, true); } RopeHook.entity1 = null; RopeHook.entity2 = null; } else { RopeHook.entity1 = null; RopeHook.entity2 = null; } }