示例#1
0
        public override void SimulateUpdateAlways_EnhancementEnable()
        {
            try
            {
                if (!effected)
                {
                    if (AddSpeedKey.IsPressed || AddSpeedKey.EmulationPressed())
                    {
                        Speed    += ChangeSpeedValue.Value;
                        lastSpeed = Speed;
                    }

                    if (ReduceSpeedKey.IsPressed || ReduceSpeedKey.EmulationPressed())
                    {
                        Speed    -= ChangeSpeedValue.Value;
                        lastSpeed = Speed;
                    }
                }
            }
            catch { }

            if (toggleToggle.IsActive)
            {
                if (effectKey.IsPressed || effectKey.EmulationPressed())
                {
                    effected = !effected;
                    setValue();
                }
            }
            else
            {
                if (effectKey.IsHeld || effectKey.EmulationHeld())
                {
                    effected = true;
                }
                else
                {
                    effected = false;
                }
                setValue();
            }

            void setValue()
            {
                Speed = effected ? 0f : lastSpeed;
                if (dragTogetherToggle.IsActive)
                {
                    var rigi = GetComponent <Rigidbody>();
                    rigi.drag        = effected ? 0f : defaultDrag;
                    rigi.angularDrag = effected ? 0f : defaultAngularDrag;
                }
            }
        }
        public override void SimulateFixedUpdate_EnhancementEnabled()
        {
            base.SimulateFixedUpdate_EnhancementEnabled();

            if (StatMaster.isClient)
            {
                return;
            }

            if (/*Hydraulic*/ HydraulicToggle.IsActive)
            {
                float?target = null;

                CalculationTarget();
                if (target != null)
                {
                    SuspensionMoveTowards((float)target, /*Feed*/ FeedSlider.Value);
                }

                void CalculationTarget()
                {
                    bool pressed = false;

                    if (ExtendKey.IsHeld || ExtendKey.EmulationHeld())
                    {
                        pressed = true;
                        target  = -/*ExtendLimit*/ ExtendLimitSlider.Value;
                    }

                    if (ShrinkKey.IsHeld || ShrinkKey.EmulationHeld())
                    {
                        pressed = true;
                        target  = /*RetractLimit*/ ShrinkLimitSlider.Value;
                    }

                    if (/*R2C*/ R2CToggle.IsActive && !pressed && ConfigurableJoint.targetPosition != Vector3.zero)
                    {
                        target = 0f;
                    }
                }
            }

            void SuspensionMoveTowards(float target, float feed, float delta = 0.005f)
            {
                RB.WakeUp();
                ConfigurableJoint.targetPosition = Vector3.MoveTowards(ConfigurableJoint.targetPosition, new Vector3(target, 0, 0), feed * delta);
            }
        }
        public override void SimulateUpdateAlways_EnhancementEnable()
        {
            if (fixedCameraController?.activeCamera?.CompositeTracker3 == smoothLook)
            {
                if (firstPerson)
                {
                    Camera activeCam = mouseOrbit.cam;
                    if (zoomControlModeIndex == 0)
                    {
                        if (Input.GetAxis("Mouse ScrollWheel") != 0f)
                        {
                            newCamFOV = Mathf.Clamp(activeCam.fieldOfView - Mathf.Sign(Input.GetAxis("Mouse ScrollWheel")) * zoomSpeed, 1, orgCamFOV);
                        }
                    }
                    else
                    {
                        if (ZoomInKey.IsHeld || ZoomInKey.EmulationHeld())
                        {
                            newCamFOV = Mathf.Clamp(activeCam.fieldOfView - zoomSpeed, 1, orgCamFOV);
                        }
                        if (ZoomOutKey.IsHeld || ZoomOutKey.EmulationHeld())
                        {
                            newCamFOV = Mathf.Clamp(activeCam.fieldOfView + zoomSpeed, 1, orgCamFOV);
                        }
                    }
                    if (activeCam.fieldOfView != newCamFOV)
                    {
                        activeCam.fieldOfView = Mathf.SmoothStep(activeCam.fieldOfView, newCamFOV, camFOVSmooth);
                    }
                }
                if (cameraLookAtToggled)
                {
                    if (!activateTimeRecorded)
                    {
                        switchTime           = Time.time;
                        activateTimeRecorded = true;
                    }
                    if (AutoLookAtKey.IsReleased || AutoLookAtKey.EmulationReleased())
                    {
                        autoSearch = !autoSearch;
                        switchTime = Time.time;
                    }
                    if (PauseTrackingKey.IsReleased || PauseTrackingKey.EmulationReleased())
                    {
                        pauseTracking = !pauseTracking;
                    }
                    if (LockTargetKey.IsReleased || LockTargetKey.EmulationReleased())
                    {
                        target = null;
                        if (autoSearch)
                        {
                            targetAquired = searchStarted = false;
                            CameraRadarSearch();
                        }
                        else
                        {
                            if (StatMaster.isClient)
                            {
                                blockColliders.Clear();
                                foreach (var player in Playerlist.Players)
                                {
                                    if (!player.isSpectator && player.machine.isSimulating)
                                    {
                                        blockColliders.AddRange(player.machine.SimulationMachine.GetComponentsInChildren <Collider>(true));
                                    }
                                }
                                foreach (var collider in blockColliders)
                                {
                                    collider.enabled = true;
                                }
                            }

                            // Aquire the target to look at
                            Ray          ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                            float        manualSearchRadius = 1.25f;
                            RaycastHit[] hits = Physics.SphereCastAll(ray, manualSearchRadius, Mathf.Infinity);
                            Physics.Raycast(ray, out RaycastHit rayHit);
                            if (hits.Length > 0)
                            {
                                for (int i = 0; i < hits.Length; i++)
                                {
                                    if (hits[i].transform.gameObject.GetComponent <BlockBehaviour>())
                                    {
                                        if ((hits[i].transform.position - fixedCamera.transform.position).magnitude >= safetyRadiusManual)
                                        {
                                            target        = hits[i].transform;
                                            pauseTracking = false;
                                            break;
                                        }
                                    }
                                }
                                if (target == null)
                                {
                                    for (int i = 0; i < hits.Length; i++)
                                    {
                                        if (hits[i].transform.gameObject.GetComponent <LevelEntity>())
                                        {
                                            if ((hits[i].transform.position - fixedCamera.transform.position).magnitude >= safetyRadiusManual)
                                            {
                                                target = hits[i].transform;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            if (target == null && rayHit.transform != null)
                            {
                                if ((rayHit.transform.position - fixedCamera.transform.position).magnitude >= safetyRadiusManual)
                                {
                                    target        = rayHit.transform;
                                    pauseTracking = false;
                                }
                            }
                            if (StatMaster.isClient)
                            {
                                foreach (var collider in blockColliders)
                                {
                                    collider.enabled = false;
                                }
                            }
                        }
                    }
                }
                if (fixedCameraController.activeCamera != fixedCamera)
                {
                    if (activateTimeRecorded)
                    {
                        activateTimeRecorded = false;
                    }
                }
            }
        }
        public override void SimulateUpdateAlways_EnhancementEnable()
        {
            if (gameObject.activeInHierarchy)
            {
                if (!GroupFireKey.Ignored)
                {
                    if ((GroupFireKey.IsHeld || GroupFireKey.EmulationHeld()) && !StatMaster.isClient)
                    {
                        if (!RocketsController.Instance.launchStarted)
                        {
                            StartCoroutine(RocketsController.Instance.LaunchRocketFromGroup(rocket.ParentMachine.PlayerID, GroupFireKey.GetKey(0)));
                        }
                    }
                }

                if (radar != null)
                {
                    if (!StatMaster.isClient)
                    {
                        radar.Switch = rocket.hasFired;
                    }

                    if (GuidedRocketToggle.IsActive)
                    {
                        //When toggle auto aim key is released, change the auto aim status
                        if (ManualOverrideKey.IsReleased || ManualOverrideKey.EmulationReleased())
                        {
                            if (radar.RadarType == RadarScript.RadarTypes.ActiveRadar)
                            {
                                //radar.meshRenderer.enabled = radar.canBeOverridden && ShowRadarToggle.IsActive && radar.Switch;
                                radar.DisplayRadarZone = radar.canBeOverridden && ShowRadarToggle.IsActive && radar.Switch;
                                //radar.meshCollider.enabled = radar.canBeOverridden && radar.Switch;
                                radar.canBeOverridden = !radar.canBeOverridden;
                                if (!radar.canBeOverridden)
                                {
                                    radar.ClearTarget(false);
                                }
                            }
                        }

                        if (LockTargetKey.IsPressed || LockTargetKey.EmulationPressed())
                        {
                            if (radar.RadarType == RadarScript.RadarTypes.ActiveRadar)
                            {
                                if (radar.canBeOverridden)
                                {
                                    radar.SetTargetManual();
                                }
                                else
                                {
                                    //保留重新搜索目标的能力
                                    radar.ClearTarget(false);
                                }
                            }
                        }
                    }
                }

                if (rocket.hasFired)
                {
                    //Let rocket controller know the rocket is fired
                    SendRocketFired();

                    if (!rocket.hasExploded)
                    {
                        if (GuidedRocketToggle.IsActive)
                        {
                            //Activate aerodynamic effect
                            guideController.enableAerodynamicEffect = StabilityToggle.IsActive;

                            //Record the launch time for the guide delay
                            if (!launchTimeRecorded)
                            {
                                launchTimeRecorded = true;
                                launchTime         = Time.time;
                            }

                            //Rocket can be triggered after the time elapsed after firing is greater than guide delay
                            if (Time.time - launchTime >= GuideDelaySlider.Value + 0.15f && TorqueSlider.Value > 0)
                            {
                                guideController.Switch = true;
                            }

                            //Proximity fuse behaviour
                            if (ProximityFuzeToggle.IsActive)
                            {
                                if (radar.TargetDistance <= ProximityFuzeRangeSlider.Value + 1f)
                                {
                                    StartCoroutine(RocketExplode());
                                }
                            }
                        }
                    }
                }

                if (rocket.hasExploded && !rocketExploMsgSent)
                {
                    Destroy(radarObject);
                    Destroy(guideObject);

                    if (HighExploToggle.IsActive)
                    {
                        StartCoroutine(RocketExplode());
                    }

                    try
                    {
                        if (RocketsController.Instance.playerGroupedRockets.TryGetValue(StatMaster.isMP ? rocket.ParentMachine.PlayerID : 0, out Dictionary <KeyCode, HashSet <TimedRocket> > groupedRockets))
                        {
                            if (groupedRockets.TryGetValue(GroupFireKey.GetKey(0), out HashSet <TimedRocket> rockets))
                            {
                                rockets.Remove(rocket);
                            }
                        }
                    }
                    catch { }
                    rocketExploMsgSent = true;
                }

                if (!NoSmokeToggle.IsActive)
                {
                    var em = smokeTrail.emission;
                    var r  = em.rate;
                    r.constant = /*TrailSmokeEmissionConstant*/ trailSmokePropertise.EmissionConstant;
                    em.rate    = r;
                    smokeTrail.startLifetime = /*TrailSmokeLifetime*/ trailSmokePropertise.Lifetime;
                    smokeTrail.startSize     = /*TrailSmokeSize*/ trailSmokePropertise.Size;
                }
            }
        }