public void Hitbox(int i, Fighter ownedBy) { if (i < 0 || i >= hitboxes.Length) { return; } Hitbox h = hitboxes[i]; h.Activate(ownedBy); }
protected override void Attack() { if (m_IsAttacking) { return; } float time = 0.4f; m_Hitbox.Activate(time); StartCoroutine(AttackCooldown(time)); StartCoroutine(RotateSword(time, 60.0f)); }
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); } } }
/// <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); }