Exemple #1
0
    public void ServerOnPlayerSwitchGrenadeType(uint playerId)
    {
        var playerObjectComponent = PlayerObjectSystem.Instance.FindPlayerObjectComponent(playerId);

        if (playerObjectComponent == null)
        {
            return;
        }

        var grenadeSlots = playerObjectComponent.State.GrenadeSlots;

        for (var iOffset = 1; iOffset < grenadeSlots.Length; iOffset++)
        {
            var grenadeSlotIndex = MathfExtensions.Wrap(
                playerObjectComponent.State.CurrentGrenadeSlotIndex + iOffset,
                0,
                grenadeSlots.Length - 1
                );
            var grenadeSlot = grenadeSlots[grenadeSlotIndex];

            if (grenadeSlot.GrenadeCount > 0)
            {
                playerObjectComponent.State.CurrentGrenadeSlotIndex = (byte)grenadeSlotIndex;
            }
        }
    }
        public virtual IEnumerator MoveRoutine(List <Bullet> bullets)
        {
            List <BulletEntry> bulletEntries = new List <BulletEntry>();

            foreach (Bullet bullet in bullets)
            {
                BulletEntry bulletEntry = new BulletEntry(bullet);
                if (bulletEntry.yMoveDirection != 0)
                {
                    Retarget(bullet, Vector3.up * bulletEntry.yMoveDirection);
                    bulletEntries.Add(bulletEntry);
                }
            }
            while (bulletEntries.Count > 0)
            {
                for (int i = 0; i < bulletEntries.Count; i++)
                {
                    BulletEntry bulletEntry = (BulletEntry)bulletEntries[i];
                    if (MathfExtensions.Sign(GameManager.GetSingleton <PlayerMouse>().trs.position.y - bulletEntry.bullet.trs.position.y) != bulletEntry.yMoveDirection)
                    {
                        bulletEntries.RemoveAt(i);
                        i--;
                    }
                }
                yield return(new WaitForEndOfFrame());
            }
            foreach (Bullet bullet in bullets)
            {
                Retarget(bullet);
            }
        }
Exemple #3
0
        public static Vector2 GetVelocity(SteeringAgent2D agent, float feelerLength)
        {
            var feelers = CreateFeelers(agent, feelerLength);

            Vector2 steeringForce = Vector2.zero;


            foreach (var feeler in feelers)
            {
                int     currentWallIndex = 0;
                int     closestWallIndex = -1;
                float   distToThisIP     = 0f;
                float   distToClosestIP  = float.MaxValue;
                Vector2 point            = Vector2.zero;
                Vector2 closestIP        = Vector2.zero;

                Vector2 feelerSteeringForce = Vector2.zero;

                foreach (var wall in World2D.Instance.Walls)
                {
                    try {
                        Vector2 feelerFrom = agent.transform.position;
                        Vector2 feelerTo   = feeler;
                        //if (MathfExtensions.SegmentIntersection2D(feelerFrom, feelerTo, wall.From, wall.To, out distToThisIP, out point)) {
                        if (MathfExtensions.LineSegementsIntersect(feelerFrom, feelerTo, wall.From, wall.To, out point))
                        {
                            distToThisIP = (feelerFrom - point).magnitude;
                            if (distToThisIP < distToClosestIP)
                            {
                                distToClosestIP  = distToThisIP;
                                closestWallIndex = currentWallIndex;
                                closestIP        = point;
                            }
                        }
                        currentWallIndex++;
                    } catch {
                        //Do nothing
                    }
                } //Next wall

                if (closestWallIndex >= 0)
                {
                    Vector2 overShoot       = (feeler - closestIP) * agent.Rigidbody2D.velocity.magnitude;
                    var     closestWall     = World2D.Instance.Walls[closestWallIndex];
                    var     feelerDirection = feeler - agent.Rigidbody2D.position;
                    if (Vector2.Angle(feelerDirection, closestWall.Normal) > 90)
                    {
                        feelerSteeringForce = closestWall.Normal * overShoot.magnitude;
                    }
                    else
                    {
                        feelerSteeringForce = closestWall.InverseNormal * overShoot.magnitude;
                    }
                }

                steeringForce += feelerSteeringForce;
            } //Next feeler

            return(steeringForce);
        }
