public BirthMark(BirthMarkData birthMarkData) { this.name = birthMarkData.name; this.spritePath = birthMarkData.spritePath; this.tier = birthMarkData.tier; this.level = UnityEngine.Random.Range(1, birthMarkData.effectValues.Count + 1); this.type = birthMarkData.GetType(); }
public override void Initialize <T>(T data, bool isWink) { birthMarkData = data as BirthMarkData; this.isWink = isWink; GetComponent <Image>().sprite = Resources.Load <Sprite>(birthMarkData.spritePath); SetDescription(); }
void ApplyBirthMarkStats() { BirthMark[] statsBirthMarks = birthMarks.Where(bm => bm.type == typeof(IncreaseSTATSBirthMark).ToString()).ToArray(); foreach (BirthMark birthMark in statsBirthMarks) { BirthMarkData birthMarkData = LoadManager.Instance.allBirthMarkData[birthMark.name]; FieldInfo fInfo = typeof(Character.AllStats).GetField(((IncreaseSTATSBirthMark)birthMarkData).statToIncrease.ToLower()); int oldStat = (int)fInfo.GetValue(this.stats); fInfo.SetValue(this.stats, Mathf.RoundToInt(oldStat * (1 + birthMarkData.effectValues[birthMark.level - 1]))); } }
float GetTotalProduction(KeyValuePair <string, int> production, List <Character> characters) { StringBuilder log = new StringBuilder(); log.AppendLine($"{Constant.TimeCycle.RESOURCE_UPDATE_CYCLE} seconds passed. Base Production of {builder.Type}[ID : {builder.ID}] is {production.Value}"); float finalUpdatedAmount = production.Value; foreach (Character character in characters) { float productionAmount = character.Stats.speed * 0.2f; List <Character.BirthMark> birthMarks = character.BirthMarks.Where(bm => bm.type == typeof(IncreaseProductionOnBuildingBirthMark).ToString()).ToList(); Debug.Log(string.Concat(birthMarks.Select(b => b.type.ToString()))); if (birthMarks.Count == 0) { continue; } Debug.Log($"{birthMarks.Count}"); List <BirthMarkData> birthMarkDatas = new List <BirthMarkData>(); birthMarks.ForEach((bm) => { BirthMarkData birthMarkData = LoadManager.Instance.allBirthMarkData[bm.name]; Debug.Log($"{birthMarkData.name}"); if (birthMarkData != null) { birthMarkDatas.Add(ObjectCopier.Clone <BirthMarkData>(birthMarkData)); birthMarkDatas[birthMarkDatas.Count - 1].level = bm.level; } }); log.AppendLine($"{character.Name} : speed = {character.Stats.speed} increases {character.Stats.speed * 0.2f}"); Debug.Log($"{string.Concat(birthMarkDatas.Select(b => ((IncreaseProductionOnBuildingBirthMark)b).buildingType))}"); birthMarkDatas.Where(bData => ((IncreaseProductionOnBuildingBirthMark)bData).buildingType.ToArray().Contains(builder.Type)).ToList().ForEach((bData) => { log.AppendLine($"Affected BirthMarks are {bData.name}(Level{bData.level}) increase {productionAmount * bData.effectValues[bData.level]}"); productionAmount += productionAmount * bData.effectValues[bData.level]; }); finalUpdatedAmount += productionAmount; log.AppendLine($"Total production : {finalUpdatedAmount}"); Debug.Log($"{log}"); } return(finalUpdatedAmount); }
void UpdateInformation() { GameObject characterImage = transform.Find("MainPanel/InformationPanel/CharacterImage").gameObject; characterImage.GetComponent <Image>().sprite = Resources.Load <Sprite>(character.spritePath); GameObject statsPanel = transform.Find("MainPanel/InformationPanel/StatusPanel/STATS").gameObject; statsPanel.transform.parent.Find("Name").GetComponent <Text>().text = "<color=green>Name</color> : " + character.Name; statsPanel.transform.parent.Find("Gender").GetComponent <Text>().text = "<color=green>Gender</color> : " + character.Gender.ToString(); statsPanel.transform.parent.Find("Level").GetComponent <Text>().text = "<color=green>Level</color> : " + character.level; statsPanel.transform.Find("Immunity").GetComponent <Text>().text = $"Immunity :\t{character.Stats.immunity} + <color=red>{character.equipments.Sum(e => e.Stats.immunity)}</color>"; statsPanel.transform.Find("Craftsmanship").GetComponent <Text>().text = $"Craftsmanship :\t{character.Stats.craftsmanship} + <color=red>{character.equipments.Sum(e => e.Stats.craftsmanship)}</color>"; statsPanel.transform.Find("Intelligence").GetComponent <Text>().text = $"Intelligence :\t{character.Stats.intelligence} + <color=red>{character.equipments.Sum(e => e.Stats.intelligence)}</color>"; statsPanel.transform.Find("Strength").GetComponent <Text>().text = $"Strength :\t{character.Stats.strength} + <color=red>{character.equipments.Sum(e => e.Stats.strength)}</color>"; statsPanel.transform.Find("Perception").GetComponent <Text>().text = $"Perception :\t{character.Stats.perception} + <color=red>{character.equipments.Sum(e => e.Stats.perception)}</color>"; statsPanel.transform.Find("Luck").GetComponent <Text>().text = $"Luck :\t{character.Stats.luck} + <color=red>{character.equipments.Sum(e => e.Stats.luck)}</color>"; statsPanel.transform.Find("Speed").GetComponent <Text>().text = $"Speed :\t{character.Stats.speed} + <color=red>{character.equipments.Sum(e => e.Stats.speed)}</color>"; Text statsPointText = statsPanel.transform.Find("StatsPoint").GetComponent <Text>(); Transform birthMarkContainer = transform.Find("MainPanel/InformationPanel/StatusPanel/BrithMarkPanel/Container"); foreach (Transform transform in birthMarkContainer) { Destroy(transform.gameObject); } foreach (Character.BirthMark birthMark in character.BirthMarks) { BirthMarkData birthMarkData = ObjectCopier.Clone(LoadManager.Instance.allBirthMarkData[birthMark.name]); birthMarkData.level = birthMark.level; BirthMarkIcon birthMarkIcon = Instantiate(Resources.Load("Prefabs/UI/IconPrefab") as GameObject, birthMarkContainer).AddComponent <BirthMarkIcon>(); birthMarkIcon.Initialize(birthMarkData, false); } transform.Find("MainPanel/InformationPanel/StatusPanel/Stars").gameObject.SetActive(false); transform.Find("MainPanel/InformationPanel/StatusPanel/STATS").gameObject.SetActive(true); Transform starsPanel = transform.Find("MainPanel/InformationPanel/StatusPanel/Stars"); Image[] stars = starsPanel.GetComponentsInChildren <Image>(); foreach (Image star in stars) { Destroy(star.gameObject); } List <FieldInfo> fieldInfos = character.Stars.GetType().GetFields().Where(s => (int)s.GetValue(character.Stars) != 0).ToList(); foreach (var fieldInfo in fieldInfos) { Transform container = starsPanel.Find($"{fieldInfo.Name.First().ToString().ToUpper() + fieldInfo.Name.Substring(1)}/Container"); int fieldValue = (int)fieldInfo.GetValue(character.Stars); Debug.Log($"{container.name}"); for (int i = 0; i < fieldValue / 2; i++) { GameObject starGO = new GameObject("Star"); starGO.transform.SetParent(container); starGO.AddComponent <Image>().sprite = Resources.Load <Sprite>("Sprites/UI/Star"); starGO.GetComponent <RectTransform>().sizeDelta = new Vector2(20, 20); starGO.GetComponent <RectTransform>().localScale = Vector3.one; } if (fieldValue % 2 != 0) { GameObject starGO = new GameObject(); starGO.transform.SetParent(container); starGO.AddComponent <Image>().sprite = Resources.Load <Sprite>("Sprites/UI/Half_Star"); starGO.GetComponent <RectTransform>().sizeDelta = new Vector2(10, 20); starGO.GetComponent <RectTransform>().localScale = Vector3.one; } } List <Transform> plusButtons = new List <Transform>(); GameObject buffIconContainer = transform.Find("MainPanel/InformationPanel/BuffIconContainer").gameObject; foreach (Transform transform in buffIconContainer.transform) { Destroy(transform.gameObject); } foreach (Resource.Effect effect in character.effects) { GameObject buffIconGO = Instantiate(Resources.Load("Prefabs/UI/IconPrefab") as GameObject, buffIconContainer.transform); buffIconGO.AddComponent <BuffIcon>().Initialize(effect, true); } foreach (Transform transform in statsPanel.transform.Cast <Transform>().Select(t => t.Find("PlusButton")).OfType <Transform>()) { plusButtons.Add(transform); } if (character.statsUpPoint > 0) { statsPointText.gameObject.SetActive(true); statsPointText.text = $"Stats Point Left : {character.statsUpPoint}"; plusButtons.ForEach((t) => { t.gameObject.SetActive(true); }); } else { statsPointText.gameObject.SetActive(false); plusButtons.ForEach((t) => { t.gameObject.SetActive(false); }); } Slider expSlider = transform.Find("MainPanel/InformationPanel/EXPSlider").GetComponent <Slider>(); expSlider.maxValue = character.level * 10; expSlider.value = character.level * 10 - ((character.level * 5 * (character.level + 1)) - character.Experience); expSlider.GetComponentInChildren <Text>().text = ((character.level * 5 * (character.level + 1)) - character.Experience).ToString() + " EXP left"; Slider hpSlider = transform.Find("MainPanel/InformationPanel/HPSlider").GetComponent <Slider>(); hpSlider.maxValue = character.MaxHitPoint; hpSlider.value = character.CurrentHitPoint; hpSlider.GetComponentInChildren <Text>().text = $"{character.CurrentHitPoint} / {character.MaxHitPoint}"; }