Inheritance: MonoBehaviour
Exemple #1
0
 public void overrideFlockAffiliation(AnimalAI animal, bool isFlockOverride)
 {
     if (entries.Keys.Contains(animal))
     {
         entries[animal].isFlock = isFlockOverride;
     }
 }
Exemple #2
0
 private void Start()
 {
     ai              = GetComponent <AnimalAI>();
     ai.CaseChanged += OnCaseChanged;
     phase           = phaseCount;
     isRunning       = false;
 }
Exemple #3
0
 public void register(AnimalAI animal)
 {
     if (!entries.Keys.Contains(animal))
     {
         entries[animal] = new PerceptionEntry(animal, animal.getSpecies() == self.getSpecies());
     }
 }
Exemple #4
0
    private AnimalAI FindPartner()
    {
        Transform partnerTransform = ai.FindClosestThing(transform.position, targetMask, vision);

        if (partnerTransform == null || partnerTransform.gameObject == null)
        {
            return(null);
        }

        if (AnimalManager.Instance.animals.ContainsKey(partnerTransform.gameObject.GetInstanceID()))
        {
            AnimalAI partner  = AnimalManager.Instance.animals[partnerTransform.gameObject.GetInstanceID()];
            Identity identity = partner.Identity;
            if (identity.Sex != sex && identity.canReproduce && partner.currentState != Case.HUNGER && partner.currentState != Case.THIRST)
            {
                partner.OnCaseChanged(new CaseChangedEventArgs(new ReproductionCaseData(ai), Case.REPRODUCTION));
                return(partner);
            }
            else
            {
                return(null);
            }
        }

        return(null);
    }
Exemple #5
0
    void Update()
    {
        //상태 겟셋을 알기 위해서 넣은 에너미 변수
        AnimalAI ai = GetComponent <AnimalAI>();

        if (ai.GetAnimalType() == AnimalAI.AnimalType.Natural)
        {
            //적 캐릭터가 이동중일 때만 회전한다.
            if (agent.isStopped == false)
            {
                //NavMeshAgent가 가야할 방향 백터를 쿼터니언 각도로 변환
                Quaternion rot = Quaternion.LookRotation(agent.desiredVelocity);

                //보간함수를 사용하여 점진적을 회전시킵니다.
                animalTr.rotation = Quaternion.Slerp(animalTr.rotation
                                                     , rot, Time.deltaTime * damping);
            }

            //순찰상태가 아니라면 바로 빠져나와라.
            if (!isPatrolling)
            {
                return;
            }

            //NavMeshAgent가 이동하고 있고 목적지에 도착했는지 여부를 계산.
            if (agent.velocity.sqrMagnitude >= 0.2f * 0.2f && agent.remainingDistance <= 0.5f)
            {
                nextIdx = Random.Range(0, wayPoint.Count);
                MoveWayPoint();
            }
        }
    }
 protected virtual void Awake()
 {
     agent    = GetComponent <NavMeshAgent>();
     fow      = GetComponent <FieldOfView>();
     ai       = GetComponent <AnimalAI>();
     animator = GetComponent <Animator> ();
 }
Exemple #7
0
        static HandlePhysics AnimalAIHandler(AnimalAI ai)
        {
            if (ai == AnimalAI.Fly)
            {
                return(BirdPhysics.Do);
            }

            if (ai == AnimalAI.FleeAir)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Air, -1));
            }
            else if (ai == AnimalAI.FleeWater)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Water, -1));
            }
            else if (ai == AnimalAI.FleeLava)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Lava, -1));
            }

            if (ai == AnimalAI.KillerAir)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Air, 1));
            }
            else if (ai == AnimalAI.KillerWater)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Water, 1));
            }
            else if (ai == AnimalAI.KillerLava)
            {
                return((Level lvl, ref PhysInfo C) => HunterPhysics.Do(lvl, ref C, Block.Lava, 1));
            }
            return(null);
        }
Exemple #8
0
    private void Start()
    {
        ai = GetComponent <AnimalAI>();
        _animationManager = GetComponent <AnimationManager>();
        ai.CaseChanged   += OnCaseChanged;

        isRunning = false;
    }
Exemple #9
0
 public PerceptionModule(AnimalAI self)
 {
     this.self            = self;
     this.entries         = new Dictionary <AnimalAI, PerceptionEntry>();
     this.flockCenter     = self.getPosition();
     hasNoFlock           = false;
     interactablesInRange = new List <Interactable>();
 }
