public void SetItemsWindow(int numberOfItem, bool isItemAdding, RobberyType robberyType, int locationNum) { number = numberOfItem; isAdding = isItemAdding; robType = robberyType; locNum = locationNum; itemImage.sprite = itemOptions.GetComponent <ItemsOptions>().itemsSprites[number]; itemName.text = ItemsOptions.GetItemData(number)[ItemProperty.name]; countSlider.interactable = true; addRemoveButton.interactable = false; if (isAdding) { buttonText.text = "Добавить"; countSlider.maxValue = DataScript.SData.ItemsCount[numberOfItem] <= 10 ? DataScript.SData.ItemsCount[numberOfItem] : 10; } else { buttonText.text = "Убрать"; countSlider.maxValue = DataScript.EData.RobberiesData[robType][locNum].Items[number] <= 10 ? DataScript.EData.RobberiesData[robType][locNum].Items[number] : 10; } countSlider.value = 0; countText.text = "0"; itemsWindowObject.transform.SetAsLastSibling(); itemsWindowObject.SetActive(true); }
public static NightEvent GetRandomEvent(RobberyType robberyType) { int eventsCount = m_nightEventsCollection[robberyType].Length; int randomNumber = Random.Range(0, eventsCount); //Avoid repetitions while it is possible if (m_usedEvents.ContainsKey(robberyType)) { if (m_usedEvents[robberyType].Count < eventsCount) { while (m_usedEvents[robberyType].Contains(eventsCount)) { randomNumber++; if (randomNumber >= eventsCount) { randomNumber = 0; } } } m_usedEvents[robberyType].Add(randomNumber); } else { m_usedEvents.Add(robberyType, new List <int> { randomNumber }); } return(m_nightEventsCollection[robberyType][randomNumber]); }
public void TryToAddCharacterToRobbery(Character character, RobberyType robType, int locNum) { if (character.Stats.Health <= 10) { EventButtonDetails yesButton = new EventButtonDetails { buttonText = "Да мне плевать", action = () => { DataScript.EData.RobberiesData[robType][locNum].AddCharacter(character); } }; EventButtonDetails noButton = new EventButtonDetails { buttonText = "Ладно, отдыхай", action = UIManager.modalPanel.ClosePanel }; ModalPanelDetails details = new ModalPanelDetails { button0Details = yesButton, button1Details = noButton, imageSprite = character.Sprite, text = "Босс, может мне лучше в больницу?", titletext = character.Name }; UIManager.modalPanel.CallModalPanel(details); } else if (character.Status == CharacterStatus.Normal) { DataScript.EData.RobberiesData[robType][locNum].AddCharacter(character); } }
public static NightEvent[] GetEventsForRobberyType(RobberyType robberyType) { if (m_xmlDoc == null) { GetNightEventsCollectionData(); } XmlNode eventsOfNeededType = m_xmlDoc.SelectSingleNode("./eventsCollection/robbery[@type='" + robberyType.ToString("d").ToLower() + "']"); int eventsCount = eventsOfNeededType.ChildNodes.Count; NightEvent[] nightEvents = new NightEvent[eventsCount]; for (int eventNumber = 0; eventNumber < eventsCount; eventNumber++) { nightEvents[eventNumber] = new NightEvent(); XmlNode eventRootNode = eventsOfNeededType.SelectSingleNode("./event[@id='" + eventNumber + "']"); if (eventRootNode.SelectSingleNode("./node") != null) { nightEvents[eventNumber].RootNode = ParseEventRandomTree(eventRootNode.SelectSingleNode("./node"), robberyType); } nightEvents[eventNumber].Success = ParseEventRandomTree(eventRootNode.SelectSingleNode("./success"), robberyType); nightEvents[eventNumber].Fail = ParseEventRandomTree(eventRootNode.SelectSingleNode("./fail"), robberyType); } return(nightEvents); }
private void AssignNightEventDataToWindow(NightRobberyData rData, float time) { UnityAction windowSetUpMethod; RobberyType rt = rData.Robbery.RobberyType; int ln = rData.Robbery.LocationNum; Vector2 windowPostion = RobberiesManager.Instance.Robberies[rt][ln].transform.localPosition; switch (rData.Status) { case EventStatus.Success: windowSetUpMethod = () => UIManager.nightEventWindow.ShowSuccess(rData.nightEvent.Success, rData.Awards, rData.Money, windowPostion); RobberiesManager.Instance.AddNightEvent(rData.Robbery.RobberyType, rData.Robbery.LocationNum, windowSetUpMethod, EventStatus.Success, time); break; case EventStatus.Fail: windowSetUpMethod = () => UIManager.nightEventWindow.ShowFail(rData.nightEvent.Fail, windowPostion); RobberiesManager.Instance.AddNightEvent(rData.Robbery.RobberyType, rData.Robbery.LocationNum, windowSetUpMethod, EventStatus.Fail, time); break; case EventStatus.InProgress: windowSetUpMethod = () => UIManager.nightEventWindow.ShowChoice(rData.nightEvent.RootNode, windowPostion); RobberiesManager.Instance.AddNightEvent(rData.Robbery.RobberyType, rData.Robbery.LocationNum, windowSetUpMethod, EventStatus.InProgress, time); break; } }
public void CustomizeRobbery(int num, RobberyType robType) { m_number = num; m_robberyType = robType; m_robbery = DataScript.EData.RobberiesData[robType][m_number]; SetCounter(); }
public static Robbery GetRandomRobbery(RobberyType robberyType, int locationNum) { int rndRang = 0; switch (robberyType) { case RobberyType.DarkStreet: rndRang = 1; break; case RobberyType.Stall: rndRang = Random.Range(1, 3); break; case RobberyType.House: rndRang = Random.Range(2, 4); break; case RobberyType.Shop: rndRang = Random.Range(3, 5); break; case RobberyType.Band: rndRang = Random.Range(4, 6); break; } int[] stats = GetRandomRobberyStats(rndRang); return(new Robbery(robberyType: robberyType, locationNum: locationNum, strength: stats[0], agility: stats[1], skill: stats[2], luck: stats[3])); }
public void AddToHospital() { m_status = CharacterStatus.Hospital; m_statusValue = m_characterStats.Health; m_robType = RobberyType.None; m_boostCoef = 1; m_locNum = -1; OnStatsChangedEvent(); }
public void AddToRobbery(RobberyType robberyType, int locationNum) { m_status = CharacterStatus.Robbery; m_statusValue = 0; m_robType = robberyType; m_boostCoef = -1; m_locNum = locationNum; OnStatsChangedEvent(); }
public void SetDefaultStatus() { m_status = CharacterStatus.Normal; m_statusValue = 0; m_robType = RobberyType.None; m_boostCoef = -1; m_locNum = -1; OnStatsChangedEvent(); }
private IEnumerator NightEvents() { while (GetEventNum(out m_currentEventNum)) { Debug.Log("Call robbery event: " + m_currentEventNum); NightRobberyData rob = m_robberies[m_currentEventNum]; //todo: implement event for that RobberyType rt = rob.Robbery.RobberyType; int ln = rob.Robbery.LocationNum; MapController.Instance.MoveToPosition(RobberiesManager.Instance.Robberies[rt][ln].LocalPosition); if (rob.nightEvent.RootNode != null) { AssignNightEventDataToWindow(rob, eventTime); yield return(new WaitForSeconds(eventTime)); if (NightEventWindow.Choice == -1) { MakeChoice(Random.Range(0, rob.nightEvent.RootNode.Buttons.Count)); } RobberiesManager.Instance.ResetNightEvent(rob.Robbery.RobberyType, rob.Robbery.LocationNum); ApplyChangesAfterChoice(m_currentEventNum); if (rob.nightEvent.RootNode.Buttons[NightEventWindow.Choice].NextEventNode != null) { rob.nightEvent.RootNode = rob.nightEvent.RootNode.Buttons[NightEventWindow.Choice].NextEventNode; } else { rob.nightEvent.RootNode = null; } } else { if (GetResult(m_currentEventNum) == false) { rob.SetAsFailed(); } else { rob.SetAsSuccesfull(); } AssignNightEventDataToWindow(rob, eventTime); yield return(new WaitForSeconds(eventTime)); if (NightEventWindow.Choice == -1) { MakeChoice(0); } RobberiesManager.Instance.ResetNightEvent(rob.Robbery.RobberyType, rob.Robbery.LocationNum); rob.nightEvent = null; } UIManager.nightEventWindow.CloseWindow(); } FinishNight(); }
public void AddToPolice() { m_status = CharacterStatus.Arrested; m_statusValue = CharactersOptions.MaxOpposition - m_characterStats.Fear; m_robType = RobberyType.None; m_boostCoef = 0; m_locNum = -1; OnStatsChangedEvent(); }
//Constructor public Robbery(RobberyType robberyType, int locationNum, int strength, int agility, int skill, int luck) { m_robberyType = robberyType; m_locationNum = locationNum; m_strength = strength; m_agility = agility; m_skill = skill; m_luck = luck; Items = new Dictionary <int, int>(); }
public void RemoveAllItemsFromRoobbery(RobberyType robberyType, int locationNum) { if (DataScript.EData.RobberiesData[robberyType][locationNum].Items != null) { foreach (var item in DataScript.EData.RobberiesData[robberyType][locationNum].Items) { DataScript.SData.ItemsCount[item.Key] += item.Value; Debug.Log(DataScript.SData.ItemsCount[item.Key]); } DataScript.EData.RobberiesData[robberyType][locationNum].Items.Clear(); } }
public void RemoveItemFromRobberyAndUpdate(int itemNumber, int itemCount, RobberyType robberyType, int locationNum) { DataScript.SData.ItemsCount[itemNumber] += itemCount; if (DataScript.EData.RobberiesData[robberyType][locationNum].Items[itemNumber] == itemCount) { DataScript.EData.RobberiesData[robberyType][locationNum].Items.Remove(itemNumber); } else { DataScript.EData.RobberiesData[robberyType][locationNum].Items[itemNumber] -= itemCount; } UpdateItems(); UIManager.itemsPanel.UpdateSingleItemWithAnimation(itemNumber); }
public Character(CharacterStats characterStats, Sex sex, int level, int spriteId, int nameId, int historyId) { m_characterStats = characterStats; m_sex = sex; m_level = level; m_status = CharacterStatus.Normal; m_robType = RobberyType.None; m_statusValue = 0; m_boostCoef = -1; m_locNum = -1; SpriteId = spriteId; NameId = nameId; HistoryId = historyId; }
public void AddItemToRobberyAndUpdate(int itemNumber, int itemCount, RobberyType robberyType, int locationNum) { DataScript.SData.ItemsCount[itemNumber] -= itemCount; if (DataScript.EData.RobberiesData[robberyType][locationNum].Items.ContainsKey(itemNumber)) { DataScript.EData.RobberiesData[robberyType][locationNum].Items[itemNumber] += itemCount; } else { DataScript.EData.RobberiesData[robberyType][locationNum].Items.Add(itemNumber, itemCount); } if (robberyWindowObject.activeInHierarchy) { UpdateItems(); } UIManager.itemsPanel.UpdateSingleItemWithAnimation(itemNumber); }
public void SetRobberyWindow(RobberyType robberyType, int locationNumber) { this.robType = robberyType; this.locationNum = locationNumber; robberyData = DataScript.EData.RobberiesData[robberyType][locationNumber]; UpdateCharacters(); UpdateItems(); robberyImage.sprite = RobberiesOptions.Instance.RobberySprites[(int)robType]; descriptionText.text = RobberiesOptions.GetRobberyDescription(robType); nameText.text = RobberiesOptions.GetRobberyName(robType); robberyWindowObject.SetActive(true); robberyWindowObject.transform.SetAsLastSibling(); DataScript.EData.RobberiesData[robType][locationNum].OnAddToRobEvent += OnAddReaction; DataScript.EData.RobberiesData[robType][locationNum].OnRemoveFromRobEvent += OnRemoveReaction; }
public void DropToRobberyUpdate() { if (Input.GetMouseButtonUp(0)) { if (isEntered) { RobberyCustomization robCust = gameObject.GetComponent <RobberyCustomization>(); int locNum = robCust.Number; RobberyType robType = robCust.RobberyType; if (Drag.ItemType == DraggeableItemType.Character) { CharacterCustomization charCust; Drop.DropObject(out charCust); if (charCust != null) { if (charCust.Character.Status == CharacterStatus.Normal) { UIManager.robberyWindow.TryToAddCharacterToRobbery(charCust.Character, robType, locNum); } } isEntered = false; } if (Drag.ItemType == DraggeableItemType.Item) { ItemCustomization iCust; Drop.DropObject(out iCust); if (iCust != null) { UIManager.robberyWindow.TryToAddItemToRobbery(iCust.number, robType, locNum); } } isEntered = false; } } }
public static string GetRobberyFullDescription(RobberyType robberyType) { return(m_robberiesCollection.Robberies[(int)robberyType].DescriptionFull); }
public static string GetRobberyName(RobberyType robberyType) { return(m_robberiesCollection.Robberies[(int)robberyType].Name); }
private static float CalculateBanditsStats(Robbery robbery, out List <Trait> chanceTraits) { int count = 0; RobberyType rType = robbery.RobberyType; chanceTraits = new List <Trait>(); List <Trait> groupTraits = new List <Trait>(); float cStrength = 0; float cAgility = 0; float cSkill = 0; float cLuck = 0; float cFear = 0; foreach (Character character in robbery.Characters) { count++; float coefStr = 1, coefAg = 1, coefSk = 1, coefL = 1, coefF = 1; if (character.GetType() == typeof(SpecialCharacter)) { SpecialCharacter spChar = (SpecialCharacter)character; foreach (Trait trait in spChar.Traits) { //При редактировании трейтов ДОБАВИТЬ ИХ СЮДА!!!!! switch (trait.traitType) { case TraitType.single: switch (trait.stat) { case Stat.strenght: coefStr = trait.value; break; case Stat.luck: coefL = trait.value; break; case Stat.fear: coefF = trait.value; break; case Stat.skill: coefSk = trait.value; break; case Stat.agility: coefAg = trait.value; break; } break; case TraitType.group: groupTraits.Add(trait); break; case TraitType.chance: chanceTraits.Add(trait); break; } } } cStrength += (character.Stats.Strength * coefStr); cAgility += (character.Stats.Agility * coefAg); cSkill += (character.Stats.Skill * coefSk); cLuck += (character.Stats.Luck * coefL); cFear += (character.Stats.Fear * coefF); } foreach (Trait groupTrait in groupTraits) { switch (groupTrait.stat) { case Stat.strenght: cStrength *= groupTrait.value; break; case Stat.luck: cLuck *= groupTrait.value; break; case Stat.fear: cFear *= groupTrait.value; break; case Stat.skill: cSkill *= groupTrait.value; break; case Stat.agility: cAgility *= groupTrait.value; break; } } return ((cStrength * m_robberiesCollection.Robberies[(int)rType].StrenghtInfluence + cLuck * m_robberiesCollection.Robberies[(int)rType].LuckInfluence + cAgility * m_robberiesCollection.Robberies[(int)rType].AgilityInfluence + cSkill * m_robberiesCollection.Robberies[(int)rType].SkillInfluence) * (1 - cFear / (110 * count))); }
public static Dictionary <int, int> GetRobberyAwardsAtTheCurrentMoment(RobberyType robberyType) { return(new Dictionary <int, int> { { Random.Range(0, 3), Random.Range(0, 3) } }); }
public static int GetRobberyMoneyRewardAtTheCurrentMoment(RobberyType robberyType) { return(1000); }
//void Update() public void DropToRobberyWindowUpdate() { if (Input.GetMouseButtonUp(0)) { if (isEntered) { int locNum = RobberyWindow.robberyData.LocationNum; RobberyType robType = RobberyWindow.robberyData.RobberyType; if (Drag.ItemType == DraggeableItemType.Character) { CharacterCustomization charCust; Drop.DropObject(out charCust); if (charCust != null) { if (charCust.Character.Status == CharacterStatus.Normal) { UIManager.robberyWindow.TryToAddCharacterToRobbery(charCust.Character, robType, locNum); } } } if (Drag.ItemType == DraggeableItemType.Item) { ItemCustomization iCust; Drop.DropObject(out iCust); if (iCust != null) { if (Drag.Location == DraggableObjectsLocations.itemsPanel) { UIManager.robberyWindow.TryToAddItemToRobbery(iCust.number, robType, locNum); } } } isEntered = false; } else //if pointer exited { if (Drag.ItemType == DraggeableItemType.Character) { CharacterCustomization charCust; Drop.DropObject(out charCust); if (charCust.Character.Status == CharacterStatus.Robbery) { if (Drag.Location == DraggableObjectsLocations.robbery) { RobberyWindow.robberyData.RemoveCharacter(charCust.Character); } } } if (Drag.ItemType == DraggeableItemType.Item) { ItemCustomization iCust; Drop.DropObject(out iCust); if (Drag.Location == DraggableObjectsLocations.robbery) { UIManager.robberyWindow.TryToRemoveItemFromRobbery(iCust.number, RobberyWindow.robberyData.RobberyType, RobberyWindow.robberyData.LocationNum); } } isEntered = false; } } }
public void ActivateRobbery(RobberyType robType, int locationNum) { m_robberies[robType][locationNum].ActivateRobbery(true); }
public void AddNightEvent(RobberyType robType, int locationNum, UnityAction windowSettings, EventStatus eventStatus, float eventTime) { m_robberies[robType][locationNum].AddNightEvent(windowSettings, eventStatus, eventTime); }
/// <summary>Get night event tree with random nodes from "NightEventsCollectionData.xml"</summary> /// <param name="eventNode">A root node of event in "NightEventsCollectionData.xml"</param> public static NightEventNode ParseEventRandomTree(XmlNode eventNode, RobberyType robberyType) { NightEventNode nightEvent = new NightEventNode(); foreach (XmlNode info in eventNode) { switch (info.Name) { case "text": nightEvent.Description = info.InnerText; break; case "sprite": foreach (XmlNode spriteInfo in info) { if (spriteInfo.Name == "spriteType") { switch (spriteInfo.InnerText) { case "people": nightEvent.SpriteType = SpriteType.People; break; case "characters": nightEvent.SpriteType = SpriteType.Characters; break; case "items": nightEvent.SpriteType = SpriteType.Items; break; case "places": nightEvent.SpriteType = SpriteType.Places; break; case "robberies": nightEvent.SpriteType = SpriteType.Robberies; break; default: Debug.LogError("No \"" + spriteInfo.InnerText + "\" sprite type exists! Check NightEventsCollectionData.xml or SpriteType enum"); nightEvent.SpriteType = SpriteType.None; break; } } if (spriteInfo.Name == "spriteId") { nightEvent.SpriteId = int.Parse(spriteInfo.InnerText); } } break; case "button": if (nightEvent.Buttons == null) { nightEvent.Buttons = new List <NightEventButtonDetails>(); } NightEventButtonDetails button = new NightEventButtonDetails(); foreach (XmlNode buttonInfo in info) { if (buttonInfo.Name == "text") { button.ButtonText = buttonInfo.InnerText; } if (buttonInfo.Name == "effect") { button.Effect = int.Parse(buttonInfo.InnerText); } if (buttonInfo.Name == "policeEffect") { button.PoliceEffect = int.Parse(buttonInfo.InnerText); } if (buttonInfo.Name == "hospitalEffect") { button.HospitalEffect = int.Parse(buttonInfo.InnerText); } if (buttonInfo.Name == "healthAffect") { button.HealthAffect = int.Parse(buttonInfo.InnerText); } if (buttonInfo.Name == "policeKnowledge") { button.PoliceKnowledge = int.Parse(buttonInfo.InnerText); } if (buttonInfo.Name == "award") { int itemId; if (int.TryParse(buttonInfo.Attributes["itemId"].Value, out itemId)) { if (button.Awards == null) { button.Awards = new Dictionary <int, int>(); } { if (!button.Awards.ContainsKey(itemId)) { button.Awards.Add(itemId, int.Parse(buttonInfo.InnerText)); } else { button.Awards[itemId] += int.Parse(buttonInfo.InnerText); } } ; } } if (buttonInfo.Name == "money") { button.Money = int.Parse(buttonInfo.InnerText); } } if (info.SelectSingleNode("./node") != null) //is button contains next nodes { button.NextEventNode = ParseEventRandomTree(info.SelectNodes("./node")[UnityEngine.Random.Range(0, info.SelectNodes("./node").Count)], robberyType); //Recursion } nightEvent.Buttons.Add(button); break; } ; } return(nightEvent); }
public int GetCharacterSpriteId(RobberyType robberyType, int locationNum) { return(0); }
public void ResetNightEvent(RobberyType robType, int locationNum) { m_robberies[robType][locationNum].ResetNightEvent(); }