Esempio n. 1
0
        //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);
                }
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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;
            }
        }