public override void Tick(float dt, ref Pawn.Input_t input) { if (_critter.hasLastKnownPosition && _critter.wary > 0) { var diff = _critter.lastKnownPosition - _critter.position; input.look = diff.normalized; input.movement = Vector3.zero; } else { patrolTimer -= dt; if (patrolTimer <= 0) { patrolTimer = Random.Range(data.patrolTimeMin, data.patrolTimeMax); GetNewPatrolPoint(_critter); } var diff = patrolPos - _critter.position; diff.y = 0; if (diff.magnitude > data.destinationTolerance) { input.movement = diff.normalized * data.patrolSpeed; input.look = input.movement; } } }
public override void Tick(float dt, ref Pawn.Input_t input) { input.movement = Vector3.zero; if (_critter.hasLastKnownPosition) { var diff = _critter.lastKnownPosition - _critter.position; input.look = diff.normalized; } }
override public void Tick(float dt, ref Pawn.Input_t input) { float dist = getDistToAttackPos(); bool isInAttackChain = attackCount < data.attackCount; bool canStartAttacking = dist > minRange && dist < maxRange && _critter.canAttack && _critter.activity == Pawn.Activity.OnGround; if (attacked) { waitTimer += dt; } else if (data.attackCount > 0 && attackCount == 0) { } else if (isInAttackChain || canStartAttacking) { input.look = _critter.lastKnownPosition - _critter.position; if (weapon.CanCast()) { if (_critter.CanSee(_critter.gameMode.players[0].playerPawn) > 0) { input.attacks[weaponIndex] = new AttackState(weaponIndex, attackIndex, InputState.JustReleased); attackCount--; if (attackCount <= 0) { attacked = true; } } } } else if (!attacked) { var desiredPos = _critter.lastKnownPosition + desiredOffset * ((maxRange - minRange) / 2 + minRange); var move = desiredPos - _critter.position; move.y = 0; if (dist > data.walkDistance) { input.movement = move.normalized * data.runSpeed; input.look = input.movement.normalized; } else { input.movement = move.normalized * data.walkSpeed; input.look = _critter.lastKnownPosition - _critter.position; } if (_critter.rigidBody.position.y - _critter.lastKnownPosition.y <= -data.enemyElevationDeltaToJump) { if (_critter.canJump && _critter.activity == Pawn.Activity.OnGround) { input.inputs[(int)InputType.Jump] = InputState.JustPressed; } } } }
override public void Tick(float dt, ref Pawn.Input_t input) { if (timer == 0) { input.inputs[(int)InputType.Dodge] = InputState.Clicked; var diff = _critter.position - _critter.lastKnownPosition; diff.y = 0; input.movement = diff.normalized; input.look = -input.movement; } timer += dt; }
override public void Tick(float dt, ref Pawn.Input_t input) { input.inputs[(int)InputType.Jump] = InputState.Released; input.inputs[(int)InputType.AttackRight] = InputState.Released; if (_critter.hasLastKnownPosition) { var diff = _critter.position - _critter.lastKnownPosition; diff.y = 0; if (diff.magnitude > data.destinationTolerance) { input.movement = diff.normalized; input.look = input.movement; } } if (_critter.canJump && _critter.activity == Pawn.Activity.OnGround) { input.inputs[(int)InputType.Jump] = InputState.JustPressed; } }
override public void Tick(float dt, ref Pawn.Input_t input) { var move = desiredPosition - _critter.position; move.y = 0; if (move.magnitude > data.destinationTolerance) { input.movement = move.normalized * data.walkSpeed; input.look = input.movement.normalized; } else { reachedPosition = true; input.look = _critter.lastKnownPosition - _critter.position; } if (reachedPosition) { waitTimer += dt; } }
abstract public void Tick(float dt, ref Pawn.Input_t input);