Exemple #4
0
        private AnimationCurve CreateNewEasingCurve(Ease ease, int timesteps)
        {
            if (timesteps <= 0)
            {
                return(null);
            }

            EaseFunction easeFunction = EaseManager.ToEaseFunction(ease);
            var          curve        = new AnimationCurve();

            // Adds all the required keys
            for (int i = 0; i < timesteps; i++)
            {
                float time   = MathfExtensions.Remap(i, 0, timesteps, 0, Duration);
                var   result = EaseManager.Evaluate(ease, easeFunction, time, Duration, EaseOvershoot, EasePeriod);
                curve.AddKey(time, result);
            }

#if UNITY_EDITOR
            // Set the tangent mode to Clamped Auto for all keys
            for (int i = 0; i < curve.length; i++)
            {
                var tangentMode = AnimationUtility.TangentMode.Linear;
                AnimationUtility.SetKeyLeftTangentMode(curve, i, tangentMode);
                AnimationUtility.SetKeyRightTangentMode(curve, i, tangentMode);
            }
#endif

            return(curve);
        }
Exemple #5
0
    public static Quaternion GetMouseRotationInput(float mouseSensitivity = 2f, float minTiltAngle = -75f, float maxTiltAngle = 45f)
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        if (Input.GetMouseButtonDown(1))
        {
            move = false;
        }
        if (Input.GetMouseButtonUp(1))
        {
            move = true;
        }

        if (!move)
        {
            mouseX = 0;
            mouseY = 0;
        }


        // Adjust the look angle (Y Rotation)
        lookAngle += mouseX * mouseSensitivity;
        lookAngle %= 360f;

        // Adjust the tilt angle (X Rotation)
        tiltAngle += mouseY * mouseSensitivity;
        tiltAngle %= 360f;
        tiltAngle  = MathfExtensions.ClampAngle(tiltAngle, minTiltAngle, maxTiltAngle);

        var controlRotation = Quaternion.Euler(/*20f*/ -tiltAngle, lookAngle, 0f);

        return(controlRotation);
    }
 public void DoUpdate()
 {
     foreach (NoteMaker noteMaker in noteMakers)
     {
         midPoint = new Vector2();
         foreach (Transform trs in noteMaker.transforms)
         {
             midPoint += (Vector2)trs.position;
         }
         midPoint /= noteMaker.transforms.Length;
         if ((noteMaker.positionOfPreviousNote - midPoint).sqrMagnitude > worldDistanceBetweenNotesSqr)
         {
             noteFrequency = GetNoteFromPosition(midPoint);
             noteFrequency = Mathf.Lerp(noteGroup.noteFrequencies[0], noteGroup.noteFrequencies[noteGroup.noteFrequencies.Length - 1], noteFrequency);
             noteFrequency = MathfExtensions.GetClosestNumber(noteFrequency, noteGroup.noteFrequencies) * multiplyNoteFrequency;
             noteMaker.positionOfPreviousNote = midPoint;
             audioSource.volume = 0;
             position           = 0;
             if (!stream)
             {
                 AudioClip audioClip = AudioClip.Create("Note", (int)(sampleRate * noteNormalizedFrequencyOverTime.keys[noteNormalizedFrequencyOverTime.keys.Length - 1].time), 1, sampleRate, false, OnAudioRead, OnAudioSetPosition);
                 audioSource.clip = audioClip;
                 audioSource.Play();
             }
             timeOfLastNote = Time.time;
         }
     }
     audioSource.volume = noteVolumeOverTime.Evaluate(Time.time - timeOfLastNote);
     targetFrequency    = noteFrequency * noteNormalizedFrequencyOverTime.Evaluate(Time.time - timeOfLastNote);
     frequency          = Mathf.Lerp(frequency, targetFrequency, frequencyLerpRate * Time.deltaTime);
 }
Exemple #7
0
    private void IdentifyGift()
    {
        ResourceType resourceType = default;

        int addingValue = 0;

        if (Random.Range(0f, 1f) < Mediator.Instance.GameConfig.EnergyDropChance)
        {
            resourceType = ResourceType.Energy;
        }

        _surpriseImage.sprite = resourceType == ResourceType.Chips ? _chipsSprite : _energySprite;
        addingValue           = resourceType == ResourceType.Chips ? MathfExtensions.RoundTenDigit(Mediator.Instance.GameConfig.RangeChipValue.GetRandomValue()) : Mediator.Instance.GameConfig.RangeEnergyValue.GetRandomValue();
        _surpriseImage.GetComponentInChildren <Text>().text = addingValue.ToString();

        if (resourceType == ResourceType.Chips)
        {
            Mediator.Instance.ResourcesStorage.Chips.AddResources(addingValue);
        }
        else if (resourceType == ResourceType.Energy)
        {
            Mediator.Instance.ResourcesStorage.Energy.AddResources(addingValue);
        }

        _isGettedSurprise = true;
    }
