private IEnumerator PlaySword(NodeCollider.NodeHit grabbedNode, float attackSpeed) { float slashTime = attackSpeed / 3f; while (true) { slashTime += Time.deltaTime; Node updatedNode = UpdateNode(grabbedNode); Vector2 direction = GetNodeDirection(updatedNode); transform.position = updatedNode.position; transform.rotation = Quaternion.FromToRotation(Vector3.right, direction); if (slashTime >= attackSpeed) { slashTime -= attackSpeed; BloodParticlesManager.Play(updatedNode.position + Vector2.right / 10, direction); ScreenShake.Play(); } if (slashTime > attackSpeed / 3f) { swordSprite.transform.localPosition = Vector3.right / 10 + Vector3.down / 10; } else { swordSprite.transform.localPosition = Vector3.left / 20 + Vector3.down / 10; } yield return(null); } }
private Node UpdateNode(NodeCollider.NodeHit grabbedNode) { Node updatedNode; if (grabbedNode.node.side == NodeSide.Left) { updatedNode = grabbedNode.nodeManager.nodesLeft[grabbedNode.node.index]; } else { updatedNode = grabbedNode.nodeManager.nodesRight[grabbedNode.node.index]; } return(updatedNode); }
private void InitializeGrab() { if (grab == false && grabbedNode != null) { grabbedNode = null; rigidbody2D.isKinematic = false; SwordEffect.Stop(); } if (grab == true && grabbedNode == null && nodeCollider.hits.Count > 0) { grabbedNode = nodeCollider.hits.First().Value; Vector2 grabTranslation = (Vector2)transform.position - grabbedNode.node.position; grabOffset = grabTranslation.magnitude; grabRotation = Quaternion.FromToRotation(grabbedNode.node.velocity, grabTranslation); rigidbody2D.isKinematic = true; SwordEffect.Play(grabbedNode, attackSpeed); } }
public static void Play(NodeCollider.NodeHit grabbedNode, float attackSpeed) { instance.swordSprite.enabled = true; instance.StartCoroutine(instance.PlaySword(grabbedNode, attackSpeed)); }