Пример #1
0
            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;
                    }
                }
            }
Пример #2
0
 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;
     }
 }
Пример #3
0
            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;
 }
Пример #5
0
 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;
     }
 }
Пример #6
0
            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;
                }
            }
Пример #7
0
 abstract public void Tick(float dt, ref Pawn.Input_t input);