예제 #1
0
 /// <summary>
 /// Removes NPC from the queue to the toilet.
 /// </summary>
 public void RemoveFromQueue(DAS.NPCMovement dasNpcMovement)
 {
     //Debug.Log(dasNpcMovement.name + " is being removed from queue");
     s_npcAssignedToToilet[dasNpcMovement].occupier = null;
     s_npcAssignedToToilet[dasNpcMovement].toiletQueue.Remove(dasNpcMovement);
     s_npcAssignedToToilet.Remove(dasNpcMovement);
     dasNpcMovement.isQueued = false;
 }
예제 #2
0
        /// <summary>
        /// NPCs destination becomes one of the toilets in the scene.
        /// </summary>
        public void GotoToilet(DAS.NPCMovement dasNpcMovement)
        {
            s_npcAssignedToToilet[dasNpcMovement].occupier = dasNpcMovement;

            dasNpcMovement.m_agentRef.destination = s_npcAssignedToToilet[dasNpcMovement].gameObject.transform.position;
            dasNpcMovement.isAtToilet             = true;
            dasNpcMovement.timeInsideDestination  = 0;
            dasNpcMovement.m_agentRef.isStopped   = false;
        }
예제 #3
0
 /// <summary>
 /// Checks if NPC is within 0.2 units within its' assigned toilet.
 /// </summary>
 public bool IsInsideToilet(DAS.NPCMovement dasNpcMovement)
 {
     if (Vector3.Distance(dasNpcMovement.m_agentRef.destination, s_npcAssignedToToilet[dasNpcMovement].gameObject.transform.position) < 0.2f)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #4
0
        /// <summary>
        /// NPCs destination becomes one of the toilets in the scene.
        /// </summary>
        private bool TryGotoToilet(DAS.NPCMovement dasNpcMovement)
        {
            if (s_npcAssignedToToilet.ContainsKey(dasNpcMovement))
            {
                Debug.LogWarning("Something went bad");
            }

            AddToQueue(dasNpcMovement, NextToilet);
            dasNpcMovement.timeInsideDestination = 0;
            StartCoroutine(StandInLine(dasNpcMovement));
            return(false);
        }
예제 #5
0
        /// <summary>
        /// Coroutine function for standing in line to the toilet.
        /// </summary>
        private IEnumerator StandInLine(DAS.NPCMovement dasNpcMovement)
        {
            dasNpcMovement.m_agentRef.isStopped = false;
            do
            {
                yield return(new WaitForSeconds(0.2f));

                do
                {
                    yield return(new WaitForSeconds(0.2f));

                    //1. if not first in queue and a queue exists.
                    if (s_npcAssignedToToilet[dasNpcMovement].toiletQueue.IndexOf(dasNpcMovement) > 0 && s_npcAssignedToToilet[dasNpcMovement].toiletQueue.Count > 0)
                    {
                        //2. Which side of the toilets?
                        if (s_npcAssignedToToilet[dasNpcMovement] == s_toiletPoints[0])
                        {
                            dasNpcMovement.m_agentRef.destination = toiletObject1.queue.transform.position +
                                                                    toiletObject1.queue.transform.forward +
                                                                    (-toiletObject1.queue.transform.forward * s_npcAssignedToToilet[dasNpcMovement].toiletQueue.IndexOf(dasNpcMovement));
                        }
                        else
                        {
                            dasNpcMovement.m_agentRef.destination = toiletObject2.queue.transform.position +
                                                                    toiletObject2.queue.transform.forward +
                                                                    (-toiletObject2.queue.transform.forward * s_npcAssignedToToilet[dasNpcMovement].toiletQueue.IndexOf(dasNpcMovement));
                        }
                    }
                    else //1. else if not first in queue and a queue exists.
                    //2. Which side of the toilets?
                    if (s_npcAssignedToToilet[dasNpcMovement] == s_toiletPoints[0])
                    {
                        dasNpcMovement.m_agentRef.destination = toiletObject1.queue.transform.position + toiletObject1.queue.transform.forward;
                    }
                    else
                    {
                        dasNpcMovement.m_agentRef.destination = toiletObject2.queue.transform.position + toiletObject2.queue.transform.forward;
                    }
                } while (s_npcAssignedToToilet[dasNpcMovement].toiletQueue[0] != dasNpcMovement);
            } while (s_npcAssignedToToilet[dasNpcMovement].broken);
            GotoToilet(dasNpcMovement);
        }
예제 #6
0
        /// <summary>
        /// Called in Update.
        /// Random Chance of NPC wanting to go to the toilet.
        /// </summary>
        public void RandomGotoToiletChance(DAS.NPCMovement dasNpcMovement)
        {
            if (Random.Range(0f, 1000f) > 999.3f && dasNpcMovement.IsCurrentlyWorking && dasNpcMovement.workTimeStreak >= 100)
            {
                bool allowedToilet = true;

                if (s_npcAssignedToToilet.ContainsKey(dasNpcMovement) || dasNpcMovement.isQueued)
                {
                    allowedToilet = false;
                }

                if (allowedToilet)
                {
                    dasNpcMovement.isQueued = true;
                    if (TryGotoToilet(dasNpcMovement))
                    {
                    }
                }
            }
        }
예제 #7
0
 /// <summary>
 /// Adds an NPC to the toilet queue.
 /// </summary>
 private void AddToQueue(DAS.NPCMovement dasNpcMovement, Toilet toiletToQueue)
 {
     //Debug.Log(dasNpcMovement.name + " is being added to queue");
     s_npcAssignedToToilet.Add(dasNpcMovement, toiletToQueue);
     s_npcAssignedToToilet[dasNpcMovement].toiletQueue.Add(dasNpcMovement);
 }
예제 #8
0
        private void Start()
        {
            /// Add ourself to list
            s_npcList.Add(this);

            /// Assign Values
            if (NPC.s_npcList.Count % 4 == 3)
            {
                myFeelings = new Feelings(0.2f, 0.2f);
            }
            else
            {
                myFeelings = new Feelings(1f, 1f);
            }

            Random.State oldState = Random.state;
            Random.InitState(name.Length);
            m_myHappinessDecay  = Random.Range(150, 250);
            m_myMotivationDecay = Random.Range(140, 240);
            //Debug.Log(name.Length + ": mhd->" + myHappinessDecay + " mmd->" + myMotivationDecay);
            Random.state = oldState;

            /// Get Components
            foreach (var item in GetComponentsInChildren <Slider>())
            {
                if (item.gameObject.name == "Happiness Slider")
                {
                    happySlider = item;
                }
                else if (item.gameObject.name == "Motivation Slider")
                {
                    motivationSlider = item;
                }
            }

            /// Add Components
            moveRef        = gameObject.AddComponent <DAS.NPCMovement>();
            m_modelChanger = gameObject.AddComponent <ModelChanger>();
            buttonRef      = gameObject.AddComponent <NpcButtons>();
            buttonRef.InitNpcButtons();
            buttonTogglerRef = gameObject.AddComponent <ButtonToggler>();
            buttonTogglerRef.InitButtonToggler();

            m_nameHolder = new GameObject("Name Holder");
            m_nameHolder.transform.parent = gameObject.transform;
            m_myNameDisplay = m_nameHolder.AddComponent <TextMesh>();

            /// Text
            if (m_myNameDisplay != null)
            {
                m_myNameDisplay.text                = name;
                m_myNameDisplay.alignment           = TextAlignment.Center;
                m_myNameDisplay.anchor              = TextAnchor.MiddleCenter;
                m_myNameDisplay.transform.position  = transform.position;
                m_myNameDisplay.transform.position += new Vector3(0, 3, 0);
                m_myNameDisplay.transform.forward   = Camera.main.transform.forward;
                m_myNameDisplay.transform.Rotate(0, 180, 0);
                m_myNameDisplay.characterSize = 0.03f;
                m_myNameDisplay.fontSize      = 155;
            }

            /// Material
            m_myMaterials         = GetComponentInChildren <MeshRenderer>().materials;
            m_moneyMaterial       = new Material(m_myMaterials[0]);
            m_moneyMaterial.color = Color.green;
        }