Esempio n. 1
0
    public void AddMember(GameObject newMemberCard)
    {
        GameObject newMember = Instantiate(MemberPrefab, MemberSpawnPoint.transform);

        GuildMemberController guildMemberContr = newMember.GetComponent <GuildMemberController>();
        RecruitCardBehaviour  recruitCard      = newMemberCard.GetComponent <RecruitCardBehaviour>();

        // add stats of the recruit card to the member object
        guildMemberContr.NameMesh.text       = recruitCard.NameText.text;
        guildMemberContr.MemberMenuName.text = recruitCard.NameText.text;

        // adding, updating, childing
        GuildMembers.Add(newMember);
        guildMemberContr.SetGuild(this);

        // newMember.transform.position = MemberSpawnPoint.transform.position;
        // newMember.transform.localPosition = new Vector3(0, 0, 0);

        Vector3 SpawnOffset = new Vector3();

        SpawnOffset.x = Random.Range(-NewMemberSpawnPointRadius, NewMemberSpawnPointRadius);
        SpawnOffset.z = Random.Range(-NewMemberSpawnPointRadius, NewMemberSpawnPointRadius);
        int test = Random.Range(0, 2);

        if (test == 0)
        {
            SpawnOffset.z *= -1;
        }

        newMember.transform.localPosition += SpawnOffset;

        newMember.transform.parent = /*MemberSpawnPoint.*/ transform;

        newMember.transform.localScale = new Vector3(1, 1, 1);
    }
Esempio n. 2
0
    public void AddMemberFromVillager(VillagerBehaviour vill)
    {
        GameObject newMember = Instantiate(MemberPrefab, MemberSpawnPoint.transform);

        GuildMemberController gmContr = newMember.GetComponent <GuildMemberController>();

        gmContr.NameMesh.text       = vill.VillagerName;
        gmContr.MemberMenuName.text = vill.VillagerName;

        GuildMembers.Add(newMember);
        gmContr.SetGuild(this);

        // newMember.transform.position = MemberSpawnPoint.transform.position;
        // newMember.transform.localPosition = new Vector3(0, 0, 0);

        Vector3 SpawnOffset = new Vector3();

        SpawnOffset.x = Random.Range(-NewMemberSpawnPointRadius, NewMemberSpawnPointRadius);
        SpawnOffset.z = Random.Range(-NewMemberSpawnPointRadius, NewMemberSpawnPointRadius);
        int test = Random.Range(0, 2);

        if (test == 0)
        {
            SpawnOffset.z *= -1;
        }

        newMember.transform.localPosition += SpawnOffset;

        newMember.transform.parent = /*MemberSpawnPoint.*/ transform;

        newMember.transform.localScale = new Vector3(1, 1, 1);
    }
Esempio n. 3
0
    void QuestCompletedInfluence(Village vill, int amtInfluence)
    {
        GuildMemberController gmContr = GetComponent <GuildMemberController>();

        if (gmContr)
        {
            gmContr.NPCsGuild.AddInfluenceFor(vill.gameObject, amtInfluence);
        }
    }
Esempio n. 4
0
    protected void HandleInfluenceGot(Village vill, int influence)
    {
        PlayerController pContr = GetComponent <PlayerController>();

        if (pContr)
        {
            pContr.MyGuild.AddInfluenceFor(vill.gameObject, influence);
        }
        else
        {
            GuildMemberController gmContr = GetComponent <GuildMemberController>();
            if (gmContr)
            {
                gmContr.NPCsGuild.AddInfluenceFor(vill.gameObject, influence);
            }
        }
    }
    public void SetCouncilMemberAndName(GameObject newMember)
    {
        CouncilMember = newMember;
        GuildMemberController gmContr = CouncilMember.GetComponent <GuildMemberController>();
        VillagerBehaviour     vBehav;

        if (gmContr)
        {
            NameText.text = gmContr.NameMesh.text + " (Member of" + gmContr.NPCsGuild.GuildName + ')';
        }
        else if (vBehav = CouncilMember.GetComponent <VillagerBehaviour>())
        {
            NameText.text = vBehav.VillagerName + " (Villager)";
        }
        else if (CouncilMember.GetComponent <PlayerController>())
        {
            NameText.text = "You";
        }
    }
