Пример #1
0
 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();
 }
Пример #2
0
    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);
        }
    }
Пример #3
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();
         }
     }
 }
Пример #4
0
    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();
            }
        }
    }
Пример #5
0
    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;
    }
Пример #6
0
    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();
                }
            }
        }
    }
Пример #7
0
    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();
        }
    }
Пример #8
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());
            }
        }
    }