Files
MinFt/Client/Assets/Scripts/Aquarium/UI/AquariumSlot.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

256 lines
8.4 KiB
C#

using asap.core;
using DG.Tweening;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AquariumSlot : MonoBehaviour
{
public Button btn_click;
public Image icon_egg;
public GameObject mask_fish;
public Image icon_fish;
public Image icon_rate;
public GameObject selected;
public GameObject done;
public GameObject icon_hurt;
public GameObject icon_killed;
public GameObject icon_sold;
public GameObject redpoint;
public AquariumSlotData slotData;
public Image bar;
public Image bar_hurt;
Action<AquariumSlot> onClick;
Action onFishStateChange;
public int index;
/// <summary>
/// 1 == egg 2 == fish 3 == done 4 == sell 5 == lose
/// </summary>
[NonSerialized]
public int slotState = 0;
AquariumManager AM;
//private void Reset()
//{
// btn_click = GetComponent<Button>();
// icon_egg = transform.Find("icon_egg").GetComponent<Image>();
// mask_fish = transform.Find("mask_fish").gameObject;
// icon_fish = transform.Find("mask_fish/icon_fish").GetComponent<Image>();
// icon_rate = transform.Find("mask_fish/icon_rate").GetComponent<Image>();
// selected = transform.Find("selected").gameObject;
// done = transform.Find("mask_fish/done").gameObject;
// icon_hurt = transform.Find("icon_hurt").gameObject;
// icon_killed = transform.Find("icon_killed").gameObject;
// icon_sold = transform.Find("icon_sold").gameObject;
// redpoint = transform.Find("redpoint").gameObject;
// bar = transform.Find("bg_bar/bar").GetComponent<Image>();
// bar_hurt = transform.Find("bg_bar/bar_hurt").GetComponent<Image>();
//}
private void Awake()
{
redpoint.SetActive(false);
btn_click.onClick.AddListener(OnClick);
}
void OnClick()
{
//if (slotState == 4)
//{
// return;
//}
onClick?.Invoke(this);
}
public void InitSlot(int index, AquariumSlotData slotData, Action<AquariumSlot> onClick, Action onFishStateChange)
{
AM = GContext.container.Resolve<AquariumManager>();
this.index = index;
this.slotData = slotData;
this.onClick = onClick;
this.onFishStateChange = onFishStateChange;
SetState();
InitBar();
}
public void SetState()
{
DateTime dateTime = ZZTimeHelper.UtcNow();
var HatchTime = slotData.FishHatchTime();
var FishGrowthTime = slotData.FishGrowthTime();
bool isHatch = HatchTime < dateTime;
TimeSpan offsetTime = new TimeSpan();
bool isUpdate = false;
done.gameObject.SetActive(false);
icon_hurt.gameObject.SetActive(false);
bar_hurt.gameObject.SetActive(false);
icon_killed.gameObject.SetActive(false);
bar.gameObject.SetActive(true);
redpoint.SetActive(false);
if (isHatch)
{
//鱼鱼
slotState = 2;
icon_egg.gameObject.SetActive(false);
mask_fish.gameObject.SetActive(true);
bool growth = FishGrowthTime < dateTime;
List<AquariumResultData> aquariumReportDatas = AM.data.aquariumResultDatas;
//售卖或者丢失
if (slotData.IsResult())
{
slotState = 4;
//btn_click.enabled = false;
done.gameObject.SetActive(true);
icon_sold.gameObject.SetActive(true);
bar.gameObject.SetActive(false);
}
else if (aquariumReportDatas[slotData.index].IsResult())
{
slotState = 5;
icon_killed.gameObject.SetActive(true);
done.gameObject.SetActive(true);
bar.gameObject.SetActive(false);
}
else
{
//检查是否受伤
//正常的成长时间 自然时间+加速成长-总恢复时间
float normalH = (float)(dateTime - HatchTime).TotalHours + slotData.accelerationGrowth - slotData.allRecoveryTime;
float injuryH = slotData.injuryGrowthTime;
//受伤时的成长进度大于正常的成长进度=还没恢复
isUpdate = true;
if (injuryH > normalH)
{
bar.gameObject.SetActive(false);
bar_hurt.gameObject.SetActive(true);
icon_hurt.gameObject.SetActive(true);
offsetTime = dateTime.AddHours(injuryH - normalH) - dateTime;
}
else if (growth)
{
//成熟并且没有受伤
slotState = 3;
isUpdate = false;
redpoint.SetActive(true);
}
else
{
bar_hurt.gameObject.SetActive(false);
icon_hurt.gameObject.SetActive(false);
offsetTime = FishGrowthTime - dateTime;
}
}
}
else
{
isUpdate = true;
offsetTime = HatchTime - dateTime;
//蛋蛋
slotState = 1;
icon_egg.gameObject.SetActive(true);
mask_fish.gameObject.SetActive(false);
done.gameObject.SetActive(false);
}
if (isUpdate)
{
StartCoroutine(UpdateTime((float)offsetTime.TotalSeconds));
}
}
void InitBar()
{
if (slotState == 5)
{
bar.fillAmount = 0;
return;
}
if (slotState == 4)
{
bar.fillAmount = 0;
return;
}
DateTime dateTime = ZZTimeHelper.UtcNow();
if (slotState == 1)
{
float time = (float)(dateTime - slotData.startTime).TotalHours + slotData.accelerationHatch;
bar.fillAmount = time / slotData.hatchTime;
return;
}
var StartTime = slotData.FishHatchTime();
//正常的成长进度 自然时间+加速成长 - 全部恢复时间
float normalH = (float)(dateTime - StartTime).TotalHours + slotData.accelerationGrowth - slotData.allRecoveryTime;
//受伤时的成长进度
float injuryH = slotData.injuryGrowthTime;
//受伤时的成长进度大于正常的成长进度
float timeProgress = 1;
if (injuryH > normalH)
{
bar_hurt.fillAmount = (injuryH - normalH) / slotData.growthTime;
timeProgress = 0;// injuryH / slotData.growthTime;
}
else if (normalH < slotData.growthTime)
{
timeProgress = normalH / slotData.growthTime;
}
bar.fillAmount = timeProgress;
}
public void UpdateBar(DateTime dateTime)
{
if (slotState == 5)
{
bar.fillAmount = 0;
return;
}
if (slotState == 4)
{
//bar.DOFillAmount(1, 0.9f);
bar.fillAmount = 0;
return;
}
if (slotState == 1)
{
float time = (float)(dateTime - slotData.startTime).TotalHours + slotData.accelerationHatch;
var fillAmount = time / slotData.hatchTime;
bar.DOFillAmount(fillAmount, 0.9f);
return;
}
var StartTime = slotData.FishHatchTime();
//正常的成长进度 自然时间+加速成长 - 全部恢复时间
float normalH = (float)(dateTime - StartTime).TotalHours + slotData.accelerationGrowth - slotData.allRecoveryTime;
//受伤时的成长进度
float injuryH = slotData.injuryGrowthTime;
//受伤时的成长进度大于正常的成长进度
float timeProgress = 1;
if (injuryH > normalH)
{
var fillAmount = (injuryH - normalH) / slotData.recoveryTime;
bar_hurt.DOFillAmount(fillAmount, 0.9f);
//timeProgress = injuryH / slotData.growthTime;
bar.fillAmount = 0;
}
else if (normalH < slotData.growthTime)
{
timeProgress = normalH / slotData.growthTime;
bar.DOFillAmount(timeProgress, 0.9f);
}
else
{
bar.DOFillAmount(timeProgress, 0.9f);
}
}
IEnumerator UpdateTime(float s)
{
yield return new WaitForSeconds(s);
//发送事件,状态修改
onFishStateChange?.Invoke();
}
}