public virtual void MoveToPosition(Vector3 pos) { if (playerState != PlayerState.IMMOBILE) { StopAttacking(); playerState = PlayerState.WALKING; CM.MoveToPosition(new Vector3(pos.x, pos.y, transform.position.z)); } }
public virtual void Attack(Transform target) { if (this.target != null && target == this.target) // ako je target razlicit od trenutnog { return; } if (playerState == PlayerState.IMMOBILE) { return; } this.target = target; CM.MoveToPosition(target.position); playerState = PlayerState.CHASING_ENEMY; weapons[equippedWeaponIndex].Pause(); }
protected override void Update() { UpdateGraph(); switch (playerState) { case PlayerState.CHASING_ENEMY: // ako trenutno juri protivnika { if (target == null) // ako je protivnik mrtav { StopAttacking(); StopMoving(); detectedPlayer = false; break; } if (CanSee(target)) { StartAttacking(target); } else if (!CM.destination.Equals(target.position)) // ako se protivnik u medjuvremenu pomerio { CM.MoveToPosition(target.position); } if (room != null && player.GetComponent <AttackingCharacter>().GetRoom() != room) { MoveToPosition(startPos); detectedPlayer = false; } break; } case PlayerState.ATTACKING: { Worm worm; if (target == null || ((worm = target.GetComponent <Worm>()) != null && worm.state == Worm.WormState.BURIED)) // ako je protivnik mrtav { StopAttacking(); StopMoving(); detectedPlayer = false; break; } if (!CanSee(target)) { // ako mu je protivnik nestao iz weapon range-a Transform tempTarget = target; StopAttacking(); Attack(tempTarget); } if (room != null && player.GetComponent <AttackingCharacter>().GetRoom() != room) { MoveToPosition(startPos); detectedPlayer = false; } break; } case PlayerState.WALKING: { if (!path.pathPending && (path.reachedEndOfPath || !path.hasPath)) // ako je stigao do destinacije { playerState = PlayerState.IDLE; OnReachedDestination(); } else if (((Vector2)path.destination).Equals(startPos)) // ako se vraca na mesto { Transform closest; if ((closest = vision.GetClosest()) != null && LevelGeneration.I.GetRoomAtPos(closest.position) == room) { Attack(closest); } } break; } case PlayerState.IDLE: { if (!detectedPlayer) { if (room == player.GetComponent <PlayerWithJoystick>().GetRoom()) { Attack(player); detectedPlayer = true; } } else { Attack(player); } break; } } base.Update(); }