Exemple #10
0
 // Use this for initialization
 void Start()
 {
     animalAI          = GetComponent <AnimalAI>();
     hungerThreashoold = 50;
     eatrange          = 1;
     biteDamage        = 5;
     foodGain          = 5;
 }
 static void SetAI(Player p, BlockProps[] scope, BlockID block, string msg) {
     AnimalAI ai = AnimalAI.None;
     if (!CommandParser.GetEnum(p, msg, "Animal AI", ref ai)) return;
     scope[block].AnimalAI = ai;
     
     string name = BlockProps.ScopedName(scope, p, block);
     p.Message("Animal AI for {0} set to: {1}", name, ai);
 }
    private void OnTriggerEnter(Collider other)
    {
        AnimalAI animal = other.GetComponent <AnimalAI>();

        if (animal != null)
        {
            animals.Add(animal);
        }
    }
    private void OnTriggerExit(Collider other)
    {
        AnimalAI animal = other.GetComponent <AnimalAI>();

        if (animal != null)
        {
            animals.Remove(animal);
        }
    }
Exemple #14
0
    private void Update()
    {
        hunger += Time.deltaTime;

        if (isRunning)
        {
            if (!isVFXUsed)
            {
                isVFXUsed = true;
                vfx       = VFXManager.Instance.GetStateVFX(transform.position, ai, VFXType.HUNGER);
            }

            if (target != null)
            {
                _animationManager.SetState(AnimationType.Walk);
                ai.Move(target.position);
                if (Vector3.Distance(target.position, transform.position) < targetRange)
                {
                    if (target.tag == "Chicken")
                    {
                        AnimalAI targetAi = target.GetComponent <AnimalAI>();
                        // vfx = VFXManager.Instance.GetDeadVFX(transform.position, targetAi, VFXType.EATDEAD);
                        // VFXManager.Instance.WaitPush(vfx, VFXType.EATDEAD);
                        target.GetComponent <AnimalAI>().OnCaseChanged(new CaseChangedEventArgs(null, Case.DEATH));
                    }

                    hunger    = 0;
                    isRunning = false;
                    alerted   = false;
                    target    = null;

                    isVFXUsed = false;
                    VFXManager.Instance.Push(vfx, VFXType.HUNGER);

                    ai.OnCaseChanged(new CaseChangedEventArgs(null, Case.IDLE));
                }
            }
            else
            {
                isRunning = false;
                ai.OnCaseChanged(new CaseChangedEventArgs(null, Case.IDLE));
            }
        }

        if (!alerted && hunger > hungerTreshold)
        {
            alerted = true;
            ai.OnCaseChanged(new CaseChangedEventArgs(null, Case.AVAILABLE));
        }

        if (hunger > deathTreshold)
        {
            // vfx = VFXManager.Instance.GetDeadVFX(transform.position, ai, VFXType.HUNGERDEAD);
            // VFXManager.Instance.WaitPush(vfx, VFXType.HUNGERDEAD);
            ai.OnCaseChanged(new CaseChangedEventArgs(null, Case.DEATH));
        }
    }
Exemple #15
0
 public PerceptionEntry(AnimalAI animal, bool isFlock)
 {
     this.animal       = animal;
     this.lkp          = new Vector3();
     this.isLkpValid   = false;
     this.lkpTimeStamp = float.MinValue;
     this.aversion     = 0.0f;
     this.isFlock      = isFlock;
     this.boxCollider  = animal.GetComponent <BoxCollider>();
 }
Exemple #16
0
    // Use this for initialization
    void Start()
    {
        ai               = GameObject.Find("Animal_").GetComponent <AnimalAI>();
        Audio            = GetComponent <AudioSource>();
        Dialog           = GetComponent <DialogSystem>();
        animalAnimations = GameObject.FindGameObjectWithTag("Animal").GetComponentInChildren <AnimalAnimations>();

        Audio.loop = false;
        Audio.Stop();
    }
    void Start()
    {
        animal      = GameObject.FindGameObjectWithTag("Animal").GetComponent <AnimalAI>();
        animalAudio = GameObject.FindGameObjectWithTag("Animal").GetComponentInChildren <AudioSource>();

        startVolume = FootAudio.volume;

        publicAudio = GetComponent <AudioSource>();
        movement    = GetComponentInParent <PlayerMoverment1>();
    }
Exemple #18
0
    private void Start()
    {
        ai = GetComponent <AnimalAI>();
        _animationManager = GetComponent <AnimationManager>();
        ai.CaseChanged   += OnCaseChanged;
        ai.caseDatas.Add(new CaseContainer(Case.HUNGER, hunger, hungerTreshold, criticalTreshold, CasePriority.LOW));

        isRunning = false;
        alerted   = false;
        isVFXUsed = false;
    }
