public override void UpdateDelta(float delta) { switch (State) { case (BiteState.Start): StartTime -= delta; if (StartTime < 0) { State = BiteState.Bite; } break; case (BiteState.Bite): BiteTime -= delta; if (BiteTime < 0) { State = BiteState.End; } break; case (BiteState.End): EndTime -= delta; if (EndTime < 0) { Snake.ResetState(); } break; } }
public void PerFrameUpdate() { if (ParentCharacter.MyAI.BlackBoard.TargetEnemy != null) { //check if is in range _dist = Vector3.Distance(ParentCharacter.transform.position, ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.position); if (_dist > 1.5f && _biteState != BiteState.Bite) { //go to target enemy ParentCharacter.MyAI.BlackBoard.NavTarget = ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.position - ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.forward * 0.5f; ParentCharacter.Destination = ParentCharacter.MyAI.BlackBoard.NavTarget; ParentCharacter.CurrentStance = HumanStances.Run; ParentCharacter.SendCommand(CharacterCommands.GoToPosition); } else if (_dist > 1.5f && _biteState == BiteState.Bite) { ParentCharacter.GetComponent <MutantCharacter>().OnCancelStrangle(); StopAction(); ParentCharacter.MyEventHandler.TriggerOnActionCompletion(); } else { if (_biteState != BiteState.Bite) { //Debug.Log("Ready to bite"); ParentCharacter.SendCommand(CharacterCommands.Bite); _biteState = BiteState.Bite; } } } }
void Biting() { switch (biteState) { case BiteState.Ready: var isBiteKeyDown = Input.GetKey(KeyCode.C); if (isBiteKeyDown) { savedVelocity = rb.velocity; attack = true; rb.velocity = Vector2.zero; biteState = BiteState.Biting; GameObject.FindGameObjectWithTag("Player").SendMessage("disableInput"); } break; case BiteState.Biting: biteTimer -= Time.deltaTime; if (biteTimer <= 0) { attack = false; biteTimer = maxBite; rb.velocity = savedVelocity; GameObject.FindGameObjectWithTag("Player").SendMessage("disableInput"); biteState = BiteState.Ready; } break; } }
public override void StopAction() { CsDebug.Inst.CharLog(ParentCharacter, "Stop executing ActionMutantBite " + ParentCharacter.name); _executionStopped = true; _biteState = BiteState.None; ParentCharacter.MyEventHandler.OnOneSecondTimer -= UpdateAction; ParentCharacter.MyEventHandler.OnPerFrameTimer -= PerFrameUpdate; }
public override void UpdateDiscrete() { switch (State) { case (BiteState.Start): if (Snake.Target != null) { float dx = Snake.Target.Position.X - Snake.Position.X; if (Math.Sign(dx) == GetFacingVector(Snake.Facing).X) { Target = Snake.Target.Position - Snake.Position; Target = Math.Min(Target.Length(), 80) * Vector2.Normalize(Target); } } Snake.Move(Target, 0.1f); break; case (BiteState.Bite): Snake.Move(Target, 0.5f); Snake.Move(Target, 0.5f); Snake.Move(Target, 0.5f); var maskSize = new Vector2(16, 16); bool damaged = false; foreach (var box in Snake.World.FindBoxes(new RectangleF(Snake.Position + Snake.Head.Offset - maskSize / 2, maskSize))) { if (box == Snake.Box || Snake.NoFriendlyFire(box.Data)) { continue; } if (box.Data is Enemy enemy) { enemy.Hit(new Vector2(GetFacingVector(Snake.Facing).X, -2), 20, 50, 20); damaged = true; } } if (damaged) { State = BiteState.End; } break; case (BiteState.End): Snake.Move(Target, 0.2f); break; } }
void Biting() { switch (biteState) { case BiteState.Ready: var isBiteKeyDown = Input.GetKeyDown(KeyCode.J); if (isBiteKeyDown && !anim.GetCurrentAnimatorStateInfo(0).IsName("Hack-n-Slash")) { mySource.clip = biteSound; mySource.Play(); savedVelocity = rb.velocity; attack = true; rb.velocity = Vector2.zero; biteState = BiteState.Biting; gameObject.GetComponent <CircleCollider2D>().radius = 1f; SendMessage("slashingNow", attack); } break; case BiteState.Biting: biteTimer -= Time.deltaTime; if (biteTimer <= 0) { attack = false; biteTimer = maxBite + 1f; rb.velocity = savedVelocity; gameObject.GetComponent <CircleCollider2D>().radius = 3f; biteState = BiteState.Cooldown; SendMessage("slashingNow", attack); } break; case BiteState.Cooldown: { biteTimer -= Time.deltaTime; if (biteTimer <= 0) { biteTimer = maxBite; biteState = BiteState.Ready; attack = false; } break; } } }
public override bool ExecuteAction() { CsDebug.Inst.CharLog(ParentCharacter, "Start executing ActionMutantBite " + ParentCharacter.name); _executionStopped = false; _biteState = BiteState.None; UpdateAction(); ParentCharacter.MyEventHandler.OnOneSecondTimer -= UpdateAction; ParentCharacter.MyEventHandler.OnOneSecondTimer += UpdateAction; ParentCharacter.MyEventHandler.OnPerFrameTimer -= PerFrameUpdate; ParentCharacter.MyEventHandler.OnPerFrameTimer += PerFrameUpdate; ParentCharacter.MyAnimEventHandler.OnEndStrangle -= OnEndStrangle; ParentCharacter.MyAnimEventHandler.OnEndStrangle += OnEndStrangle; return(true); }