Example #1
0
 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();
         }
     }
 }
Example #2
0
    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());
            }
        }
    }