This commit is contained in:
2026-06-08 21:23:40 +08:00
parent 59b6cb9ddd
commit b67f5711b2
180 changed files with 559640 additions and 36581 deletions
+97 -320
View File
@@ -1,275 +1,15 @@
////using Assets.MyGame.Scripts.Net.API;
////using Spine.Unity;
////using System;
////using System.Collections;
////using System.Collections.Generic;
////using System.Linq;
////using TMPro;
////using Unity.VisualScripting;
////using UnityEngine;
////using UnityEngine.UI;
////public class SitPosData : MonoBehaviour
////{
//// [Header("用户id")]
//// public string user;
//// [Header("座位id")]
//// public int posID;
//// [Header("金币")]
//// public TextMeshProUGUI tMP_TurretConsumeNum;
//// public TextMeshProUGUI tMP_GoldNum;
//// public Button btn_TurretAdd;
//// public Button btn_TurretMinus;
//// public long goldNum;
//// public long consumeGoldNum;
//// [Header("炮台")]
//// public Dictionary<string, TurretData> dic_Turrets=new Dictionary<string, TurretData>();
//// public List<TurretData> list_Turrets=new List<TurretData>();
//// public int currentTurretIndex = 0;
//// public string currentTurretID = "";
//// public TurretData currentTurret;
//// [Header("锁定")]
//// public MonsterContral monCotl_Lock;
//// public Transform monCotl_Lock_Position;
//// public bool isLock=false;
//// public GameObject lockFX;
//// [Header("当前炮塔")]
//// public Transform tra_CurrTurret;
//// public Transform tra_CurrFly; //星际迷航特有
//// public GameObject changeTurretList;
//// public Action<TurretState> OnStateChange;
//// public void ChangeState(TurretState state)
//// {
//// OnStateChange?.Invoke(state);
//// }
//// public void Awake()
//// {
//// //list_Turrets.Sort((td1,td2) =>
//// //{
//// // return td1.turretID.CompareTo(td2.turretLevel);
//// //});
//// dic_Turrets = list_Turrets.ToDictionary(td => td.turretID);
//// btn_TurretAdd.onClick.AddListener(() =>
//// {
//// ChangeTurretAddConsumeNum(1000);
//// });
//// btn_TurretMinus.onClick.AddListener(() =>
//// {
//// ChangeTurretMinusConsumeNum(1000);
//// });
//// }
//// public void Update()
//// {
//// }
//// public void ChangeTurret(int n=0)
//// {
//// if (currentTurretIndex>list_Turrets.Count|| currentTurretIndex<0)
//// {
//// //currentTurretIndex = currentTurretIndex;
//// }
//// else
//// {
//// currentTurretIndex = n;
//// }
//// if (currentTurret != null)
//// {
//// currentTurret.gameObject.SetActive(false);
//// }
//// currentTurretID = list_Turrets[currentTurretIndex].turretID; //dic_Turrets[currentTurretID];
//// currentTurret=dic_Turrets[currentTurretID];
//// currentTurret.gameObject.SetActive(true);
//// // ⭐ 关键:把状态机入口绑定到当前炮台
//// OnStateChange = currentTurret.ChangeState;
//// gameObject.SetActive(true);
//// tra_CurrTurret =currentTurret.transform.GetChild(0);
//// tra_CurrFly = currentTurret.transform.GetChild(1);
//// }
//// public void ChangeTurretConsumeNum(int n = 0)
//// {
//// consumeGoldNum = n;
//// tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
//// }
//// public void ChangeTurretAddConsumeNum(int n = 0)
//// {
//// consumeGoldNum += n;
//// tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
//// }
//// public void ChangeTurretMinusConsumeNum(int n = 0)
//// {
//// consumeGoldNum -= n;
//// tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
//// }
//// public bool ConsumeGold(int bl=1)
//// {
//// long temp = goldNum - consumeGoldNum*bl;
//// if (temp > 0)
//// {
//// goldNum = temp;
//// tMP_GoldNum.text = goldNum.ToString();
//// return true;
//// }
//// return false;
//// }
////}
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using TMPro;
//using UnityEngine;
//using UnityEngine.UI;
//public class SitPosData : MonoBehaviour
//{
// // -------------------------
// // 玩家信息
// // -------------------------
// public string user;
// public int posID;
// [Header("金币")]
// public long goldNum;
// public long consumeGoldNum;
// public TextMeshProUGUI tMP_TurretConsumeNum;
// public TextMeshProUGUI tMP_GoldNum;
// // -------------------------
// // 炮台管理
// // -------------------------
// public List<TurretData> list_Turrets = new List<TurretData>();
// public Dictionary<string, TurretData> dic_Turrets = new Dictionary<string, TurretData>();
// public int currentTurretIndex = 0;
// public TurretData currentTurret;
// // 状态机入口(GameMainPanel 调用)
// public Action<TurretState> OnStateChange;
// // -------------------------
// // 炮台旋转
// // -------------------------
// public Transform tra_CurrTurret;
// public float currentAngle;
// // -------------------------
// // 锁定系统
// // -------------------------
// public MonsterContral monCotl_Lock;
// public Transform monCotl_Lock_Position;
// public bool isLock;
// public GameObject lockFX;
// // -------------------------
// // UI
// // -------------------------
// public Button btn_TurretAdd;
// public Button btn_TurretMinus;
// public GameObject changeTurretList;
// private void Awake()
// {
// dic_Turrets = list_Turrets.ToDictionary(t => t.turretID);
// btn_TurretAdd.onClick.AddListener(() => ChangeTurretAddConsumeNum(1000));
// btn_TurretMinus.onClick.AddListener(() => ChangeTurretMinusConsumeNum(1000));
// }
// // -------------------------
// // 切换炮台
// // -------------------------
// public void ChangeTurret(int index)
// {
// if (currentTurret != null)
// currentTurret.gameObject.SetActive(false);
// currentTurretIndex = Mathf.Clamp(index, 0, list_Turrets.Count - 1);
// currentTurret = list_Turrets[currentTurretIndex];
// currentTurret.gameObject.SetActive(true);
// // 绑定状态机入口
// OnStateChange = currentTurret.ChangeState;
// // 缓存旋转点
// tra_CurrTurret = currentTurret.transform.GetChild(0);
// }
// // -------------------------
// // 切换状态(GameMainPanel 调用)
// // -------------------------
// public void ChangeState(TurretState state)
// {
// OnStateChange?.Invoke(state);
// }
// // -------------------------
// // 炮台旋转
// // -------------------------
// public void SetRotation(float angle)
// {
// currentAngle = angle;
// tra_CurrTurret.rotation = Quaternion.Euler(0, 0, angle);
// }
// // -------------------------
// // 获取发射点(给 GameMainPanel)
// // -------------------------
// public Vector2 GetBulletStartPos()
// {
// return currentTurret.GetBulletStartWorldPos();
// }
// // -------------------------
// // 金币消耗
// // -------------------------
// public bool ConsumeGold(int mul = 1)
// {
// long temp = goldNum - consumeGoldNum * mul;
// if (temp < 0) return false;
// goldNum = temp;
// tMP_GoldNum.text = goldNum.ToString();
// return true;
// }
// public void ChangeTurretAddConsumeNum(int n)
// {
// consumeGoldNum += n;
// tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
// }
// public void ChangeTurretMinusConsumeNum(int n)
// {
// consumeGoldNum -= n;
// tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
// }
//}
using System;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class SitPosData : MonoBehaviour
{
/// <summary>本地玩家的座位引用(由游戏面板初始化时设置)</summary>
public static SitPosData localPlayerSit;
// -------------------------
// 玩家基础信息
// -------------------------
@@ -284,14 +24,19 @@ public class SitPosData : MonoBehaviour
public TextMeshProUGUI tMP_TurretConsumeNum;
// -------------------------
// 炮台管理
// 炮台管理(动态克隆)
// -------------------------
[Header("炮台")]
public List<TurretData> list_Turrets = new List<TurretData>();
public Dictionary<string, TurretData> dic_Turrets = new Dictionary<string, TurretData>();
[Tooltip("炮台实例化的父节点")]
public Transform turretParent;
public int currentTurretIndex = 0;
public string currentTurretID = "";
[Tooltip("炮台锚点位置(相对 turretParent)")]
public Vector2 turretAnchoredPos = Vector2.zero;
[Tooltip("当前装备的炮台编号")]
public int currentTurretNumber;
/// <summary>当前运行中的炮台实例</summary>
public TurretData currentTurret;
// 状态机入口(GameMainPanel 调用)
@@ -319,48 +64,90 @@ public class SitPosData : MonoBehaviour
[Header("UI")]
public Button btn_TurretAdd;
public Button btn_TurretMinus;
public GameObject changeTurretList;
private void Awake()
{
btn_TurretAdd.onClick.AddListener(() => ChangeTurretAddConsumeNum());
btn_TurretMinus.onClick.AddListener(() => ChangeTurretMinusConsumeNum());
// 构建字典
dic_Turrets = list_Turrets.ToDictionary(t => t.turretID);
// 炮台倍率按钮
}
// -------------------------
// 切换炮台
// -------------------------
public void ChangeTurret(int index)
private void OnEnable()
{
// 如果是本地玩家的座位,自动注册为 localPlayerSit
if (user == GameManager.Instance?.user?.id)
{
localPlayerSit = this;
// 加载玩家当前装备的炮台
var cannonUsing = GameManager.Instance.user.cannonUsing;
if (cannonUsing != null && int.TryParse(cannonUsing.number, out int num))
LoadTurret(num);
}
}
private void OnDisable()
{
if (localPlayerSit == this)
localPlayerSit = null;
}
// ==================== 炮台加载(动态克隆) ====================
/// <summary>
/// 根据炮台编号,从 Addressables 加载预制体并克隆到 turretParent。
/// 位置/旋转/缩放保持预制体原始值,不动。
/// </summary>
public void LoadTurret(int turretNumber)
{
// 关闭旧炮台
if (currentTurret != null)
currentTurret.gameObject.SetActive(false);
{
Destroy(currentTurret.gameObject);
currentTurret = null;
}
// 计算新索引
currentTurretIndex = Mathf.Clamp(index, 0, list_Turrets.Count - 1);
currentTurretNumber = turretNumber;
// 获取新炮台
currentTurret = list_Turrets[currentTurretIndex];
currentTurretID = currentTurret.turretID;
currentTurret.gameObject.SetActive(true);
// 从 TurretResourcesData 拿预制体
GameObject prefab = TurretResourcesData.GetTurretPrefab(turretNumber);
if (prefab == null)
{
Debug.LogWarning($"[SitPosData] 炮台预制体未加载: #{turretNumber}");
return;
}
// 绑定状态机入口
// 克隆到父节点
GameObject instance = Instantiate(prefab, turretParent, false);
instance.SetActive(true);
// 固定位置归零,由外部父节点定位
var rt = instance.GetComponent<RectTransform>();
if (rt != null)
rt.anchoredPosition = turretAnchoredPos;
currentTurret = instance.GetComponent<TurretData>();
if (currentTurret == null)
{
Debug.LogError($"[SitPosData] 预制体上未找到 TurretData 组件: #{turretNumber}");
Destroy(instance);
return;
}
currentTurret.turretNumber = turretNumber;
// 缓存旋转节点
tra_CurrTurret = currentTurret.transform.GetChild(0);
// 绑定状态机入口
OnStateChange = currentTurret.ChangeState;
// 缓存旋转点
tra_CurrTurret = currentTurret.transform.GetChild(0);
if (CreateFishManager.Instance.currGameType != null)
{
// 如果当前处于狂暴状态,切换炮台后也要继续倍速
bool frenzy = CreateFishManager.Instance.currGameType.isFrenzy;
currentTurret.SetFrenzy(frenzy);
}
Debug.Log($"[SitPosData] 炮台已加载: #{turretNumber}");
}
/// <summary>根据炮台编号字符串加载。</summary>
public void LoadTurret(string turretNumberStr)
{
if (int.TryParse(turretNumberStr, out int num))
LoadTurret(num);
}
// -------------------------
@@ -386,61 +173,53 @@ public class SitPosData : MonoBehaviour
// -------------------------
public Vector2 GetBulletStartPos()
{
return currentTurret.GetBulletStartWorldPos();
return currentTurret != null
? currentTurret.GetBulletStartWorldPos()
: Vector2.zero;
}
// -------------------------
// 金币消耗
// -------------------------
// ==================== 金币消耗 ====================
public bool ConsumeGold(int mul = 1)
{
long temp = goldNum - consumeGoldNum * mul;
if (temp < 0) return false;
goldNum = temp;
tMP_GoldNum.text = goldNum.ToString();
return true;
}
int indexConsume=0;
int indexConsume = 0;
public void ChangeTurretAddConsumeNum()
{
if (CreateFishManager.Instance.currGameType.paoBeiList.Count-1> indexConsume)
{
if (CreateFishManager.Instance.currGameType.paoBeiList.Count - 1 > indexConsume)
indexConsume++;
}
else
{
indexConsume = 0;
}
consumeGoldNum = CreateFishManager.Instance.currGameType.paoBeiList[indexConsume];
tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
}
public void ChangeTurretMinusConsumeNum()
{
if (indexConsume>0)
{
if (indexConsume > 0)
indexConsume--;
}
else
{
indexConsume = CreateFishManager.Instance.currGameType.paoBeiList.Count - 1;
}
consumeGoldNum = CreateFishManager.Instance.currGameType.paoBeiList[indexConsume];
tMP_TurretConsumeNum.text = consumeGoldNum.ToString();
}
// -------------------------
// 锁定系统(本地)
// -------------------------
// ==================== 锁定系统 ====================
public void SetLockTarget(MonsterContral monster, Transform hitPos)
{
monCotl_Lock = monster;
monCotl_Lock_Position = hitPos;
isLock = monster != null;
lockFX.SetActive(isLock);
}
@@ -449,9 +228,7 @@ public class SitPosData : MonoBehaviour
monCotl_Lock = null;
monCotl_Lock_Position = null;
isLock = false;
lockFX.SetActive(false);
ChangeState(TurretState.Idle);
}
}