private void FindEntityDestination() { if (ObjectDatabase.Instance.haveEntitiesChanged) { mobs = ObjectDatabase.GetAllEntities <Mob>(); ObjectDatabase.Instance.haveEntitiesChanged = false; } foreach (var mob in mobs) { if (mob.targetEntity) { Debug.Log(mob.targetEntity.Name + " " + mob.targetEntity.transform.position); Vector3 targetPosition = mob.targetEntity.transform.position; mob.RpcSetDestination(targetPosition.x, targetPosition.z); mob.agent.SetDestination(targetPosition); } else { Vector3 position = mob.transform.position; Vector3 destination = new Vector3(position.x + Random.Range(-20, 20), 1, position.z + Random.Range(-20, 20)); mob.RpcSetDestination(destination.x, destination.z); mob.agent.SetDestination(destination); } } }
/// <summary> /// Get entity that is closest to the player and is in the player's attack range /// </summary> /// <returns></returns> public Entity GetClosestEntity() { Entity[] entities = ObjectDatabase.GetAllEntities(); Entity result = null; float minDistance = float.MaxValue; foreach (Entity entity in entities) { if (entity == null || entity.transform == transform) { continue; } float distance = Vector3.Distance(transform.position, entity.transform.position); if (distance <= usedWeapon.attackRange && distance < minDistance) { result = entity; minDistance = distance; } } return(result); }