Esempio n. 6
0
    private void HandleDeath(GameObject source)
    {
        LootCrate.SpawnResourcesOnly(transform);


        // give influence to village
        Village toInfluenceVill = Village.GetClosestVillageTo(transform.position);

        GuildMemberController gmContr = source.GetComponent <GuildMemberController>();
        PlayerController      pContr;

        if (gmContr)
        {
            gmContr.NPCsGuild.AddInfluenceFor(toInfluenceVill.gameObject, _influenceGivenOnDeath);
        }
        else if (pContr = source.GetComponent <PlayerController>())
        {
            pContr.MyGuild.AddInfluenceFor(toInfluenceVill.gameObject, _influenceGivenOnDeath);
        }


        Destroy(gameObject);
    }
Esempio n. 7
0
    private void ItemClicked(InvItem item)
    {
        bool  canTake      = false;
        Guild PlayersGuild = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().MyGuild;

        GuildMemberController gmContr = GetComponent <GuildMemberController>();

        if (gmContr)
        {
            if (gmContr.NPCsGuild == PlayersGuild)
            {
                canTake = true;
            }
        }
        else
        {
            GuildManagementDesk gmDesk = GetComponent <GuildManagementDesk>();
            if (gmDesk)
            {
                if (gmDesk.DeskGuild == PlayersGuild)
                {
                    canTake = true;
                }
            }
        }

        if (!canTake)
        {
            Debug.Log("You can't take items from an inventory which does not belong to your guild");
            return;
        }

        Inventory targetInv = GameManager.Instance.PlayerAvatar.GetComponent <Inventory>();

        targetInv.GiveItem(item);
    }
Esempio n. 8
0
    public void HandleNPCInteract(GuildMemberController NPC)
    {
        Transform npcTransform = NPC.transform;

        if ((npcTransform.position - transform.position).sqrMagnitude <= NPCRange)
        {
            InventoryNPC npcInv = NPC.GetComponent <InventoryNPC>();

            bool isEmpty;
            int  amtCanGive = CheckCanGive(AmtHarvestAtOnce, out isEmpty);
            npcInv.AddResource(HarvestableType, amtCanGive);
            AmtResources -= amtCanGive;

            if (isEmpty)
            {
                Destroy(gameObject);
            }
            else if (_soundEffect)
            {
                _soundEffect.Stop();
                _soundEffect.Play();
            }
        }
    }
Esempio n. 9
0
    private void GiveResource(ResourceType type)
    {
        int                 amtToGive    = 0;
        int                 maxAmtToGive = 0;
        Inventory           sourceInv    = null;
        GuildManagementDesk desk         = null;

        // if this inventory is on an NPC
        GuildMemberController memberContr = GetComponent <GuildMemberController>();

        if (memberContr)
        {
            // set the source inv to the guild leader's inventory
            sourceInv = memberContr.NPCsGuild.GuildLeader.GetComponent <Inventory>();
        }
        else
        {
            // this inventory is on a desk
            desk = GetComponent <GuildManagementDesk>();
            if (desk)
            {
                // source inv is the guild leader's inventory
                sourceInv = desk.DeskGuild.GuildLeader.GetComponent <Inventory>();
            }
        }

        maxAmtToGive = sourceInv.GetAmtResource(type);

        // set amts based on which type
        switch (type)
        {
        case ResourceType.Gold:
            amtToGive = int.Parse(GoldInput.text);
            break;

        case ResourceType.Wood:
            amtToGive = int.Parse(WoodInput.text);
            break;

        case ResourceType.Stone:
            amtToGive = int.Parse(StoneInput.text);
            break;

        case ResourceType.Food:
            amtToGive = int.Parse(FoodInput.text);
            break;
        }


        if (amtToGive <= maxAmtToGive)
        {
            if (sourceInv)
            {
                // take the resources from the source inv
                sourceInv.RemoveResources(type, amtToGive);

                // add the resources to this inv
                switch (type)
                {
                case ResourceType.Gold:
                    _amtGold    += amtToGive;
                    GoldAmt.text = "Gold: " + _amtGold.ToString();
                    break;

                case ResourceType.Wood:
                    _amtWood    += amtToGive;
                    WoodAmt.text = "Amount of wood: " + _amtWood.ToString();
                    break;

                case ResourceType.Stone:
                    _amtStone    += amtToGive;
                    StoneAmt.text = "Amount of stone: " + _amtStone.ToString();
                    break;

                case ResourceType.Food:
                    _amtFood    += amtToGive;
                    FoodAmt.text = "Amount of food: " + _amtFood.ToString();
                    break;
                }
            }
        }
    }
