Project_WL/Assets/Script/UI/Farm/FarmSlotCard.cs

156 lines
5.4 KiB
C#

using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class FarmSlotCard : CardBase
{
public GameObject[] gos; // 0 심은 경우, 1 선택, 2 잠금
public GameObject[] gos_btn; // 0 심기, 1 즉시 완료, 2 수확하기
public TextMeshProUGUI[] texts; // 0 심으세요 or 남은 시간
public MoneyForm m_Price; // 즉시 완료 가격
SD_FarmSlot m_Data;
private void Awake()
{
m_Price.icon.sprite = UIAtlasMgr.Ins.Get_Sprite(1);
}
public override void Set<T>(T _base)
{
base.Set(_base);
Set_Repeat_for1sec(Set_Time);
m_Data = _base as SD_FarmSlot;
var sdata = ServerInfo.Ins.m_ServerData;
gos[1].SetActive(false);
gos[2].SetActive(m_Data.Slot > sdata.Get_FarmMaxSlot());
if (m_Data.Grade > 0)
{ // 심었음
gos[0].SetActive(true);
Set_Time();
}
else
{ // 심어야 함
gos[0].SetActive(false);
texts[0].text = DSUtil.Format(127);
DSUtil.InActivateGameObjects(gos_btn, 0);
}
}
void Set_Time()
{
if (!DSUtil.CheckNull(m_Data))
{
var sdata = ServerInfo.Ins.m_ServerData;
var time = m_Data.Time;
if (time > 0)
{ // 자라는 중
texts[0].text = DSUtil.Format(128, DSUtil.Get_TimeText_HMS(false, time));
DSUtil.InActivateGameObjects(gos_btn, 1);
m_Price.amount.text = Get_ImmPrice().ToString();
}
else
{
if (m_Data.Grade > 0)
{ // 수확 가능
texts[0].text = "";
DSUtil.InActivateGameObjects(gos_btn, 2);
}
else
{ // 심기
texts[0].text = DSUtil.Format(127);
DSUtil.InActivateGameObjects(gos_btn, 0);
}
}
}
}
int Get_ImmPrice()
{
var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC);
int price = (int)m_Data.Time * 10;
return price - (int)(price * ainfo.Get_Stat(eStat.Reduction_in_Immediate_Harvest_Cost));
}
public void OnClick_PlangtingSeed()
{
FarmSlotUI.Ins.m_FarmSelectEnchantUI.Set(m_Data);
}
public void OnClick_ImmComplete()
{
var sdata = ServerInfo.Ins.m_ServerData;
var price = Get_ImmPrice();
if (sdata.Check_ItemAmount(table_GlobalValue.Ins.Get_Int("n_CashItemID"), price))
{
sdata.Use_Item(table_GlobalValue.Ins.Get_Int("n_CashItemID"), price);
sdata.Add_MissionCount(ePurpose.SHORTENING_CROP_HARVEST);
OnClick_Get();
}
}
public void OnClick_Get()
{
if (m_Data.Grade > 0)
{
List<ItemSimpleData> items = new List<ItemSimpleData>();
var sdata = ServerInfo.Ins.m_ServerData;
var Tdata = table_harvestconfig.Ins.Get_Data_orNull(m_Data.Grade);
var EnchantData = table_enchanlist.Ins.Get_Data_orNull(m_Data.EnchantID);
var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC);
bool isMajorSuccess = DSUtil.RandomTrue(ainfo.Get_Stat(eStat.MajorSuccess));
bool FailHarvest = !isMajorSuccess && DSUtil.RandomTrue(0.1d - ainfo.Get_Stat(eStat.CropFailurePrevention));
var totalAmount = 0;
for (int i = 0; i < table_GlobalValue.Ins.Get_Int("n_FarmPlantingSeedAmount"); i++)
{
totalAmount += Random.Range(Tdata.n_MinAmount, Tdata.n_MaxAmount + 1);
if (DSUtil.RandomTrue(ainfo.Get_Stat(eStat.Reclaim_Used_Resources)))
items.Add(new ItemSimpleData { itemid = m_Data.EnchantID, amount = 1 });
}
totalAmount += (int)ainfo.Get_Stat(eStat.HarvestAmountUp);
var goldFruitRate = Tdata.f_GoldFruitRate + ainfo.Get_Stat(eStat.GoldFruitUp);
var statFruitRate = Tdata.f_StatFruitRate + ainfo.Get_Stat(eStat.StatFruitUp);
if (isMajorSuccess)
{
ToastUI.Ins.Set(427);
totalAmount = (int)(totalAmount * 1.5);
goldFruitRate *= 1.5f;
}
else if (FailHarvest)
{
ToastUI.Ins.Set(428);
totalAmount -= (int)(totalAmount * 0.5);
goldFruitRate *= 0.5f;
}
for (int i = 0; i < totalAmount; i++)
{
if (DSUtil.RandomTrue(goldFruitRate))
{ // 신비 열매로 변할 확률
items.Add(new ItemSimpleData { itemid = 455, amount = 1 });
}
else if (DSUtil.RandomTrue(statFruitRate))
{ // 스탯 열매로 변할 확률
items.Add(new ItemSimpleData { itemid = EnchantData.n_FruitID, amount = 1 });
}
else
items.Add(new ItemSimpleData { itemid = table_GlobalValue.Ins.Get_Int("n_FarmSeedID"), amount = 1 });
}
for (int i = 0; i < items.Count; i++)
sdata.Add_Item(items[i].itemid, items[i].amount);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ACC);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ALL);
ObtainItemUI.Ins.Set(items);
sdata.Set_FarmSlot(m_Data.Slot, 0, 0, 0);
FarmSlotUI.Ins.Set();
}
}
}