Exemple #8
0
    public static void TwoBoneIk(
        Transform bone1Transform, float bone1Length, Transform bone2Transform, float bone2Length,
        Vector3 targetPosition, Vector3 elbowTargetPosition, bool getPositiveAngleSolution
        )
    {
        // Get thetas.
        var   targetOffsetFromBone1 = targetPosition - bone1Transform.position;
        var   targetDistanceFromBone1 = targetOffsetFromBone1.magnitude;
        float theta1InRadians, theta2InRadians;

        MathfExtensions.GetTwoBoneIkAngles(
            bone1Length, bone2Length, targetDistanceFromBone1, getPositiveAngleSolution,
            out theta1InRadians, out theta2InRadians
            );

        // Rotate bone1 to point to the target, and point the up vector towards the elbow target.
        var elbowTargetOffsetFromBone1 = elbowTargetPosition - bone1Transform.position;
        var lookAtUpDirection          = Vector3Extensions.Reject(elbowTargetOffsetFromBone1, targetOffsetFromBone1);

        bone1Transform.LookAt(targetPosition, lookAtUpDirection);

        // Apply thetas.
        bone1Transform.Rotate(-Vector3.right, Mathf.Rad2Deg * theta1InRadians, Space.Self);
        bone2Transform.localRotation = Quaternion.AngleAxis(Mathf.Rad2Deg * theta2InRadians, -Vector3.right);
    }
Exemple #9
0
    public virtual void Update()
    {
#endif
        if (snapValues.Length > 0)
        {
            slider.value = MathfExtensions.GetClosestNumber(slider.value, snapValues);
        }
    }
Exemple #10
0
 public virtual void OnValueChanged(float value)
 {
     if (snapValues.Length > 0)
     {
         slider.value = MathfExtensions.GetClosestNumber(value, snapValues);
     }
     SetDisplayValue();
 }
 public virtual void HandleMouseInput()
 {
     if (InputManager.UsingGamepad)
     {
         return;
     }
     if (!leftClickInput && previousLeftClickInput && !controllingWithJoystick)
     {
         inControlMode = false;
     }
     foreach (_Selectable selectable in selectables)
     {
         if (currentSelected != selectable && IsMousedOverSelectable(selectable) && CanSelectSelectable(selectable))
         {
             ChangeSelected(selectable);
             return;
         }
     }
     if (leftClickInput)
     {
         if (currentInputField != null)
         {
             currentInputField.readOnly = true;
         }
         _Slider slider = currentSelected.GetComponent <_Slider>();
         if (slider != null)
         {
             Vector2 closestPointToMouseCanvasNormalized = new Vector2();
             if (currentSelected.canvas.renderMode == RenderMode.ScreenSpaceOverlay)
             {
                 if (selectable != null)
                 {
                     closestPointToMouseCanvasNormalized = slider.slidingArea.GetRectInCanvasNormalized(selectable.canvasRectTrs).ClosestPoint(slider.canvasRectTrs.GetWorldRect().ToNormalizedPosition(InputManager.GetMousePosition(MathfExtensions.NULL_INT)));
                 }
             }
             else if (selectable != null)
             {
                 closestPointToMouseCanvasNormalized = slider.slidingArea.GetRectInCanvasNormalized(selectable.canvasRectTrs).ClosestPoint(slider.canvasRectTrs.GetWorldRect().ToNormalizedPosition(selectable.canvas.worldCamera.ScreenToWorldPoint(InputManager.GetMousePosition(MathfExtensions.NULL_INT))));
             }
             float normalizedValue = slider.slidingArea.GetRectInCanvasNormalized(slider.canvasRectTrs).ToNormalizedPosition(closestPointToMouseCanvasNormalized).x;
             slider.slider.value = Mathf.Lerp(slider.slider.minValue, slider.slider.maxValue, normalizedValue);
             if (slider.snapValues.Length > 0)
             {
                 slider.slider.value = MathfExtensions.GetClosestNumber(slider.slider.value, slider.snapValues);
             }
         }
         else
         {
             InputField inputField = currentSelected.GetComponent <InputField>();
             if (inputField != null)
             {
                 currentInputField          = inputField;
                 currentInputField.readOnly = false;
             }
         }
     }
 }
