public void Hitbox(int i, Fighter ownedBy)
    {
        if (i < 0 || i >= hitboxes.Length)
        {
            return;
        }

        Hitbox h = hitboxes[i];

        h.Activate(ownedBy);
    }
Exemple #2
0
        protected override void Attack()
        {
            if (m_IsAttacking)
            {
                return;
            }

            float time = 0.4f;

            m_Hitbox.Activate(time);
            StartCoroutine(AttackCooldown(time));
            StartCoroutine(RotateSword(time, 60.0f));
        }
Exemple #3
0
    void Attack()
    {
        if (attackWarmUpCountdown > 0)
        {
            attackWarmUpCountdown -= Time.deltaTime;
        }
        else if (attackCooldownCountdown > 0)
        {
            if (!hitboxTriggered)
            {
                attackHitbox.Activate();
                hitboxTriggered = true;
            }
            attackCooldownCountdown -= Time.deltaTime;
        }
        if (!InAttackExcludeChain())
        {
            if (allowChainAfterAttack > 0)
            {
                allowChainAfterAttack -= Time.deltaTime;
            }
            // allow for attacks at this point
            if (Input.GetMouseButtonDown(0))
            {
                if (allowChainAfterAttack > 0f)
                {
                    currentAttack++;
                    if (currentAttack >= attackChain.Count)
                    {
                        currentAttack = 0;
                    }
                }
                else
                {
                    currentAttack = 0;
                }
                attackWarmUpCountdown   = attackChain[currentAttack].attackWarmUp;
                attackCooldownCountdown = attackChain[currentAttack].attackCooldown;

                attackHitbox    = attackChain[currentAttack].myHitbox;
                hitboxTriggered = false;

                attackAllowChain      = attackChain[currentAttack].attackComboChainTime;
                allowChainAfterAttack = attackChain[currentAttack].allowComboTimeAfterAttack;

                attackForce           = transform.forward * attackChain[currentAttack].attackSpeed * Time.deltaTime * 60f;
                _myRigidbody.velocity = Vector3.zero;
                _myRigidbody.AddForce(attackForce, ForceMode.Impulse);
            }
        }
    }
Exemple #4
0
        /// <summary>
        /// Create the hitbox group of the given index.
        /// </summary>
        /// <param name="index">The index of the hitbox group.</param>
        public void CreateHitboxGroup(int index)
        {
            // Group was already created.
            if (hitboxGroups.ContainsKey(index))
            {
                return;
            }

            // Variables.
            BoxGroup      currentGroup    = combatManager.CurrentAttack.attackDefinition.boxGroups[index];
            List <Hitbox> groupHitboxList = new List <Hitbox>(currentGroup.boxes.Count);

            // Keep track of what the hitbox ID has hit.
            if (!hurtablesHit.ContainsKey(currentGroup.ID))
            {
                hurtablesHit.Add(currentGroup.ID, new List <IHurtable>());
                hurtablesHit[currentGroup.ID].Add(combatManager);
            }

            // Loop through all the hitboxes in the group.
            for (int i = 0; i < currentGroup.boxes.Count; i++)
            {
                // Instantiate the hitbox with the correct position and rotation.
                BoxDefinition hitboxDefinition = currentGroup.boxes[i];
                Vector3       pos = controller.GetVisualBasedDirection(Vector3.forward) * hitboxDefinition.offset.z
                                    + controller.GetVisualBasedDirection(Vector3.right) * hitboxDefinition.offset.x
                                    + controller.GetVisualBasedDirection(Vector3.up) * hitboxDefinition.offset.y;

                Hitbox hitbox = InstantiateHitbox(controller.transform.position + pos,
                                                  Quaternion.Euler(controller.transform.eulerAngles + hitboxDefinition.rotation));

                // Attach the hitbox if neccessary.
                if (currentGroup.attachToEntity)
                {
                    hitbox.transform.SetParent(controller.transform, true);
                }

                hitbox.Initialize(controller.gameObject, controller.visual.transform, currentGroup.boxes[i].shape,
                                  currentGroup.hitboxHitInfo, hurtablesHit[currentGroup.ID]);
                int cID        = currentGroup.ID;
                int groupIndex = index;
                hitbox.OnHurt += (hurtable, hitInfo) => { OnHitboxHurt(hurtable, hitInfo, cID, groupIndex); };
                hitbox.Activate();
                groupHitboxList.Add(hitbox);
            }
            // Add the hitbox group to our list.
            hitboxGroups.Add(index, groupHitboxList);
        }