Files
5.24BuYu/Assets/MyGame/Scripts/Turret/SitPosData.cs
T
2026-05-04 17:21:52 +08:00

430 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
////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.UI;
public class SitPosData : MonoBehaviour
{
// -------------------------
// 玩家基础信息
// -------------------------
[Header("玩家信息")]
public string user;
public int posID;
[Header("金币")]
public long goldNum;
public long consumeGoldNum;
public TextMeshProUGUI tMP_GoldNum;
public TextMeshProUGUI tMP_TurretConsumeNum;
// -------------------------
// 炮台管理
// -------------------------
[Header("炮台")]
public List<TurretData> list_Turrets = new List<TurretData>();
public Dictionary<string, TurretData> dic_Turrets = new Dictionary<string, TurretData>();
public int currentTurretIndex = 0;
public string currentTurretID = "";
public TurretData currentTurret;
// 状态机入口(GameMainPanel 调用)
public Action<TurretState> OnStateChange;
// -------------------------
// 炮台旋转
// -------------------------
[Header("炮台旋转")]
public Transform tra_CurrTurret;
public float currentAngle;
// -------------------------
// 锁定系统
// -------------------------
[Header("锁定系统")]
public MonsterContral monCotl_Lock;
public Transform monCotl_Lock_Position;
public bool isLock = false;
public GameObject lockFX;
// -------------------------
// UI
// -------------------------
[Header("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];
currentTurretID = currentTurret.turretID;
currentTurret.gameObject.SetActive(true);
// 绑定状态机入口
OnStateChange = currentTurret.ChangeState;
// 缓存旋转点
tra_CurrTurret = currentTurret.transform.GetChild(0);
}
// -------------------------
// 切换状态(GameMainPanel 调用)
// -------------------------
public void ChangeState(TurretState state)
{
OnStateChange?.Invoke(state);
}
// -------------------------
// 炮台旋转(GameMainPanel 调用)
// -------------------------
public void SetRotation(float angle)
{
currentAngle = angle;
if (tra_CurrTurret != null)
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();
}
// -------------------------
// 锁定系统(本地)
// -------------------------
public void SetLockTarget(MonsterContral monster, Transform hitPos)
{
monCotl_Lock = monster;
monCotl_Lock_Position = hitPos;
isLock = monster != null;
lockFX.SetActive(isLock);
}
public void ClearLock()
{
monCotl_Lock = null;
monCotl_Lock_Position = null;
isLock = false;
lockFX.SetActive(false);
}
}