Exemple #12
0
        private void CalculateSecondAttackPos(Vector2Int finishMovePos)
        {
            var xDistance  = finishMovePos.x - NextTargetPos.x;
            var yDistance  = finishMovePos.y - NextTargetPos.y;
            var secondPosX = NextTargetPos.x - MathfExtensions.GetSign(xDistance);
            var secondPosY = NextTargetPos.y - MathfExtensions.GetSign(yDistance);

            secondTargetPos = new Vector2Int(secondPosX, secondPosY);
        }
 public void ApplyGravity(bool isGrounded = false)
 {
     if (!isGrounded)
     {
         this.currentVerticalSpeed =
             MathfExtensions.ApplyGravity(this.VerticalSpeed, this.GravitySettings.GravityStrength, this.GravitySettings.MaxFallSpeed);
     }
     else
     {
         this.currentVerticalSpeed = -this.GravitySettings.GroundedGravityForce;
     }
 }
Exemple #14
0
	public virtual void Awake ()
	{
		#if UNITY_EDITOR
		if (!Application.isPlaying)
			return;
		#endif
		if (displayValue != null)
			initDisplayValue = displayValue.text;
		SetDisplayValue ();
		if (snapValues.Length > 0)
			indexOfCurrentSnapValue = MathfExtensions.GetIndexOfClosestNumber(slider.value, snapValues);
	}
    public virtual void HandleMouseInput()
    {
        bool justCanceledControlMode = false;

        if (Input.GetMouseButtonUp(0) && !controllingWithJoystick)
        {
            inControlMode           = false;
            justCanceledControlMode = true;
        }
        foreach (_Selectable selectable in selectables)
        {
            if (IsMousedOverSelectable(selectable))
            {
                if (justCanceledControlMode || currentSelected != selectable)
                {
                    ChangeSelected(selectable);
                    return;
                }
            }
        }
        if (Input.GetMouseButton(0))
        {
            _Slider slider = currentSelected.GetComponent <_Slider>();
            if (slider != null)
            {
                Vector2 closestPointToMouseCanvasNormalized = new Vector2();
                if (currentSelected.canvas.renderMode == RenderMode.ScreenSpaceOverlay)
                {
                    if (selectable != null)
                    {
                        closestPointToMouseCanvasNormalized = slider.slidingArea.GetRectInCanvasNormalized(selectable.canvasRectTrs).ClosestPoint(slider.canvasRectTrs.GetRectInWorld().ToNormalizedPosition(Input.mousePosition));
                    }
                }
                else
                {
                    if (selectable != null)
                    {
                        closestPointToMouseCanvasNormalized = slider.slidingArea.GetRectInCanvasNormalized(selectable.canvasRectTrs).ClosestPoint(slider.canvasRectTrs.GetRectInWorld().ToNormalizedPosition(Camera.main.ScreenToWorldPoint(Input.mousePosition)));
                    }
                }
                float normalizedValue = slider.slidingArea.GetRectInCanvasNormalized(slider.canvasRectTrs).ToNormalizedPosition(closestPointToMouseCanvasNormalized).x;
                slider.slider.value = Mathf.Lerp(slider.slider.minValue, slider.slider.maxValue, normalizedValue);
                if (slider.snapValues.Length > 0)
                {
                    slider.slider.value = MathfExtensions.GetClosestNumber(slider.slider.value, slider.snapValues);
                }
            }
        }
    }
        public void FlipTowards(Transform trs)
        {
            Vector2 toTrs = trs.position - transform.position;

            if (MathfExtensions.AreOppositeSigns(facing.x, toTrs.x))
            {
                spriteRenderer.flipX = !spriteRenderer.flipX;
                facing.x            *= -1;
            }
            if (MathfExtensions.AreOppositeSigns(facing.y, toTrs.y))
            {
                spriteRenderer.flipY = !spriteRenderer.flipY;
                facing.y            *= -1;
            }
        }
        private void Update()
        {
            if (rotating)
            {
                return;
            }

            Vector3 localMovement = new Vector2();

            if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            {
                localMovement.z += panSpeed;
            }
            if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            {
                localMovement.z -= panSpeed;
            }
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            {
                localMovement.x -= panSpeed;
            }
            if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
                localMovement.x += panSpeed;
            }
            Vector3 worldMovement = transform.TransformDirection(localMovement);

            transform.position = MathfExtensions.Clamp(worldMovement + transform.position, minCamera, maxCamera);

            if (Input.GetKeyDown(KeyCode.Q))
            {
                Rotate(-90);
            }
            if (Input.GetKeyDown(KeyCode.E))
            {
                Rotate(90);
            }

            if (Input.mouseScrollDelta.y > 0 || Input.GetKeyDown(KeyCode.R) || Input.GetKeyDown(KeyCode.Plus) || Input.GetKeyDown(KeyCode.KeypadPlus))
            {
                Zoom(-zoomAmount);
            }

            if (Input.mouseScrollDelta.y < 0 || Input.GetKeyDown(KeyCode.F) || Input.GetKeyDown(KeyCode.Minus) || Input.GetKeyDown(KeyCode.KeypadMinus))
            {
                Zoom(zoomAmount);
            }
        }
