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); }
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); }
void QuestCompletedInfluence(Village vill, int amtInfluence) { GuildMemberController gmContr = GetComponent <GuildMemberController>(); if (gmContr) { gmContr.NPCsGuild.AddInfluenceFor(vill.gameObject, amtInfluence); } }
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"; } }
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); }
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); }
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(); } } }
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; } } } }
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; } } } }
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); } } }
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); } }
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); }
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); } }