Esempio n. 10
0
    private void TakeResource(ResourceType type)
    {
        int amtToTake    = 0;
        int maxAmtToTake = 0;

        // set amts based on which type
        switch (type)
        {
        case ResourceType.Gold:
            amtToTake    = int.Parse(GoldInput.text);
            maxAmtToTake = _amtGold;
            break;

        case ResourceType.Wood:
            amtToTake    = int.Parse(WoodInput.text);
            maxAmtToTake = _amtWood;
            break;

        case ResourceType.Stone:
            amtToTake    = int.Parse(StoneInput.text);
            maxAmtToTake = _amtStone;
            break;

        case ResourceType.Food:
            amtToTake    = int.Parse(FoodInput.text);
            maxAmtToTake = _amtFood;
            break;
        }

        // is possible to take
        if (amtToTake <= maxAmtToTake)
        {
            Inventory targetInv = null;
            // get the guild leader who probably requested this
            GuildMemberController memberContr = GetComponent <GuildMemberController>();

            // get the target inv
            if (memberContr)
            {
                targetInv = memberContr.NPCsGuild.GuildLeader.GetComponent <Inventory>();
            }
            else
            {
                GuildManagementDesk desk = GetComponent <GuildManagementDesk>();
                targetInv = desk.DeskGuild.GuildLeader.GetComponent <Inventory>();
            }

            if (targetInv)
            {
                // give the resources to the target inv
                targetInv.AddResource(type, amtToTake);

                // take the resources away from this inv
                switch (type)
                {
                case ResourceType.Gold:
                    _amtGold    -= amtToTake;
                    GoldAmt.text = "Gold: " + _amtGold.ToString();
                    break;

                case ResourceType.Wood:
                    _amtWood    -= amtToTake;
                    WoodAmt.text = "Amount of wood: " + _amtWood.ToString();
                    break;

                case ResourceType.Stone:
                    _amtStone    -= amtToTake;
                    StoneAmt.text = "Amount of stone: " + _amtStone.ToString();
                    break;

                case ResourceType.Food:
                    _amtFood    -= amtToTake;
                    FoodAmt.text = "Amount of food: " + _amtFood.ToString();
                    break;
                }
            }
        }
    }
Esempio n. 11
0
    private void HandlePlayerInteract()
    {
        if (!_menuUp && ((GameManager.Instance.PlayerAvatar.transform.position - transform.position).sqrMagnitude < PlayerInteractRange))
        {
            GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().AcceptsInput = false;
            MainMenu.SetActive(true);
            _whichMenuUp = MenuType.Main;
            _menuUp      = true;

            // Which buttons should NOT be visible?

            PlayerController pContr = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>();
            int  amtPos             = pContr.MyGuild.GetAmtCouncilPositionsFor(_vill.gameObject);
            bool playerKing         = _vill.IsKing(pContr.gameObject);

            // If the player has all five council positions and is not yet king, be able to buy king. Else not.
            if (amtPos == 5 && !_vill.IsKing(pContr.gameObject))
            {
                BuyKingPosition.gameObject.SetActive(true);
            }
            else
            {
                BuyKingPosition.gameObject.SetActive(false);
            }

            // If the player does not have all five council members yet, be able to buy council. Else not.
            if (amtPos < 5)
            {
                BuyCouncilPosition.gameObject.SetActive(true);
            }
            else
            {
                BuyCouncilPosition.gameObject.SetActive(false);
            }

            // If the player does not have any council positions at all, he can not manage them
            if (amtPos == 0)
            {
                ManageCouncilMembersButton.gameObject.SetActive(false);
            }
            else
            {
                ManageCouncilMembersButton.gameObject.SetActive(true);
            }

            // If the player is not king, he is not able to see the king menu option.
            if (playerKing)
            {
                KingDecisionsButton.gameObject.SetActive(true);
            }
            else
            {
                KingDecisionsButton.gameObject.SetActive(false);
            }

            // If there is no guildies in the council, player can not see council decisions
            bool hasGuildies = false;
            for (int i = 0; i < _vill.Council.Count; ++i)
            {
                if (_vill.Council[i])
                {
                    GuildMemberController gmContr = _vill.Council[i].GetComponent <GuildMemberController>();
                    if (gmContr)
                    {
                        if (gmContr.NPCsGuild == pContr.MyGuild)
                        {
                            hasGuildies = true;
                            break;
                        }
                    }
                }
            }

            if (hasGuildies)
            {
                CouncilDecisionsButton.gameObject.SetActive(true);
            }
            else
            {
                CouncilDecisionsButton.gameObject.SetActive(false);
            }
        }
    }