Exemple #18
0
 public IEnumerable <Ray> ShotRays(WeaponDefinition weaponDefinition, Ray aimRay)
 {
     if (weaponDefinition.Type == WeaponType.Shotgun)
     {
         for (var i = 0; i < OsFps.ShotgunBulletsPerShot; i++)
         {
             var currentShotRay = MathfExtensions.GetRandomRayInCone(aimRay, weaponDefinition.ShotConeAngleInDegrees);
             yield return(currentShotRay);
         }
     }
     else
     {
         var shotRay = MathfExtensions.GetRandomRayInCone(aimRay, weaponDefinition.ShotConeAngleInDegrees);
         yield return(shotRay);
     }
 }
Exemple #19
0
    public void Init(RewardType rewardType = RewardType.Daily, int chipsCountReward = 0)
    {
        ShowRewardText(rewardType);

        if (chipsCountReward == 0)
        {
            RangeValueInt chipsRewardRange = Mediator.Instance.GameConfig.RangeChipValue;
            _chipsReward = MathfExtensions.RoundTenDigit(Random.Range(chipsRewardRange.Min, chipsRewardRange.Max));
        }
        else
        {
            _chipsReward = chipsCountReward;
        }

        _chipsCountField.text = _chipsReward.ToString();
    }
    public static Quaternion GetMouseRotationInput(float mouseSensitivity = 3f, float minTiltAngle = -75f, float maxTiltAngle = 45f)
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        // Adjust the look angle (Y Rotation)
        lookAngle += mouseX * mouseSensitivity;
        lookAngle %= 360f;

        // Adjust the tilt angle (X Rotation)
        tiltAngle += mouseY * mouseSensitivity;
        tiltAngle %= 360f;
        tiltAngle  = MathfExtensions.ClampAngle(tiltAngle, minTiltAngle, maxTiltAngle);

        var controlRotation = Quaternion.Euler(-tiltAngle, lookAngle, 0f);

        return(controlRotation);
    }
Exemple #21
0
    public virtual void Awake()
    {
#if UNITY_EDITOR
        if (!Application.isPlaying)
        {
            return;
        }
#endif
        if (displayValue != null)
        {
            initDisplayValue = displayValue.text;
        }
        SetDisplayValue();
        if (snapValues.Length > 0)
        {
            indexOfCurrentSnapValue = MathfExtensions.GetIndexOfClosestNumber(slider.value, snapValues);
        }
        slider.onValueChanged.AddListener(delegate { OnValueChanged(slider.value); });
    }
    private void ClientUpdateThisPlayer(Client client, PlayerObjectComponent playerObjectComponent)
    {
        var playerObjectState = playerObjectComponent.State;

        playerObjectState.Input = GetCurrentPlayersInput();

        var unscaledDeltaMouse = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
        var deltaMouse         = client.GetMouseSensitivityForZoomLevel() * unscaledDeltaMouse;

        playerObjectState.LookDirAngles = new Vector2(
            Mathf.Clamp(MathfExtensions.ToSignedAngleDegrees(playerObjectState.LookDirAngles.x - deltaMouse.y), -90, 90),
            Mathf.Repeat(playerObjectState.LookDirAngles.y + deltaMouse.x, 360)
            );

        if (Input.GetButtonDown("Reload") && playerObjectState.CanReload)
        {
            client.Reload(playerObjectComponent);
        }

        if (playerObjectState.Input.IsFirePressed)
        {
            var wasTriggerJustPulled = Input.GetButtonDown("Fire");

            if (
                playerObjectState.CanTryToFireWeapon &&
                (wasTriggerJustPulled || playerObjectState.CurrentWeapon.Definition.IsAutomatic)
                )
            {
                ClientPlayerTryToShoot(client, playerObjectComponent);
            }
        }

        if (Input.GetButtonDown("Throw Grenade") && playerObjectState.CanThrowGrenade)
        {
            ClientThrowGrenade(client, playerObjectState);
        }

        if (Input.GetButtonDown("Switch Grenade"))
        {
            ClientSwitchGrenadeType(client, playerObjectState);
        }
    }
