You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

228 lines
8.3 KiB

using System.Collections.Generic;
using UnityEngine;
using Ability;
using TMPro;
using UnityEngine.UI;
public class AddInGameAbilityDialog : BaseDialog
{
[SerializeField] TextMeshProUGUI m_headerText;
[SerializeField] TextMeshProUGUI m_labelChoose;
[SerializeField] TextMeshProUGUI m_labelLearned;
[SerializeField] GameObject m_learnedAbilityHeader;
List<InGameAbType> m_inGameAbTypes = new List<InGameAbType>();
List<InGameAbType> m_generatedAb = new List<InGameAbType>();
List<GameObject> m_learnedAbContainer = new List<GameObject>();
GameObject m_learnedAbObj;
//-----------------------------------------------------------------------------------------
void Start ()
{
SoundsManager.Instance.PlaySound("level_up");
m_type = DialogType.ADD_IN_GAME_ABILITY_DIALOG;
}
//-----------------------------------------------------------------------------------------
public void Init()
{
Transform learnedAbTrans = transform.Find("learned_abilities");
if (learnedAbTrans)
m_learnedAbObj = learnedAbTrans.gameObject;
else
CommonFunctions.myassert(false);
GenerateInGameAb();
InitAbIcons();
InitTexts();
InitLearnedAbilities();
}
//-----------------------------------------------------------------------------------------
void InitLearnedAbilities()
{
MainCharacter mainChar = GameBoard.Instance.MainCharacter;
int idx = 0;
if (mainChar.InGameAb.Count == 0)
m_learnedAbilityHeader.SetActive(false);
foreach (InGameAbType type in mainChar.InGameAb.Keys)
{
AddIconToLearnedAbField(type, idx);
idx++;
if (idx > 4)
idx = 0;
}
}
//-----------------------------------------------------------------------------------------
string GetAbNameByType(InGameAbType type)
{
string abName = "";
if (type == InGameAbType.ADD_ATTACK_SPEED)
abName = "attackspeed";
else if (type == InGameAbType.ADD_BULLET_45)
abName = "bullet45";
else if (type == InGameAbType.ADD_BULLET_AFTER)
abName = "bulletafter";
else if (type == InGameAbType.ADD_BULLET_PARALLEL)
abName = "bulletparallel";
else if (type == InGameAbType.ADD_BULLET_RICOCHET)
abName = "bulletricocket";
else if (type == InGameAbType.ADD_DAMAGE)
abName = "damage";
else if (type == InGameAbType.ADD_DROP_GOLD)
abName = "dropgold";
else if (type == InGameAbType.ADD_HEADSHOT)
abName = "headshot";
else if (type == InGameAbType.ADD_HEALTH)
abName = "health";
else if (type == InGameAbType.ADD_XP)
abName = "exp";
else if (type == InGameAbType.ADD_MINOR_DAMAGE)
abName = "minordamage";
else if (type == InGameAbType.ADD_MINOR_SPEED)
abName = "minorattackspeed";
return abName;
}
//-----------------------------------------------------------------------------------------
void AddIconToLearnedAbField(InGameAbType type, int idx)
{
string prefabName = "Prefabs/UI/InGameAbIcons/" + GetAbNameByType(type);
GameObject iconObj = Instantiate(Resources.Load(prefabName) as GameObject);
iconObj.transform.SetParent(m_learnedAbObj.transform);
iconObj.transform.localScale = Vector3.one;
iconObj.GetComponent<InGameAbilityIcon>().DisableAbName();
iconObj.GetComponent<Button>().interactable = false;
CommonFunctions.SetDisableButtonColor(iconObj.GetComponent<Button>());
int yStep = m_learnedAbContainer.Count / 4;
iconObj.transform.localPosition = new Vector3(-360 + 240 * idx, -240 * yStep, 0);
m_learnedAbContainer.Add(iconObj);
}
//-----------------------------------------------------------------------------------------
void InitTexts()
{
if (m_headerText)
m_headerText.text = GlobalsVar.gGameTextMng.GetGameText(6).ToUpper();
if (m_labelChoose)
m_labelChoose.text = GlobalsVar.gGameTextMng.GetGameText(7).ToUpper();
if (m_labelLearned)
m_labelLearned.text = GlobalsVar.gGameTextMng.GetGameText(8).ToUpper();
}
//-----------------------------------------------------------------------------------------
void GenerateInGameAb()
{
MainCharacter character = GameBoard.Instance.MainCharacter;
if (!character.InGameAb.ContainsKey(InGameAbType.ADD_BULLET_45))
m_inGameAbTypes.Add(InGameAbType.ADD_BULLET_45);
if (!character.InGameAb.ContainsKey(InGameAbType.ADD_BULLET_AFTER))
m_inGameAbTypes.Add(InGameAbType.ADD_BULLET_AFTER);
if (!character.InGameAb.ContainsKey(InGameAbType.ADD_BULLET_PARALLEL))
m_inGameAbTypes.Add(InGameAbType.ADD_BULLET_PARALLEL);
if (!character.InGameAb.ContainsKey(InGameAbType.ADD_BULLET_RICOCHET))
m_inGameAbTypes.Add(InGameAbType.ADD_BULLET_RICOCHET);
if (!character.InGameAb.ContainsKey(InGameAbType.ADD_HEADSHOT))
m_inGameAbTypes.Add(InGameAbType.ADD_HEADSHOT);
if (character.NeedRollAb(InGameAbType.ADD_ATTACK_SPEED))
m_inGameAbTypes.Add(InGameAbType.ADD_ATTACK_SPEED);
if (character.NeedRollAb(InGameAbType.ADD_DAMAGE))
m_inGameAbTypes.Add(InGameAbType.ADD_DAMAGE);
if (character.NeedRollAb(InGameAbType.ADD_DROP_GOLD))
m_inGameAbTypes.Add(InGameAbType.ADD_DROP_GOLD);
if (character.NeedRollAb(InGameAbType.ADD_HEALTH))
m_inGameAbTypes.Add(InGameAbType.ADD_HEALTH);
if (character.NeedRollAb(InGameAbType.ADD_XP))
m_inGameAbTypes.Add(InGameAbType.ADD_XP);
for (int i = 0; i < 3; ++i)
{
InGameAbType type = GetRandomAbType();
m_generatedAb.Add(type);
}
}
//-----------------------------------------------------------------------------------------
InGameAbType GetRandomAbType()
{
RandomProb rand = new RandomProb();
for (int i = 0; i < m_inGameAbTypes.Count; ++i)
{
InGameAbInfo info = GlobalsVar.gInGameAbilities.GetAbilityInfoByType(m_inGameAbTypes[i]);
rand.AddValue(m_inGameAbTypes[i].ToString(), info.m_weight);
}
string randValStr = rand.GetRandomValue();
InGameAbType randType = GlobalsVar.gInGameAbilities.GetAbilityTypeByName(randValStr);
m_inGameAbTypes.Remove(randType);
return randType;
}
//-----------------------------------------------------------------------------------------
void InitAbIcons()
{
Transform icons = transform.Find("icons");
if (icons)
{
int idx = 1;
foreach (Transform child in icons)
{
InGameAbilityIcon inGameAbIcon = child.GetComponent<InGameAbilityIcon>();
if (m_generatedAb.Contains(inGameAbIcon.Type))
{
AddIcon(child.gameObject, idx);
idx++;
}
child.gameObject.SetActive(false);
}
}
}
//-----------------------------------------------------------------------------------------
void AddIcon(GameObject iconObj, int idx)
{
Transform generatedIconTrans = transform.Find("generated_icons");
if (generatedIconTrans)
{
GameObject icon = Instantiate(iconObj);
icon.name = iconObj.name;
icon.transform.SetParent(generatedIconTrans);
icon.transform.localPosition = GetIconPosByIdx(idx);
icon.transform.localScale = Vector3.one;
}
else
CommonFunctions.myassert(false);
}
//-----------------------------------------------------------------------------------------
Vector3 GetIconPosByIdx(int idx)
{
if (idx == 1)
return new Vector3(-250, 0, 0);
else if (idx == 2)
return new Vector3(0, 0, 0);
else if (idx == 3)
return new Vector3(250, 0, 0);
CommonFunctions.myassert(false);
return Vector3.zero;
}
//-----------------------------------------------------------------------------------------
public override void Update ()
{
base.Update();
}
}