private void FixedUpdate() { if (hitTimer > 0f) { hitTimer -= Time.fixedDeltaTime; } else { if (toHit) { toHit = false; CharacterDeath.Kill(HitGetColliders); } if (Animator.CurrentSpriteAnimation == WhipAnimation) { if (Animator.IsFinished) { SetValue(true); } } else if (WhipRequest) { AudioSource.Play(); SetValue(false); Animator.SetAnimation(WhipAnimation); HitGetColliders.ShapeParameter.Offset.x = SpriteRenderer.flipX ? -HitOffsetX : HitOffsetX; hitTimer = HitTime; toHit = true; } } WhipRequest = false; }
public bool Execute(AIActionList.Token token) { if (token.Source.SpriteRenderer.flipX) { AttackGetColliders.ShapeParameter.Offset.x = -AttackOffsetX; } else { AttackGetColliders.ShapeParameter.Offset.x = AttackOffsetX; } if (toAttack && !attackTimer.Execute(Time.fixedDeltaTime)) { toAttack = false; CharacterDeath.Kill(AttackGetColliders); } return(true); }
public void Ray(Vector2 target) { if (!newAimTimer.Execute(Time.fixedDeltaTime)) { newAimTimer.SetTime(NewAimTime); aimTime = Random.Range(MinAimTime, MaxAimTime); } Vector2 dir = target - (Vector2)Origin.position; Rest((Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg) + 90f); const float maxDistance = 1000f; LaserTransform.position = Origin.position; LaserTransform.rotation = Quaternion.Euler(0f, 0f, Angle); Vector2 raySize = new Vector2(0.375f, 0.5f); RaycastHit2D hit = Physics2D.BoxCast(Origin.position, raySize, Angle, Direction, maxDistance, Action.ObstacleLayerMask); float dis; if (hit.collider) { dis = hit.distance; LaserSpriteRenderer.size = new Vector2(1f, (dis * (1f / 0.625f)) + 0.5f); } else { dis = maxDistance; LaserSpriteRenderer.size = new Vector2(1f, dis); } LaserGameObject.SetActive(true); foreach (RaycastHit2D h in Physics2D.BoxCastAll(Origin.position, raySize, Angle, Direction, dis, Action.KillLayerMask)) { OneShotAudioEffect effect = Action.LaserHitOneShotAudioEffectPooler.Get(); effect.Set(h.transform.position); effect.gameObject.SetActive(true); CharacterDeath.Kill(h.collider); } }