Exemple #23
0
    void ReshapeTract(float deltaTime)
    {
        float amount             = deltaTime * movementSpeed;
        int   newLastObstruction = -1;

        for (int i = 0; i < n; i++)
        {
            float diam       = diameter[i];
            float targetDiam = targetDiameter[i];
            if (diam <= 0)
            {
                newLastObstruction = i;
            }
            float slowReturn;
            if (i < noseStart)
            {
                slowReturn = 0.6f;
            }
            else if (i >= tipStart)
            {
                slowReturn = 1.0f;
            }
            else
            {
                slowReturn = 0.6f + 0.4f * (i - noseStart) / (tipStart - noseStart);
            }
            diameter[i] = MathfExtensions.MoveTowards(diam, targetDiam, slowReturn * amount, 2.0f * amount);
        }
        if (lastObstruction > -1.0 && Mathf.Abs(newLastObstruction - -1.0f) < EPSILON && noseA[0] < 0.05f)
        {
            AddTransient(lastObstruction);
        }
        lastObstruction = newLastObstruction;

        amount          = deltaTime * movementSpeed;
        noseDiameter[0] = MathfExtensions.MoveTowards(noseDiameter[0], velumTarget, amount * 0.25f, amount * 0.1f);
        noseA[0]        = noseDiameter[0] * noseDiameter[0];
    }
Exemple #24
0
        void Update()
        {
            timerValue = toggleTimer.GetValue();
            if (!Application.isPlaying)
            {
                HandleSetActive();
                return;
            }
            float timeRemaining = timerValue;

            if (toggleTimer.changeAmountMultiplier > 0)
            {
                timeRemaining = toggleTimer.value.max - timerValue;
            }
            if (timeRemaining > 1)
            {
                timerText.text = "" + MathfExtensions.RoundToInterval(timeRemaining, 1f);
            }
            else
            {
                timerText.text = "" + MathfExtensions.RoundToInterval(timeRemaining, .1f);
            }
            HandleSetActive();
        }
 public BulletEntry(Bullet bullet)
 {
     this.bullet    = bullet;
     yMoveDirection = MathfExtensions.Sign(GameManager.GetSingleton <PlayerMouse>().trs.position.y - bullet.trs.position.y);
 }
