public CompetingForLove(int whichNpcIsVictim, Npc npc1, Npc npc2, Npc lover)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
     this.lover = lover;
 }
 public static string myHisHer(Npc npcReferredTo, Npc npcSpeaking)
 {
     if (npcReferredTo == npcSpeaking) return "my";
     else {
         if (npcReferredTo.gender == Npc.Gender.Male) return "his";
         else return "her";
     }
 }
 public static string getSubjectPronoun(Npc npcReferredTo, Npc npcSpeaking)
 {
     if (npcSpeaking == npcReferredTo) return "I";
     else {
         if (npcReferredTo.gender == Npc.Gender.Male) return "he";
         else return "she";
     }
 }
        public void setRelationships(Npc npc)
        {
            for (int i = 0; i < pg.npcs.Count; i++) {
                relationPanels[i].GetComponent<RelationSliderScript>().changedByUIManager = true;

                int relationLevel = pg.relationships[pg.npcs.IndexOf(npc), i];
                GameObject relationPanel = relationPanels[i];
                relationPanel.transform.FindChild("RelationSlider").GetComponent<Slider>().value = relationLevel;
                relationPanel.transform.FindChild("RelationValue").GetComponent<Text>().text = relationLevel.ToString();
            }
        }
 public void handleInteractionWith(Npc npc)
 {
     gameObject.GetComponent<UIManager>().setRelationships(npc);
     speakingNPC = npc;
     setAudioPitch();
     if (npc.isAlive) {
         NPCGreeting(npc);
     }
     else
         examineBody(npc);
 }
 public void getBody(Npc npc, GameObject go)
 {
     if (npc.gender == Npc.Gender.Male) {
         int i = Random.Range(0, maleBodies.Count);
         go.GetComponent<SpriteRenderer>().sprite = maleBodies[i];
         maleBodies.RemoveAt(i);
     } else {
         int i = Random.Range(0, femaleBodies.Count);
         go.GetComponent<SpriteRenderer>().sprite = femaleBodies[i];
         femaleBodies.RemoveAt(i);
     }
 }
        public NPCLog(Npc npc, Rect rect)
        {
            this.npc = npc;
            nameRect = rect;
            nameRect.height = 20;

            rect.height -= 20;
            rect.y = rect.y + 20;

            this.rect = rect;
            if (npc.isMurderer) { color = Color.red; }
            else if (npc.isVictim) { color = Color.cyan; }
            else { color = Color.green; }
        }
        public void kill(Npc npc, Weapon weapon)
        {
            Event e = new Murder(pg.timeSteps, this, npc, currentRoom, weapon);
            Timeline.addEvent(new Murder(pg.timeSteps, this, npc, currentRoom, weapon));
            npc.die();
            pg.murderWeapon = weapon;
            hasMurderWeapon = true;
            stress = Mathf.Min(stress + Random.Range(0.1f, 0.3f), 1.0f);

            if (pg.debugMode) Debug.Log(e.toString());
        }
 public static string selfOrNamePossessive(Npc npcReferredTo, Npc npcSpeaking)
 {
     if (npcReferredTo == npcSpeaking) return "my";
     else return npcReferredTo.firstname + "'s";
 }
 public static string selfOrName(Npc npcReferredTo, Npc npcSpeaking)
 {
     if (npcReferredTo == npcSpeaking) return "I";
     else return npcReferredTo.firstname;
 }
 public void repositionNpc(Npc npc)
 {
     List<Npc> npcs = new List<Npc>();
     npcs.Add(npc);
     placeNPCs(npcs);
 }
 public static string getSubjectPronounHave(Npc npcReferredTo, Npc npcSpeaking)
 {
     return getSubjectPronoun(npcReferredTo, npcSpeaking) + getHave(npcReferredTo, npcSpeaking);
 }
 public FiredBy(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
 void setMurderer(Npc npc)
 {
     npc.isMurderer = true;
     murderer = npc;
 }
 void NPCGreeting(Npc npc)
 {
     if (npc.lieAccusations > 0) {
         dialogType = dialog.greeting;
         displayText("Good evening detective");
     }
     else {
         dialogType = dialog.lockedOut;
         displayText("I have nothing more to say to you.");
     }
 }
        bool SpreadRumour(History history, bool truth = false, Npc npc = null)
        {
            bool rumourSpread = false;
            //Give unrelated NPCs memory of this event
            List<Npc> NpcCopy = new List<Npc>(npcs);
            NpcCopy.Remove(victim); NpcCopy.Remove(murderer); if (npc!=null) NpcCopy.Remove(npc);

            for (int i = 0; i < NpcCopy.Count; i++) {
                float random = Random.Range(0.0f, 1.0f);
                if (random < rumourSpreadChance) {
                    if (truth) npcsWhoKnowTheTruth.Add(NpcCopy[i]);
                    NpcCopy[i].addHistory(history);
                    rumourSpread = true;
                }
            }
            return rumourSpread;
        }
 public BadBreakup(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
 public StoleLover(int whichNpcIsVictim, Npc npc1, Npc npc2, Npc lover)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
     this.lover = lover;
 }
 public RejectedLove(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
 public PutOutOfBusiness(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
 public Nemeses(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
        Npc findPotentialLover(Npc seeker)
        {
            List<Npc> potentialLovers = new List<Npc>();
            Npc lover = null;

            foreach (Npc npc in npcs) {
                if (npc != murderer && npc != seeker && npc.gender != seeker.gender && npc.family != seeker.family) {
                    potentialLovers.Add(npc);
                }
            }

            //If none in the right gender exist outside the seeker's family, then create one
            if (potentialLovers.Count == 0) {
                //Find a random NPC not in the seeker's family and not the possible murderer and make them the opposite gender
                while (lover == null || lover == seeker || lover.family == seeker.family || lover == murderer) {
                    lover = npcs[Random.Range(0, npcs.Count)];
                }
                if (lover.gender == Npc.Gender.Female)
                    lover.gender = Npc.Gender.Male;
                else
                    lover.gender = Npc.Gender.Female;
            }
            //Otherwise, select one randomly from the potentials
            else {
                lover = potentialLovers[Random.Range(0, potentialLovers.Count)];
            }

            return lover;
        }
        Npc[] findSiblings()
        {
            //Find a family with two children
            int a = -1;
            int b = -1;
            Npc[] siblings = new Npc[2];

            foreach (Family family in families) {

                if (family.children.Count > 1) {
                    a = Random.Range(0, family.children.Count);
                    while (b == -1 || b == a) {
                        b = Random.Range(0, family.children.Count);
                    }
                    siblings[0] = family.children[a];
                    siblings[1] = family.children[b];
                    break;
                }
            }
            return siblings;
        }
 public static string getHave(Npc npcReferredTo, Npc npcSpeaking)
 {
     if (npcSpeaking == npcReferredTo) return "'ve";
     else return "'s";
 }
 void setVictim(Npc npc)
 {
     npc.isVictim = true;
     victim = npc;
 }
 public FamilyFeud(int whichNpcIsVictim, Npc npc1, Npc npc2)
 {
     this.whichNpcIsVictim = whichNpcIsVictim;
     this.npc1 = npc1;
     this.npc2 = npc2;
 }
        void Start()
        {
            Seed.setSeed();
            Ceilings.findCeilings();
            npcHolder = new GameObject("NPCS").transform;
            npcHolder.gameObject.AddComponent<DontDestroyOnLoad>();
            itemManager = GetComponent<ItemManager>();
            display = GetComponent<DebugRoomDisplay>();
            mansion = GetComponent<Mansion>();
            //mansion.setupRooms();

            families = new List<Family>();
            npcs = new List<Npc>();
            npcsWhoKnowTheTruth = new List<Npc>();

            relationships = new int[number_of_characters, number_of_characters];
            for (int i = 0; i < number_of_characters; i++) {
                for (int x = 0; x < number_of_characters; x++) {
                    relationships[i, x] = nullRelationship;
                }
            }

            victim = null; murderer = null;

            TestimonyManager.pg = this;
            loadNames();
            generateCharacters();
            gameObject.GetComponent<UIManager>().setupRelationPanel();
            createFamilies();
            if (motive == Motives.none) selectMotive();

            createRelationships();
            placeNPCs();
            prepareMotive();
            createRedHerrings();
            bodyFound = false;
            weaponHidden = false;
            timeSteps = 0;
        }
 void examineBody(Npc npc)
 {
     dialogType = dialog.corpse;
     displayText(npc.getFullName() + "'s lifeless body lies before you");
 }