Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
    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();
    }
Ejemplo n.º 3
0
    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])));
        }
    }
Ejemplo n.º 4
0
    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}";
    }