Exemple #26
0
    public void OnEnable()
    {
        if (combineEntries.Length == 0)
        {
            return;
        }
        KeyValuePair <Mesh, Transform>[] meshesAndTransforms = new KeyValuePair <Mesh, Transform> [combineEntries.Length];
        CombineInstance[] combineInstances = new CombineInstance[combineEntries.Length];
        for (int i = 0; i < combineEntries.Length; i++)
        {
            CombineEntry combineEntry = combineEntries[i];
            meshesAndTransforms[i] = new KeyValuePair <Mesh, Transform>(combineEntry.meshFilter.sharedMesh, combineEntry.trs);
            CombineInstance combineInstance = combineInstances[i];
            combineInstance.mesh      = Instantiate(combineEntry.meshFilter.sharedMesh);
            combineInstance.transform = combineEntry.trs.localToWorldMatrix;
            combineEntry.trs.gameObject.SetActive(false);
            combineInstances[i] = combineInstance;
        }
        for (int i = 0; i < meshesAndTransforms.Length; i++)
        {
            KeyValuePair <Mesh, Transform> meshAndTransform = meshesAndTransforms[i];
            for (int i2 = 0; i2 < meshesAndTransforms.Length; i2++)
            {
                KeyValuePair <Mesh, Transform> otherMeshAndTransform = meshesAndTransforms[i2];
                Vector3 toOtherTrs = otherMeshAndTransform.Value.position - meshAndTransform.Value.position;
                if (toOtherTrs.sqrMagnitude == 1)
                {
                    MeshExtensions.MeshTriangle[] meshTriangles = MeshExtensions.GetMeshTriangles(new KeyValuePair <Mesh, Transform>[1] {
                        meshAndTransform
                    });
                    MeshExtensions.MeshTriangle[] otherMeshTriangles = MeshExtensions.GetMeshTriangles(new KeyValuePair <Mesh, Transform>[1] {
                        otherMeshAndTransform
                    });
                    int toOtherTrsXSign = MathfExtensions.Sign(toOtherTrs.x);
                    int toOtherTrsYSign = MathfExtensions.Sign(toOtherTrs.y);
                    int toOtherTrsZSign = MathfExtensions.Sign(toOtherTrs.z);
                    if (toOtherTrsXSign != 0)
                    {
                        for (int i3 = 0; i3 < meshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.x - meshAndTransform.Value.position.x) == toOtherTrsXSign && Mathf.Sign(meshTriangle.point2.x - meshAndTransform.Value.position.x) == toOtherTrsXSign && Mathf.Sign(meshTriangle.point3.x - meshAndTransform.Value.position.x) == toOtherTrsXSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < meshTriangles.Length; i4++)
                                {
                                    if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        meshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                        for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign && Mathf.Sign(meshTriangle.point2.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign && Mathf.Sign(meshTriangle.point3.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++)
                                {
                                    if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        otherMeshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                    }
                    else if (toOtherTrsYSign != 0)
                    {
                        for (int i3 = 0; i3 < meshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.y - meshAndTransform.Value.position.y) == toOtherTrsYSign && Mathf.Sign(meshTriangle.point2.y - meshAndTransform.Value.position.y) == toOtherTrsYSign && Mathf.Sign(meshTriangle.point3.y - meshAndTransform.Value.position.y) == toOtherTrsYSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < meshTriangles.Length; i4++)
                                {
                                    if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        meshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                        for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign && Mathf.Sign(meshTriangle.point2.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign && Mathf.Sign(meshTriangle.point3.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++)
                                {
                                    if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        otherMeshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        for (int i3 = 0; i3 < meshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.z - meshAndTransform.Value.position.z) == toOtherTrsZSign && Mathf.Sign(meshTriangle.point2.z - meshAndTransform.Value.position.z) == toOtherTrsZSign && Mathf.Sign(meshTriangle.point3.z - meshAndTransform.Value.position.z) == toOtherTrsZSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < meshTriangles.Length; i4++)
                                {
                                    if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        meshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                        for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++)
                        {
                            MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3];
                            if (Mathf.Sign(meshTriangle.point1.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign && Mathf.Sign(meshTriangle.point2.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign && Mathf.Sign(meshTriangle.point3.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign)
                            {
                                meshTriangle.RemoveFromMesh();
                                for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++)
                                {
                                    if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex)
                                    {
                                        otherMeshTriangles[i4].triangleIndex--;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        MeshFilter meshFilter;
        Rigidbody  rigid = null;

        if (outputGo == null)
        {
            outputGo   = new GameObject();
            meshFilter = outputGo.AddComponent <MeshFilter>();
            outputGo.AddComponent <MeshRenderer>();
        }
        else
        {
            meshFilter = outputGo.GetComponent <MeshFilter>();
            if (meshFilter == null)
            {
                meshFilter = outputGo.AddComponent <MeshFilter>();
            }
            if (autoAddRigidbody)
            {
                rigid = outputGo.GetComponent <Rigidbody>();
            }
        }
        if (autoAddRigidbody)
        {
            if (rigid == null)
            {
                rigid = outputGo.AddComponent <Rigidbody>();
            }
            rigid.mass = combineEntries.Length;
        }
        if (autoSetColliders)
        {
            Collider[] colliders = outputGo.GetComponents <Collider>();
            for (int i2 = 0; i2 < colliders.Length; i2++)
            {
                Collider collider = colliders[i2];
                DestroyImmediate(collider);
            }
            for (int i = 0; i < combineEntries.Length; i++)
            {
                CombineEntry combineEntry = combineEntries[i];
                BoxCollider  boxCollider  = outputGo.AddComponent <BoxCollider>();
                Transform    outputTrs    = outputGo.GetComponent <Transform>();
                boxCollider.center = outputTrs.InverseTransformPoint(combineEntry.trs.position);
                boxCollider.size   = outputTrs.InverseTransformPoint(combineEntry.trs.lossyScale);
            }
        }
        meshFilter.sharedMesh = new Mesh();
        meshFilter.sharedMesh.CombineMeshes(combineInstances);
        // for (int i = 0; i < combineEntries.Length; i ++)
        //  DestroyImmediate(combineEntries[i].trs.gameObject);
        outputGo       = null;
        combineEntries = new CombineEntry[0];
    }
    public virtual void ControlSelected()
    {
        if (!inControlMode)
        {
            return;
        }
        _Slider slider = currentSelected.GetComponent <_Slider>();

        if (slider != null)
        {
            slider.indexOfCurrentSnapValue = Mathf.Clamp(slider.indexOfCurrentSnapValue + MathfExtensions.Sign(inputDirection.x), 0, slider.snapValues.Length - 1);
            slider.slider.value            = slider.snapValues[slider.indexOfCurrentSnapValue];
        }
    }
Exemple #28
0
        public virtual void Update(_Animation animation)
        {
            switch (timeSpanType)
            {
            case Type.AnimStartAndEnd:
                startTime  = 0;
                endTime    = startTime + animation.Duration;
                duration   = animation.Duration;
                startFrame = Mathf.RoundToInt(startTime / (1f / animation.framesPerSecond));
                endFrame   = Mathf.RoundToInt(endTime / (1f / animation.framesPerSecond));
                frameCount = endFrame - startFrame;
                break;

            case Type.AnimStartAndEndFrame:
                startFrame = Mathf.Clamp(startFrame, 0, startFrame + animation.FrameCount);
                startTime  = startFrame * (1f / animation.framesPerSecond);
                endFrame   = Mathf.Clamp(endFrame, startFrame, startFrame + animation.FrameCount);
                frameCount = animation.FrameCount;
                endTime    = startTime + animation.Duration;
                duration   = 1f / animation.framesPerSecond * frameCount;
                break;

            case Type.AnimStartAndEndTime:
                startTime  = MathfExtensions.SnapToInterval(startTime, 1f / animation.framesPerSecond);
                startTime  = Mathf.Clamp(startTime, 0, animation.Duration);
                endTime    = MathfExtensions.SnapToInterval(endTime, 1f / animation.framesPerSecond);
                endTime    = Mathf.Clamp(endTime, startTime, startTime + animation.Duration);
                startFrame = Mathf.RoundToInt(startTime / (1f / animation.framesPerSecond));
                startFrame = Mathf.Clamp(startFrame, 0, int.MaxValue);
                endFrame   = Mathf.RoundToInt(endTime / (1f / animation.framesPerSecond));
                endFrame   = Mathf.Clamp(endFrame, 0, int.MaxValue);
                frameCount = endFrame - startFrame;
                duration   = endTime - startTime;
                break;

            case Type.AnimStartFrameAndCount:
                startFrame = Mathf.Clamp(startFrame, 0, animation.FrameCount);
                frameCount = Mathf.Clamp(frameCount, 0, animation.FrameCount);
                startTime  = 1f / animation.framesPerSecond * startFrame;
                endFrame   = startFrame + frameCount;
                endTime    = startTime + animation.Duration;
                duration   = 1f / animation.framesPerSecond * frameCount;
                break;

            case Type.AnimStartTimeAndDuration:
                startTime  = MathfExtensions.SnapToInterval(startTime, 1f / animation.framesPerSecond);
                startTime  = Mathf.Clamp(startTime, 0, startTime + animation.Duration);
                duration   = Mathf.Clamp(duration, 0, animation.Duration);
                endTime    = startTime + duration;
                startFrame = Mathf.RoundToInt(startTime / (1f / animation.framesPerSecond));
                endFrame   = Mathf.RoundToInt(endTime / (1f / animation.framesPerSecond));
                frameCount = endFrame - startFrame;
                break;

            case Type.FrameCount:
                startTime  = MathfExtensions.NULL_FLOAT;
                endTime    = MathfExtensions.NULL_FLOAT;
                duration   = MathfExtensions.NULL_FLOAT;
                startFrame = MathfExtensions.NULL_INT;
                endFrame   = MathfExtensions.NULL_INT;
                break;

            case Type.StartAndEndTime:
                startTime  = Mathf.Clamp(startTime, 0, Mathf.Infinity);
                endTime    = Mathf.Clamp(endTime, startTime, Mathf.Infinity);
                startFrame = MathfExtensions.NULL_INT;
                endFrame   = MathfExtensions.NULL_INT;
                frameCount = MathfExtensions.NULL_INT;
                duration   = endTime - startTime;
                break;

            case Type.StartTimeAndDuration:
                startTime  = Mathf.Clamp(startTime, 0, Mathf.Infinity);
                duration   = Mathf.Clamp(duration, 0, Mathf.Infinity);
                endTime    = startTime + duration;
                startFrame = MathfExtensions.NULL_INT;
                endFrame   = MathfExtensions.NULL_INT;
                frameCount = MathfExtensions.NULL_INT;
                break;

            case Type.Infinite:
                duration   = Mathf.Infinity;
                startTime  = MathfExtensions.NULL_FLOAT;
                endTime    = MathfExtensions.NULL_FLOAT;
                startFrame = MathfExtensions.NULL_INT;
                endFrame   = MathfExtensions.NULL_INT;
                frameCount = MathfExtensions.NULL_INT;
                break;
            }
        }
 public BulletEntry(Bullet bullet)
 {
     this.bullet    = bullet;
     yMoveDirection = MathfExtensions.Sign(PlayerMouse.Instance.trs.position.y - bullet.trs.position.y);
 }
Exemple #30
0
 public static float Max(this Vector3 that) => MathfExtensions.Max(that.x, that.y, that.z);