using asap.core; using DG.Tweening; using game; using GameCore; using TMPro; using UnityEngine; using UnityEngine.UI; using UniRx; using cfg; using System.Collections; using System.Collections.Generic; public class BuildingData { public float upgradeTime; public int curStep; public string CurrentPrefab; public int areaStepCount; public int areaIndex; public int turnOffTimeScale; /// /// 以下是下一步的数据 /// public bool isConstructionCost; public int required; public ulong NextUpgradeCost; public List benefitsLevel; public string Icon; public string Title_l10n_key; public List DisplaySwitch; public int Rewards; public int NextStep; public int NextStepCount; public int NextTimelineId; public float NextStartTime; public float NextDuration; public string NextPrefab; public int NextOffTimeScale; } public class CampPanel : BasePanel { private PlayerData _playerData; private CampDataMM _campData; private Tables _table; private IUIService _uiService; private ILoadResourceService _loadResourceService; private BuffDataCenter _buffDataCenter; private PlayerItemData _playerItemData; private GuideDataCenter _guideDataCenter; private PlayerShopData _playerShopData; private IUserService _userService; // MMTService removed - A/B test switch defaults to false private CanvasGroup canvasGroup; private Animator animator; public TextMeshProUGUI areaInfo; public TextMeshProUGUI text_progress; private string text_progress_string = "0/0"; public TextMeshProUGUI cost; private GameObject costRoot; private TMP_Text text_cost_buff; private TMP_Text text_old; private TMP_Text text_info; TMP_Text text_info2; public RewardItemNew[] bg_reward; private Image[] rewardBg; public Image costIcon; private GameObject barGo1; private GameObject barGo2; private GameObject barGo3; private Image bar1; private Image bar2; private Image bar3; public Image currentBar; private CanvasGroup DownPanel; private UIButton upgradeButton; private GameObject tip_fast; private GameObject btn_icon; private GameObject btn_fix; private Animator upButtonAni; public UIDrag uiDrag; public Button btn_close; private Button btn_right; private Animation camp_target; private CanvasGroup top_area_canvas; UITopArea top_area; private float _upgradeTime; private bool _isUpgrading; private ulong _upgradeCost; ulong _curGold; private bool isStart = false; private bool isdrag = false; private bool fixIng = false; private GameObject particle; private GameObject kuang; private bool isAutoBuilding = false; private bool isAutoQuickBuilding = false; /// 本轮长按是否曾进入极速建造 UI(镜头/全屏 loop);不能仅用 IsAutoQuickBuilding(),因金币不足会先清 isAutoBuilding,或某步 turnOffTimeScale 会清 isAutoQuickBuilding。 private bool _quickBuildFxSessionActive = false; private bool isHolding = false; private Coroutine startTimer; private Coroutine _fastBuildScreenLoopFxRoutine; private GameObject fx_autofastbuild_button_hold; private GameObject fx_autofastbuild_screen_loop; private TMP_Text text_name; private Button btn_go; private GameObject btn_p_text; private GameObject btn_text_confirm; private bool isCampPanel_fade = false; private List levelItemDatas; private float buildingSpeed = 1; private float maxSpeed = 1.5f; /// 快速建造时镜头 360° 旋转一圈时长(秒),可配置 private float FastBuildCameraRotationDuration => _table.TbGlobalConfig.RotationDuration; /// 极速 UI 渐隐后再播全屏 loop 特效的延迟(秒),与 CampPanel_fade_fastauto 节奏对齐 [SerializeField] private float _fastAutoScreenLoopFxDelaySeconds = 1f; /// 快速建造结束后,进度条匀速增长的速度(填充量/秒),值越大进度条跑得越快 private int rewardLen = 0; private Queue buildingDatas = new Queue(); private int _currentBuildingAreaIndex = -1; private void Awake() { // 一次性解析所有需要的依赖 ResolveDependencies(); var topArea = transform.Find("top_area"); top_area_canvas = topArea.GetComponent(); top_area = topArea.GetComponent(); particle = topArea.Find("particle").gameObject; maxSpeed = 1 + _table.TbGlobalConfig.TimeScalePerStep * _table.TbGlobalConfig.AccMaxStep; canvasGroup = GetComponent(); animator = GetComponent(); var safearea = transform.Find("safearea"); uiDrag = safearea.Find("Image").GetComponent(); var middlePanel = safearea.Find("MiddlePanel"); text_name = middlePanel.Find("completed/text_name").GetComponent(); var campTarget = middlePanel.Find("camp_target"); camp_target = campTarget.GetComponent(); bg_reward = campTarget.Find("reward").GetComponentsInChildren(); rewardBg = new Image[bg_reward.Length]; for (int i = 0; i < bg_reward.Length; i++) { rewardBg[i] = bg_reward[i].transform.Find("bg").GetComponent(); } var bgBar = campTarget.Find("bg_bar"); areaInfo = bgBar.Find("text_areaInfo").GetComponent(); text_progress = bgBar.Find("bg_progress/text_progress").GetComponent(); barGo1 = bgBar.Find("bar1").gameObject; barGo2 = bgBar.Find("bar2").gameObject; barGo3 = bgBar.Find("bar3").gameObject; bar1 = barGo1.transform.Find("bar").GetComponent(); bar2 = barGo2.transform.Find("bar").GetComponent(); bar3 = barGo3.transform.Find("bar").GetComponent(); var downPanel = safearea.Find("DownPanel"); DownPanel = downPanel.GetComponent(); btn_close = downPanel.Find("btn_close").GetComponent