예제 #1
0
        private void FixedUpdate()
        {
            if (!_movementLock.CanDoAction())
            {
                RaiseOnStopMoving();

                return;
            }

            float xComponent = _moveDirection.normalized.x * speed;
            float zComponent = _moveDirection.normalized.z * speed;
            float yComponent = Mathf.Clamp(_rb.velocity.y - 9.8f * Time.fixedDeltaTime, -53, 0);

            Vector3 movementDirection  = new Vector3(xComponent, yComponent, zComponent);
            Vector3 horizontalMovement = new Vector3(movementDirection.x, 0f, movementDirection.z);

            _rb.velocity = movementDirection;
            _rb.MoveRotation(Quaternion.LookRotation(horizontalMovement.magnitude > 0 ?  horizontalMovement : transform.forward));

            if (new Vector3(_rb.velocity.x, 0f, _rb.velocity.z).magnitude >= 0.01f)
            {
                RaiseOnStartMoving();
            }
            else
            {
                RaiseOnStopMoving();
            }
        }
예제 #2
0
        private void OnBlockedHitReceived(Attack attack, CombatSystem attackerCombatSystem, Vector3 contactPoint)
        {
            if (!_knockbackLock.CanDoAction())
            {
                return;
            }

            if (attack.GetData().DealKnockbackWhenBlocked)
            {
                StartKnockback(attack, attackerCombatSystem);
            }
        }
예제 #3
0
        private void TryAbility(GroupAbilityFactory groupAbilityFactory)
        {
            if (!_abilitiesLock.CanDoAction())
            {
                return;
            }

            if (GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.None ||
                GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.All)
            {
                return;
            }

            GroupAbility ability = groupAbilityFactory.GetAbility();

            if (!_impMana.CheckSegments(ability.GetData().ManaSegmentsCost))
            {
                return;
            }

            //Debug.Log("Segments OK");

            if (!GroupsManager.Instance.Groups[GroupsInRangeDetector.MostRepresentedGroupInRange]
                .GetComponent <ImpGroupAi>().TryAbility(ability))
            {
                return;
            }

            //Debug.Log("Ability OK");

            _impMana.SpendSegments(ability.GetData().ManaSegmentsCost);

            OnAggroActionDone?.Invoke(useAbilityAggro);
        }
예제 #4
0
        private void AssignOrder(TacticFactory tactic)
        {
            if (!_orderAssignLock.CanDoAction())
            {
                return;
            }

            if (GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.None ||
                GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.All)
            {
                return;
            }

            OnAggroActionDone?.Invoke(singleTacticAggro);
            OnTryTacticAssign?.Invoke(tactic, GroupsInRangeDetector.MostRepresentedGroupInRange);
        }
예제 #5
0
        private void OnTriggerEnter(Collider other)
        {
            if (!_hitboxLock.CanDoAction())
            {
                return;
            }

            if (other.gameObject.layer != LayerMask.NameToLayer("AttackColliders"))
            {
                return;
            }

            AttackCollider attackerAttackCollider = other.GetComponent <AttackCollider>();

            if (attackerAttackCollider == null)
            {
                return;
            }

            if (attackerAttackCollider.OwnerCombatSystem.transform.root == transform.root)
            {
                return;
            }

            OnHitboxColliderHit?.Invoke(attackerAttackCollider.CurrentId, attackerAttackCollider.CurrentAttack, attackerAttackCollider.OwnerCombatSystem, _collider.ClosestPoint(other.transform.position));
        }
예제 #6
0
        private void OnDashInputDown()
        {
            if (!_dashLock.CanDoAction())
            {
                return;
            }

            StartDash();
        }
예제 #7
0
        private void OnManaPoolChanged(float currentManaPool)
        {
            if (!_particlesLock.CanDoAction())
            {
                return;
            }

            if (ImpMana.CurrentChargedSegments > 0)
            {
                if (_particlesActivated)
                {
                    return;
                }

                _particlesActivated = true;

                foreach (ParticleSystem system in _particleSystems)
                {
                    system.Play();
                }
                _audioSource.Play();
            }
            else
            {
                if (!_particlesActivated)
                {
                    return;
                }

                _particlesActivated = false;

                foreach (ParticleSystem system in _particleSystems)
                {
                    system.Stop();
                }
                _audioSource.Stop();
            }
        }
예제 #8
0
        private void Update()
        {
            if (!_inputLock.CanDoAction())
            {
                return;
            }

            ProcessMovementInput();

            ProcessRotationInput();

            if (Input.GetButtonDown("XBoxY"))
            {
                OnYButtonDown?.Invoke();
            }

            if (Input.GetButtonDown("XBoxX"))
            {
                OnXButtonDown?.Invoke();
            }

            if (Input.GetButtonDown("XBoxB"))
            {
                OnBButtonDown?.Invoke();
            }

            if (Input.GetButtonDown("XBoxA"))
            {
                OnAButtonDown?.Invoke();
            }

            if (Input.GetButtonUp("XBoxY"))
            {
                OnYButtonUp?.Invoke();
            }

            if (Input.GetButtonUp("XBoxX"))
            {
                OnXButtonUp?.Invoke();
            }

            if (Input.GetButtonUp("XBoxB"))
            {
                OnBButtonUp?.Invoke();
            }

            if (Input.GetButtonUp("XBoxA"))
            {
                OnAButtonUp?.Invoke();
            }

            if (Input.GetAxisRaw("XBoxLT") <= 0.1f && _ltPressed)
            {
                _ltPressed = false;
                OnLTButtonUp?.Invoke();
            }

            if (Input.GetAxisRaw("XBoxLT") >= 0.9f && !_ltPressed)
            {
                _ltPressed = true;
                OnLTButtonDown?.Invoke();
            }

            if (Input.GetButtonDown("XBoxRb"))
            {
                OnDashInputDown?.Invoke();
            }

            if (Input.GetButtonDown("XBoxLb"))
            {
                OnCallToArmsInputDown?.Invoke();
            }

            if (Input.GetButtonUp("XBoxLb"))
            {
                OnCallToArmsInputUp?.Invoke();
            }

            // TODO non funge per ora
            if (Input.GetAxisRaw("XBoxLT") >= 0.9f && _ltPressed)
            {
                OnLTButtonHeldDown?.Invoke();

                if (Input.GetButtonDown("XBoxY"))
                {
                    OnLT_YButtonDown?.Invoke();
                }

                if (Input.GetButtonDown("XBoxX"))
                {
                    OnLT_XButtonDown?.Invoke();
                }

                if (Input.GetButtonDown("XBoxB"))
                {
                    OnLT_BButtonDown?.Invoke();
                }

                if (Input.GetButtonDown("XBoxA"))
                {
                    OnLT_AButtonDown?.Invoke();
                }
            }
        }