public void DeleteFromClan(GameObject oldmember) { Debug.Log("в клане " + name + " убили " + oldmember.name); if (oldmember == Leader) { members.Remove(oldmember); Debug.Log("в клане " + name + "умер лидер клана: " + oldmember.name); bool destinyofthisclan = false; foreach (GameObject a in members) { if (a.GetComponent <CleverAI>().clan == this && a != Leader) { Leader = a; destinyofthisclan = true; Debug.Log("в клане " + name + "новый лидер: " + oldmember.name); break; } } if (!destinyofthisclan) { Debug.Log(name + "IS DEAD"); Creator.ListofClans.Remove(this); } } else { members.Remove(oldmember); } Debug.Log("в клане " + name + members.Count); Creator.ChangeInClans(); }
public void Where() { Creator.ChangeInClans(); GameObject otherman = null; GameObject[] othermans = GameObject.FindGameObjectsWithTag("AIMan"); Debug.Log("найдено " + othermans.Length); foreach (GameObject man in othermans) { //Debug.Log("в цикле " + man.GetComponent<CleverAI>().clan); if (man.GetComponent <CleverAI>().clan != player.GetComponent <PlayerMove>().ClanOfPlayer) { //Debug.Log("условие выполнилось " + othermans.Length); otherman = man; break; } } if (otherman != null) { //Debug.Log("найден " + otherman.name); //arrow = GameObject.Find("arrow"); // way = GameObject.Find("Arrowrotator"); arrow = Instantiate(way, player.transform.position + Vector3.forward * 2, Quaternion.identity); //Debug.Log("создан" + arrow.name); arrow.transform.LookAt(otherman.transform.position); //arrow.AddComponent<Rigidbody>(); //arrow.SetActive(true); } }
public void request(GameObject friend)//заявка на дружбу { print(gameObject + "получил заявку от " + friend.name); if (Random.Range(0, 10) < sociability) //принимаем { if (clan == null) //если пришла заявка, а мы не в клане { print(gameObject + "не в клане, обнуляем его и добавляем"); if (friend.GetComponent <CleverAI>().clan == null) //приславший заявку не состоит в клане, но хочет создать свой { clan = new Clan(friend); //в этом случае создаем для него клан friend.GetComponent <CleverAI>().clan = clan; //записываем для него его же клан } clan = friend.GetComponent <CleverAI>().clan; //и только теперь добавляемся в его клан ResetAllTasks(gameObject); clan.AddToClan(gameObject); Creator.ChangeInClans(); } else//мы уже в клане и пришла заявка от игрока без клана { print(gameObject + "добавляем в свой клан" + friend.name + "и обнуляет"); CleverAI cleverfriend = GetComponent <CleverAI>(); cleverfriend.clan = clan;//и только теперь добавляем его в наш клан ResetAllTasks(friend); clan.AddToClan(friend); Creator.ChangeInClans(); } } }
public void TakeDamage(GameObject killer, int enemydamage) { //Debug.Log(gameObject.name + " take damage from " + killer.gameObject.name); if (state != State.dead) { if (priority != 1 && priority != 3) { state = State.attack; anim.SetBool("Run", true); anim.SetBool("Attack", true); } if (enemy != killer) { enemy = killer; } if (friend == killer) { friend = null; clan.DeleteFromClan(gameObject); clan = null; } // Debug.Log("hp before " + hp); hp -= Random.Range(enemydamage, enemydamage + 10); // Debug.Log("hp after " + hp); if (hp <= 0) { //Debug.Log(gameObject.name + " is dead"); nav.ResetPath(); nav.enabled = false; enemy = null; if (clan != null) { Debug.Log("удаляем умершего"); clan.DeleteFromClan(gameObject); clan = null; } if (priority == 6) { Creator.ChangeInClans(); } state = State.dead; anim.SetTrigger("Death"); priority = 3; CreatorRef.SomebodyDead(gameObject); StopAllCoroutines(); } } }
public void answeryes() { //print(gameObject.GetComponent<Friendship>().Friend.name); if (Friend != null) { //print("дружба принята"); Friend.GetComponent <CleverAI>().clan = gameObject.GetComponent <PlayerMove>().ClanOfPlayer; gameObject.GetComponent <PlayerMove>().ClanOfPlayer.AddToClan(Friend); Friend.GetComponent <CleverAI>().ResetAllTasks(Friend); Creator.ChangeInClans(); } FriendlyPanel.SetActive(false); Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; }
public void TakeDamage(GameObject killer, int enemydamage) { if (currenttask.action != Action.Dead) //если не мертвый { if (priority != 1 && currenttask.action != Action.Attack) //не заяц { Tasks.Push(currenttask); if (killer.tag == "Player") { currenttask = new Task(Action.RunFor, killer, killer.GetComponent <PlayerMove>().priority); runuptask(); reactiononplayer = 2; } else { currenttask = new Task(Action.RunFor, killer, killer.GetComponent <CleverAI>().priority); runuptask(); } } hp -= Random.Range(enemydamage, enemydamage + 10); if (clan != null) { if (killer == clan.Leader) { clan.DeleteFromClan(gameObject); clan = null; Creator.ChangeInClans(); } } if (hp <= 0) { AddTask(new Task(Action.Dead, null, 0)); priority = 3; CreatorRef.SomebodyDead(gameObject); if (clan != null) { clan.DeleteFromClan(gameObject); clan = null; Creator.ChangeInClans(); } } } }
public void AddToClan(GameObject newmember) { bool addnewmember = true; foreach (GameObject a in members) { if (a.name == newmember.name) { addnewmember = false; break; } } if (addnewmember) { members.Add(newmember); Debug.Log("В клан " + name + "добавилcя " + newmember.name); Creator.ChangeInClans(); } }
public void GetEnemy(GameObject newenemy) //рядом враг { // Debug.Log(gameObject.name + "see the" + newenemy.name); if (state != State.dead && anim != null)//если не мертвый и подключился аниматор { if (friend != newenemy) { int newenemypriority;//приоритет нового врага if (newenemy.tag == "Player") { newenemypriority = 6; //у игрока приоритет всегда 6 } else { newenemypriority = newenemy.GetComponent <Behavior>().priority; //узнаем приоритет нового врага } bool changenemy = false; //будем ли менять врага if (enemy != null) //определяем, будем ли менять врага, если уже есть взаимодействие { int oldpriority; if (enemy.tag == "Player") { oldpriority = 6; } else { oldpriority = enemy.GetComponent <Behavior>().priority; } if (newenemypriority > oldpriority) { changenemy = true; } if (newenemy.gameObject.name != enemy.gameObject.name) { // Debug.Log("write enemy in memory for:"+gameObject.name+" oldenemy: " + enemy.gameObject.name + "newenemy: " + newenemy.gameObject.name); if (changenemy) { enemyinmemory = enemy; //если враг будет менятся запомним, что он тоже рядом } else { enemyinmemory = newenemy;//если враг был проигнорирован из-за приоритета, но запомним, что он тоже рядом } } } if (enemy == null || changenemy) { bool addenemy = false; //добавить ли врага после проверки условий bool friendly = false; // Debug.Log("About friendly!" + priority + newenemypriority); if (priority == 6 && newenemypriority == 6) { if (clan != null) //мы в клане { if (newenemy.tag == "Player") //мы втретили игрока { if (clan.Leader == newenemy) { friendly = true; Debug.Log(gameObject.name + "я уже был в клане игрока"); } else { Debug.Log(gameObject.name + "я не в клане игрока"); } } else if (newenemy.GetComponent <Behavior>().clan != null)//мы встретили не игрока { if (newenemy.GetComponent <Behavior>().clan == clan) { friendly = true; Debug.Log(gameObject.name + "я в том же клане, что и этот аи"); } else { Debug.Log(gameObject.name + "я в другом клане"); } } else//т.е. мы в клане, а он - нет { if (Random.Range(0, 3) != 0) { if (newenemy.GetComponent <Behavior>().enemy != null) //у нашего объекта есть враг { if (newenemy.GetComponent <Behavior>().enemy.tag == "Player") //если враг объекта игрок { if (clan.Leader.name == "Player") { friendly = false; //и мы в клане игрока } else { friendly = true; } } else if (newenemy.GetComponent <Behavior>().enemy.GetComponent <Behavior>().clan != clan) { friendly = true; //если встретили объект с врагом не из нашего клана } } else { friendly = true; } //добавить в клан!!! if (friendly) { clan.AddToClan(newenemy); Debug.Log(gameObject.name + "я возьму его в свой клан"); } else { Debug.Log("он враждует с моим кланом!"); } } else { Debug.Log(gameObject.name + "я не возьму его в свой клан"); } } } else//мы не в клане { if (newenemy.tag == "Player")//мы встретили игрока { if (Random.Range(0, 3) != 0) { friendly = true;//присоединть к клану игрока clan = newenemy.GetComponent <PlayerMove>().ClanOfPlayer; clan.AddToClan(gameObject); Debug.Log(gameObject.name + "Я хочу в клан игрока!"); } else { Debug.Log(gameObject.name + "я не хочу в клан игрока"); } } else if (newenemy.GetComponent <Behavior>().clan != null)//встретили не игрока уже в клане { if (Random.Range(0, 3) != 0) { friendly = true;//присоединиться к клану другого аи clan = newenemy.GetComponent <Behavior>().clan; clan.AddToClan(gameObject); Debug.Log(gameObject.name + "я пойду в клан этого аи"); if (enemy != null) { if (enemy.tag != "Player") { if (enemy.GetComponent <Behavior>().clan != null) { if (enemy.GetComponent <Behavior>().clan == newenemy.GetComponent <Behavior>().clan) { enemy = null; } } } else if (enemy.GetComponent <PlayerMove>().ClanOfPlayer == clan) { enemy = null; } } } else { Debug.Log(gameObject.name + "я не пойду в клан этого аи"); } } else //мы оба не в кланах { if (Random.Range(0, 3) != 0) { friendly = true; clan = new Clan(gameObject); Creator.ChangeInClans(); Debug.Log(gameObject.name + "Мы сформируем новый клан!"); } else { Debug.Log(gameObject.name + "не будем формировать новый клан"); } } } //Debug.Log("About friendly!" + priority + newenemypriority); if (friendly)//если решили дружить { if (priority == 6) { //Debug.Log("FRIENDLY! " + gameObject.name); friend = newenemy; anim.SetBool("Attack", false); anim.SetTrigger("Hello"); if (friend.tag == "Player")//добавляемся в клан игрока { nav.ResetPath(); state = State.friend; StopAllCoroutines(); } // else if (friend.GetComponent<Behavior>().state != State.friend) else if (clan.Leader != gameObject)//если мы не лидер клана { nav.ResetPath(); state = State.friend; StopAllCoroutines(); } } } } if (!friendly) { if (CreatorRef.Response(6, 6) == 1) //запрос к создателю о нападении, если true - нападаем { anim.SetBool("Attack", false); //перестаем атаковать if (priority == 5) { anim.SetBool("Eating", false); //перестаем ксть } state = State.runfor; //указываем состояние бега transform.LookAt(newenemy.transform.position); //разворачиваем сначала к игроку addenemy = true; } else if (newenemypriority > 4) //если не нападаем и его приоритет выше 4 - убегаем { if (state == State.eat || state == State.attack) //если в это время ели или сражались с кем-то { StopAllCoroutines(); //останавливаем все процессы anim.SetBool("Attack", false); //перестаем атаковать if (priority == 5) { anim.SetBool("Eating", false); } } state = State.runfrom; //указываем состояние бега transform.rotation = Quaternion.Euler(newenemy.transform.rotation.eulerAngles.x, newenemy.transform.rotation.eulerAngles.y, newenemy.transform.rotation.eulerAngles.z); //бежим туда, куда направлен и враг addenemy = true; //указываем, что враг будет добавлен } if (enemy == null && gameObject.tag == "Player") { addenemy = true; //если запрос пришел на игрока и у него небыло сопряженных врагов - добавляем } if (addenemy) //если добавляем врага { enemy = newenemy.gameObject; //записываем врага if (enemy.tag == "Player") { enemy.GetComponent <PlayerMove>().associated = gameObject; } // else enemy.GetComponent<Behavior>().GetEnemy(gameObject);//оповещаем о присоединении !!!попробуем НЕ ОПОВЕЩАТЬ!!! StopAllCoroutines(); //останавливаем корутины (т.к. есть возможность входа в триггер во время ожидания) nav.speed = Random.Range(5, 8); //включаем высокую скорость anim.SetBool("Walk", false); //выключаем ходьбу anim.SetBool("Run", true); //переключаем анимацию в бег } } } // else StartCoroutine(Wait()); } } }