Esempio n. 12
0
    private void GuildMemberRemovedFromCouncil(CouncilMemberInfoCard card)
    {
        // re-add the guild member to the available list below
        GameObject newCard = Instantiate(AddCouncilMemberOptionCardPrefab, ManageCouncilMenuGuildMembersHolder.transform);
        AddGuildCouncilMemberCard newCardScript = newCard.GetComponent <AddGuildCouncilMemberCard>();

        newCardScript.GuildMember   = card.CouncilMember;
        newCardScript.NameText.text = card.NameText.text;


        // remove the guild member from the council
        bool found = false;

        for (int i = 0; i < _vill.Council.Count; ++i)
        {
            if (_vill.Council[i] == card.CouncilMember)
            {
                _vill.Council[i]   = null;
                card.CouncilMember = null;
                found = true;
                break;
            }
        }
        if (!found)
        {
            Debug.Log("This should never get called");
            return;
        }

        // update the council member info card
        card.RemoveButton.gameObject.SetActive(false);
        card.onRemove.RemoveAllListeners();
        card.NameText.text = "No one";

        // add the add button again to everything
        for (int i = 0; i < ManageCouncilMenuGuildMembersHolder.transform.childCount; ++i)
        {
            AddGuildCouncilMemberCard thisCard = ManageCouncilMenuGuildMembersHolder.transform.GetChild(i).GetComponent <AddGuildCouncilMemberCard>();

            thisCard.AddButton.gameObject.SetActive(true);
        }

        Guild pGuild = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().MyGuild;

        // count how many spots in the council are your guildies
        int councilSpotsOccupied = 0;

        for (int i = 0; i < _vill.Council.Count; ++i)
        {
            GameObject            thisMember = _vill.Council[i];
            GuildMemberController gmContr    = thisMember.GetComponent <GuildMemberController>();
            if (gmContr)
            {
                if (gmContr.NPCsGuild == pGuild)
                {
                    councilSpotsOccupied++;
                }
            }
        }

        if (councilSpotsOccupied == 0)
        {
            // there are no more council spots occupied by your guildies

            // remove the button
            CouncilDecisionsButton.gameObject.SetActive(false);
        }
    }
Esempio n. 13
0
    private void GuildMemberAddedToCouncil(AddGuildCouncilMemberCard card)
    {
        // find a spot to put the member

        // this button being available should mean that there is
        int freeIdx = -1;

        for (int i = 0; i < _vill.Council.Count; ++i)
        {
            if (!_vill.Council[i])
            {
                freeIdx = i;
                break;
            }
        }
        if (freeIdx == -1)
        {
            Debug.Log("This shouldn't happen");
            return;
        }

        // spot found! put the member in power
        _vill.Council[freeIdx] = card.GuildMember;

        // adapt the current council overview
        {
            // separate scope for reuse of variable names
            CouncilMemberInfoCard infoCard = CouncilMemberInfoCards[freeIdx].GetComponent <CouncilMemberInfoCard>();
            GuildMemberController gmContr  = card.GuildMember.GetComponent <GuildMemberController>();
            infoCard.NameText.text = gmContr.NameMesh.text;
            infoCard.RemoveButton.gameObject.SetActive(true);
            infoCard.onRemove.RemoveAllListeners();
            infoCard.onRemove.AddListener(GuildMemberRemovedFromCouncil);
            infoCard.CouncilMember = card.GuildMember;
        }

        // check if we should remove the "add" buttons from the list

        Guild pGuild = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().MyGuild;

        // count how many spots in the council are your guildies
        int councilSpotsOccupied = 0;

        for (int i = 0; i < _vill.Council.Count; ++i)
        {
            GameObject thisMember = _vill.Council[i];
            if (thisMember)
            {
                GuildMemberController gmContr = thisMember.GetComponent <GuildMemberController>();
                if (gmContr)
                {
                    if (gmContr.NPCsGuild == pGuild)
                    {
                        councilSpotsOccupied++;
                    }
                }
            }
        }

        // get amount of spots that are free
        int councilSpotsFree = pGuild.GetAmtCouncilPositionsFor(_vill.gameObject) - councilSpotsOccupied;

        if (councilSpotsFree == 0) // yes we should remove the add buttons
        {
            for (int i = 0; i < ManageCouncilMenuGuildMembersHolder.transform.childCount; ++i)
            {
                AddGuildCouncilMemberCard thisCard = ManageCouncilMenuGuildMembersHolder.transform.GetChild(i).GetComponent <AddGuildCouncilMemberCard>();

                thisCard.AddButton.gameObject.SetActive(false);
            }
        }

        // get rid of the card
        Destroy(card.gameObject);

        // activate the button
        CouncilDecisionsButton.gameObject.SetActive(true);
    }