Exemple #19
0
    // Use this for initialization
    void Start()
    {
        animalAI = GetComponent <AnimalAI>();
        player   = GameObject.Find("Player");
        terrain t = GameObject.Find("Terrain").GetComponent <terrain>();

        range       = GameObject.Find("Terrain").GetComponent <terrain>().worldSize;
        arriveRange = 2;
        interval    = 0;
        target      = Vector3.zero;
    }
Exemple #20
0
    public void KillAnimalNetwork()
    {
        gameObject.AddComponent <FadeOut>();

        AnimalAI aiScript = GetComponent <AnimalAI>();

        if (aiScript != null)
        {
            aiScript.kill();
        }
    }
Exemple #21
0
    private string CurrentValueOfStat2()
    {
        string text = "MIMIC FATIGUE";

        AnimalStat = gameObject.GetComponentInParent <AnimalAI>();
        if (AnimalStat != null)
        {
            text = ((int)AnimalStat.fatigue).ToString();
        }

        return(text);
    }
Exemple #22
0
    private void Start()
    {
        ai              = GetComponent <AnimalAI>();
        ai.CaseChanged += OnCaseChanged;

        _animationManager = GetComponent <AnimationManager>();

        flee = false;
        ai.caseDatas.Add(new CaseContainer(Case.FLEE, 0, 0.5f, 0.5f, CasePriority.HIGH));

        isRunning = false;
    }
 private void Awake()
 {
     if (PhotonNetwork.isMasterClient || !PhotonNetwork.connected)
     {
         user = GetComponent <AnimalAI>();
         bt   = new BehaviorTree(user.animalConfig.idleTree, this);
     }
     else
     {
         Destroy(this);
     }
 }
Exemple #24
0
 public void unReserve(AnimalAI animal)
 {
     for (int i = 0; i < occupied.Length; i++)
     {
         if (occupied[i] == animal)
         {
             occupied[i] = null;
             reservedCount--;
             break;
         }
     }
 }
Exemple #25
0
    private string CurrentValueOfStat1()
    {
        string text = "MIMIC HUNGER";

        AnimalStat = gameObject.GetComponentInParent <AnimalAI>();
        if (AnimalStat != null)
        {
            text = ((int)AnimalStat.hunger).ToString();
        }

        return(text);
    }
Exemple #26
0
    private void Start()
    {
        ai = GetComponent <AnimalAI>();
        _animationManager = GetComponent <AnimationManager>();
        ai.CaseChanged   += OnCaseChanged;
        ai.caseDatas.Add(new CaseContainer(Case.THIRST, thirst, thirstTreshold, criticalTreshold, CasePriority.MID));
        thisTransform = transform;

        isRunning = false;
        alerted   = false;
        isVFXUsed = false;
    }
    void OnSceneGUI()
    {
        AnimalAI aow = (AnimalAI)target;

        Handles.color = Color.green;
        if (aow.areaCenter != null)
        {
            Handles.DrawWireCube(aow.walkBounds.bounds.center, aow.walkBounds.bounds.size);
            Handles.color = Color.blue;
            Handles.DrawWireArc(aow.walkBounds.bounds.max, Vector3.up, Vector3.forward, 360, 2);
            Handles.DrawWireArc(aow.walkBounds.bounds.min, Vector3.up, Vector3.forward, 360, 2);
        }
    }
Exemple #28
0
 void AIOnCrop(AnimalAI ai)
 {
     m_life -= Time.deltaTime;
     if (Eaten)
     {
         Die();
         ai.FindNextCrop();
     }
     else
     {
         m_particleSystem.Play();
     }
 }
Exemple #29
0
 public static bool Prefix(AnimalAI __instance, Character ___m_character, Character ___m_target, float dt)
 {
     if (___m_character.GetSEMan().HaveStatusEffect("SE_Fear"))
     {
         __instance.UpdateTakeoffLanding(dt);
         typeof(BaseAI).GetMethod("UpdateRegeneration", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy).Invoke(__instance, new object[] { dt });
         Vector3 fleeFrom   = ___m_target?.transform?.position ?? ___m_character.transform.position;
         var     methodinfo = typeof(BaseAI).GetMethod("Flee", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy);
         methodinfo.Invoke(__instance, new object[] { dt, fleeFrom });
         return(false);
     }
     return(true);
 }
Exemple #30
0
    // Start is called before the first frame update
    void Start()
    {
        ai = GetComponent <AnimalAI>();
        _animationManager = GetComponent <AnimationManager>();
        ai.CaseChanged   += OnCaseChanged;
        ai.caseDatas.Add(new CaseContainer(Case.REPRODUCTION, reproductionUrge, reproductionTreshold, 1000f, CasePriority.TOO_LOW));

        isRunning = false;
        alerted   = false;
        isVFXUsed = false;

        UpdateData();
    }