using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class BorderOpsPrototype : MonoBehaviour
{
public static BorderOpsPrototype Instance { get; private set; }
public CurrencyManager currency;
public InventoryManager inventory;
public TradeManager trade;
public OperatorManager operators;
public GunsmithManager gunsmith;
public RangeManager range;
public HeadquartersManager headquarters;
public ServerAuthority server;
[Header("主界面面板")]
public GameObject mainPanel;
public GameObject inventoryPanel;
public GameObject tradePanel;
public GameObject rangePanel;
public GameObject gunsmithPanel;
public GameObject operatorPanel;
public GameObject headquartersPanel;
[Header("主界面文本")]
public Text hafuCoinText;
public Text actionPointsText;
public Text currentOperatorText;
[Header("仓库")]
public Transform warehouseListParent;
public GameObject warehouseItemPrefab;
public Text warehouseHint;
[Header("交易行")]
public InputField tradeSearchInput;
public Transform marketListParent;
public Transform myListingsParent;
public GameObject tradeListingPrefab;
public Text tradeBalanceText;
[Header("靶场")]
public Text rangeStatusText;
public Button staticTargetButton;
public Button movingTargetButton;
public Button damageTestButton;
public Button exitRangeButton;
[Header("改枪台")]
public Transform gunsmithBuildListParent;
public GameObject gunsmithBuildPrefab;
public Text gunsmithHint;
[Header("干员")]
public Transform operatorListParent;
public GameObject operatorEntryPrefab;
public Text currentOperatorDetailText;
[Header("特勤处")]
public Text headquartersLevelText;
public Transform departmentListParent;
public GameObject departmentEntryPrefab;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
currency = GetComponent() ?? gameObject.AddComponent();
inventory = GetComponent() ?? gameObject.AddComponent();
trade = GetComponent() ?? gameObject.AddComponent();
operators = GetComponent() ?? gameObject.AddComponent();
gunsmith = GetComponent() ?? gameObject.AddComponent();
range = GetComponent() ?? gameObject.AddComponent();
headquarters = GetComponent() ?? gameObject.AddComponent();
server = GetComponent() ?? gameObject.AddComponent();
}
private void Start()
{
RefreshMainInfo();
currency.onHafuCoinChanged.AddListener(_ => RefreshMainInfo());
currency.onActionPointsChanged.AddListener(_ => RefreshMainInfo());
operators.onOperatorChanged.AddListener(op =>
{
if (currentOperatorText != null && op != null)
currentOperatorText.text = op.operatorName;
});
inventory.onInventoryChanged.AddListener(RefreshWarehouse);
trade.onMarketUpdated.AddListener(RefreshMarket);
trade.onMyListingsUpdated.AddListener(RefreshMyListings);
currency.onHafuCoinChanged.AddListener(UpdateTradeBalance);
range.onRangeStateChanged.AddListener(_ => UpdateRangeStatus());
headquarters.onHeadquartersUpdated.AddListener(RefreshHeadquarters);
RefreshWarehouse();
RefreshMarket();
RefreshMyListings();
UpdateTradeBalance(currency.hafuCoin);
UpdateRangeStatus();
RefreshHeadquarters();
RefreshOperators();
RefreshGunsmithBuilds();
}
public void RefreshMainInfo()
{
if (hafuCoinText != null)
hafuCoinText.text = $"哈夫币:{currency.hafuCoin}";
if (actionPointsText != null)
actionPointsText.text = $"行动点:{currency.actionPoints}";
var op = operators.currentOperator;
if (currentOperatorText != null && op != null)
currentOperatorText.text = op.operatorName;
}
public void OpenInventory()
{
SetActivePanel(inventoryPanel);
RefreshWarehouse();
}
public void OpenTrade()
{
SetActivePanel(tradePanel);
RefreshMarket();
RefreshMyListings();
UpdateTradeBalance(currency.hafuCoin);
}
public void OpenRange()
{
SetActivePanel(rangePanel);
range.EnterRange();
}
public void OpenGunsmith()
{
SetActivePanel(gunsmithPanel);
RefreshGunsmithBuilds();
}
public void OpenOperators()
{
SetActivePanel(operatorPanel);
RefreshOperators();
}
public void OpenHeadquarters()
{
SetActivePanel(headquartersPanel);
RefreshHeadquarters();
}
public void StartOperation()
{
Debug.Log("进入对局:搜打撤模式");
}
public void BackToMain()
{
mainPanel?.SetActive(true);
inventoryPanel?.SetActive(false);
tradePanel?.SetActive(false);
rangePanel?.SetActive(false);
gunsmithPanel?.SetActive(false);
operatorPanel?.SetActive(false);
headquartersPanel?.SetActive(false);
range.ExitRange();
}
private void SetActivePanel(GameObject panel)
{
mainPanel?.SetActive(false);
inventoryPanel?.SetActive(false);
tradePanel?.SetActive(false);
rangePanel?.SetActive(false);
gunsmithPanel?.SetActive(false);
operatorPanel?.SetActive(false);
headquartersPanel?.SetActive(false);
if (panel != null)
panel.SetActive(true);
}
public void RefreshWarehouse()
{
if (warehouseListParent == null) return;
foreach (Transform child in warehouseListParent)
Destroy(child.gameObject);
foreach (var item in inventory.warehouse)
{
if (item.item == null) continue;
var entry = CreateEntry(warehouseListParent, warehouseItemPrefab);
var text = entry.GetComponentInChildren();
if (text != null)
text.text = $"{item.item.itemName} x{item.count}";
}
if (warehouseHint != null)
warehouseHint.text = $"仓库物品数:{inventory.warehouse.Count}";
}
public void RefreshMarket()
{
FillTradeList(marketListParent, trade.marketListings, true);
}
public void RefreshMyListings()
{
FillTradeList(myListingsParent, trade.myListings, false);
}
private void FillTradeList(Transform parent, List listings, bool isBuy)
{
if (parent == null || listings == null) return;
foreach (Transform child in parent)
Destroy(child.gameObject);
foreach (var listing in listings)
{
if (listing.item == null) continue;
var entry = CreateEntry(parent, tradeListingPrefab);
var text = entry.GetComponentInChildren();
var button = entry.GetComponentInChildren