Esempio n. 14
0
    private void ManageCouncilMembersClicked()
    {
        MainMenu.SetActive(false);
        CouncilManagementMenu.SetActive(true);
        _whichMenuUp = MenuType.ManageCouncil;

        // how to check for free spots in your guild's council?
        Guild pGuild = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().MyGuild;
        // count how many spots in the council are your guildies
        int councilSpotsOccupied = 0;

        for (int i = 0; i < _vill.Council.Count; ++i)
        {
            GameObject thisMember = _vill.Council[i];
            if (thisMember)
            {
                GuildMemberController gmContr = thisMember.GetComponent <GuildMemberController>();
                if (gmContr)
                {
                    if (gmContr.NPCsGuild == pGuild)
                    {
                        councilSpotsOccupied++;
                    }
                }
            }
        }

        // get amount of spots that are free
        int councilSpotsFree = pGuild.GetAmtCouncilPositionsFor(_vill.gameObject) - councilSpotsOccupied;

        // make the list
        List <GameObject> members = GameManager.Instance.PlayerAvatar.GetComponent <PlayerController>().MyGuild.GuildMembers;

        for (int i = 0; i < members.Count; ++i)
        {
            if (_vill.IsCouncilMember(members[i]))
            {
                continue;
            }

            GameObject newCard = Instantiate(AddCouncilMemberOptionCardPrefab, ManageCouncilMenuGuildMembersHolder.transform);
            newCard.transform.localPosition = new Vector3(0, 0, 0);
            newCard.transform.localScale    = new Vector3(1, 1, 1);
            newCard.transform.localRotation = new Quaternion(0, 0, 0, 0);
            AddGuildCouncilMemberCard card = newCard.GetComponent <AddGuildCouncilMemberCard>();
            card.GuildMember   = members[i];
            card.NameText.text = members[i].GetComponent <GuildMemberController>().NameMesh.text;
            card.onAdd.AddListener(GuildMemberAddedToCouncil);

            if (councilSpotsFree == 0)
            {
                card.AddButton.gameObject.SetActive(false);
            }
        }

        // Check names & types of the current Council Members
        for (int i = 0; i < CouncilMemberInfoCards.Count; ++i)
        {
            CouncilMemberInfoCard card    = CouncilMemberInfoCards[i].GetComponent <CouncilMemberInfoCard>();
            GameObject            cMember = _vill.Council[i];
            card.CouncilMember = cMember;

            if (cMember)
            {
                VillagerBehaviour     vBehav = cMember.GetComponent <VillagerBehaviour>();
                GuildMemberController gmContr;
                if (vBehav)
                {
                    card.NameText.text = vBehav.VillagerName + " (Villager)";
                    card.RemoveButton.gameObject.SetActive(false);
                }
                else if (gmContr = cMember.GetComponent <GuildMemberController>())
                {
                    card.NameText.text = gmContr.NameMesh.text + " (Member of " + gmContr.NPCsGuild.GuildName + ')';
                    if (pGuild == gmContr.NPCsGuild)
                    {
                        card.RemoveButton.gameObject.SetActive(true);
                    }
                    else
                    {
                        card.RemoveButton.gameObject.SetActive(false);
                    }
                }
                else if (cMember.GetComponent <PlayerController>())
                {
                    card.NameText.text = "You";
                    card.RemoveButton.gameObject.SetActive(true);
                }
            }
            else
            {
                card.NameText.text = "No one";
                card.RemoveButton.gameObject.SetActive(false);
            }

            card.onRemove.RemoveAllListeners();
            card.onRemove.AddListener(GuildMemberRemovedFromCouncil);
        }
    }