using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System; using vnxbqy.UI; using EnhancedUI.EnhancedScroller; using System.Collections; namespace vnxbqy.UI { public class MagicianWin : Window { [SerializeField] ScrollerController m_GodWeaponController; [SerializeField] LongPressButton m_Hammer; [SerializeField] Text m_HammerLabel; [SerializeField] Button m_AutoHammer; [SerializeField] Text m_AutoHammerLabel; [SerializeField] Button m_Preview; [SerializeField] Button m_Rule; [SerializeField] Text m_PropertyTitle; [SerializeField] Text m_CostItemTitle; [SerializeField] RectTransform m_ContainerUnlock; [SerializeField] RectTransform m_ContainerSlider; [SerializeField] IntensifySmoothSlider m_ExpSlider; [SerializeField] Text m_Exp; [SerializeField] PropertyBehaviour[] m_Propertys; [SerializeField] RectTransform m_ContainerLock; [SerializeField] RectTransform m_ContainerProgress; [SerializeField] Text m_Progress; [SerializeField] Text m_UnlockCondition; [SerializeField] PropertyBehaviour[] m_PreviewPropertys; [SerializeField] RectTransform m_ContainerCondition; [SerializeField] Text m_GodWeaponCondition; [SerializeField] RectTransform m_ContainerSkill; [SerializeField] GodWeaponSkillBehaviour[] m_Skills; [SerializeField] HorizontalLayoutGroup m_SkillLayout; [SerializeField] ContentSizeFitter m_SkillSizeFitter; [SerializeField] ScrollRect m_SkillScroller; [SerializeField] RectTransform m_EffectPoint; [SerializeField] ItemCell[] m_Items; [SerializeField] Image m_Select; [SerializeField] RawImage m_GodWeaponModel; [SerializeField] UIEffect m_GodWeaponEffect; [SerializeField] RectTransform m_HammerRedpoint; [SerializeField, Header("滑动条时间")] float m_SliderDelay = 0.1f; MagicianModel model { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } int selectItemCount = 0; bool moneyHammer = false; bool lockGodWeaponUpdate = false; bool lockItemUpdate = false; AutoHammerState m_LastAutoHammerState = AutoHammerState.None; AutoHammerState m_AutoHammerState = AutoHammerState.None; AutoHammerState autoHammerState { get { return m_AutoHammerState; } set { m_LastAutoHammerState = m_AutoHammerState; m_AutoHammerState = value; switch (m_AutoHammerState) { case AutoHammerState.None: OnExitAutoHammer(); break; case AutoHammerState.Hammer: OnHammer(); break; case AutoHammerState.WaitAnimation: break; case AutoHammerState.WaitServer: OnWaitServer(); break; } DisplayAutoHammerLabel(); } } FunctionUnlockFlyObjectTarget flyObjectTarget; float waitServerTimer = 0f; const float WaitServerTime = 5.0f; static Dictionary currentPropertyDict = new Dictionary(); static List displayPropertys = new List(); static Dictionary addPropertyDict = new Dictionary(); #region built-in protected override void BindController() { } protected override void AddListeners() { m_GodWeaponController.OnRefreshCell += OnRefreshCell; m_Hammer.onClick.AddListener(Hammer); m_Hammer.onPress.AddListener(PressHammer); m_Preview.onClick.AddListener(Preview); m_AutoHammer.onClick.AddListener(AutoHammer); m_Rule.onClick.AddListener(OnRule); for (int i = 0; i < m_Items.Length; i++) { var index = i; m_Items[i].button.onClick.AddListener(() => { OnSelectItem(index); }); } } protected override void OnPreOpen() { autoHammerState = AutoHammerState.None; m_LastAutoHammerState = AutoHammerState.None; moneyHammer = false; lockGodWeaponUpdate = false; lockItemUpdate = false; if (!HandleAchievement()) { model.selectType = GetDefaultSelect(); } model.gotoType = 0; DisplayGodWeaponTypes(); DisplayGodWeaponInfo(true); DisplaySkills(); DisplayItems(); model.selectItemIndex = GetItemIndex(model.selectType); DisplaySelectItem(); DisplayGodWeaponModel(); m_SkillScroller.horizontalNormalizedPosition = 0f; if (flyObjectTarget != null) { Destroy(flyObjectTarget); } SysNotifyMgr.Instance.sysNotifyEvent += SysNotifyEvent; model.onSelectUpdate += OnSelectUpdate; model.godWeaponUpdate += GodWeaponUpdate; packModel.refreshItemCountEvent += RefreshItemCountAct; WindowCenter.Instance.windowBeforeOpenEvent += WindowBeforeOpenEvent; WindowCenter.Instance.windowBeforeCloseEvent += WindowBeforeCloseEvent; ActivateShow.prepareFlySkillEvent += PrepareFlySkillEvent; ActivateShow.complelteFlySkillEvent += ComplelteFlySkillEvent; AutoHammerWin.onConfirm += OnAutoHammerConfirm; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; } protected override void OnAfterOpen() { } protected override void OnAfterClose() { } protected override void OnPreClose() { autoHammerState = AutoHammerState.None; SysNotifyMgr.Instance.sysNotifyEvent -= SysNotifyEvent; model.onSelectUpdate -= OnSelectUpdate; model.godWeaponUpdate -= GodWeaponUpdate; packModel.refreshItemCountEvent -= RefreshItemCountAct; WindowCenter.Instance.windowBeforeOpenEvent -= WindowBeforeOpenEvent; WindowCenter.Instance.windowBeforeCloseEvent -= WindowBeforeCloseEvent; ActivateShow.prepareFlySkillEvent -= PrepareFlySkillEvent; ActivateShow.complelteFlySkillEvent -= ComplelteFlySkillEvent; AutoHammerWin.onConfirm -= OnAutoHammerConfirm; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitializeEvent; UI3DTreasureExhibition.Instance.Stop(); } protected override void LateUpdate() { base.LateUpdate(); switch (autoHammerState) { case AutoHammerState.Hammer: break; case AutoHammerState.WaitServer: waitServerTimer += Time.deltaTime; if (waitServerTimer >= WaitServerTime) { autoHammerState = AutoHammerState.Hammer; } break; } } #endregion private void BeforePlayerDataInitializeEvent() { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.None; } } private void SysNotifyEvent(string key, ArrayList infoList) { if (key == "GetGodWeapon" && infoList != null && infoList.Count >= 2) { int type = 0; if (!int.TryParse(infoList[1].ToString(), out type)) { return; } if (type == 2) { m_GodWeaponEffect.effect = 3035; m_GodWeaponEffect.Play(); } else if (type == 3) { m_GodWeaponEffect.effect = 3036; m_GodWeaponEffect.Play(); } } } private void ComplelteFlySkillEvent(ActivateShow.ActivateFunc type) { if (type == ActivateShow.ActivateFunc.GodWeapon) { if (flyObjectTarget != null) { Destroy(flyObjectTarget); } DisplaySkills(); } } private void PrepareFlySkillEvent(ActivateShow.ActivateFunc type, int skillId) { var index = 0; if (type == ActivateShow.ActivateFunc.GodWeapon) { var godWeaponType = 0; if (TryGetGodWeaponType(skillId, out godWeaponType, out index)) { model.selectType = godWeaponType; flyObjectTarget = m_EffectPoint.AddMissingComponent(); flyObjectTarget.IdList = new int[] { skillId }; flyObjectTarget.Z_UnLockType = FunctionUnlockType.Skill; FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.Skill, new int[] { skillId }, flyObjectTarget); } } var rt = m_SkillLayout.transform as RectTransform; var rt1 = m_SkillScroller.transform as RectTransform; var delta = m_Skills[index].transform.localPosition.x; var offset = rt.rect.width - rt1.rect.width; delta -= offset; m_SkillScroller.horizontalNormalizedPosition = Mathf.Clamp01(delta / offset); var worldpos = m_Skills[index].transform.TransformPoint(Vector3.zero); var localpos = transform.InverseTransformPoint(worldpos); m_EffectPoint.transform.localPosition = localpos; } private void WindowBeforeCloseEvent(Window window) { if (window is RealmPropertyUpWin) { DisplayGodWeaponModel(); if (autoHammerState == AutoHammerState.WaitAnimation) { autoHammerState = AutoHammerState.Hammer; } } } private void WindowBeforeOpenEvent(Window window) { if (window is RealmPropertyUpWin) { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.WaitAnimation; } } } private void RefreshItemCountAct(PackType packType, int index, int itemId) { if (packType == PackType.Item) { DisplayItems(); bool noneOfAnyItemCount = true; var items = model.GetLevelUpItemByType(model.selectType); for (int i = 0; i < items.Length; i++) { if (packModel.GetItemCountByID(PackType.Item, items[i]) > 0) { noneOfAnyItemCount = false; } } var count = packModel.GetItemCountByID(PackType.Item, items[model.selectItemIndex]); if (count == 0 && !noneOfAnyItemCount) { OnSelectItem(GetItemIndex(model.selectType, model.selectItemIndex)); } if (model.IsGodWeaponHammerItem(model.selectType, itemId)) { lockItemUpdate = false; if (!moneyHammer && autoHammerState == AutoHammerState.WaitServer && !lockItemUpdate && !lockGodWeaponUpdate) { autoHammerState = AutoHammerState.Hammer; } } } } private void OnSelectUpdate() { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.None; } DisplayGodWeaponInfo(true); DisplaySkills(); DisplayItems(); model.selectItemIndex = GetItemIndex(model.selectType); DisplaySelectItem(); DisplayGodWeaponModel(); m_GodWeaponController.m_Scorller.RefreshActiveCellViews(); m_SkillScroller.horizontalNormalizedPosition = 0f; } private void GodWeaponUpdate() { m_GodWeaponController.m_Scorller.RefreshActiveCellViews(); DisplayGodWeaponInfo(false); lockGodWeaponUpdate = false; if (autoHammerState != AutoHammerState.None) { if (moneyHammer) { if (autoHammerState == AutoHammerState.WaitServer) { autoHammerState = AutoHammerState.Hammer; } } else { if (!lockItemUpdate && autoHammerState == AutoHammerState.WaitServer) { autoHammerState = AutoHammerState.Hammer; } } } } private void DisplayGodWeaponInfo(bool immediatly) { bool active = model.IsGodWeaponUnlock(model.selectType); var maxLevel = model.IsGodWeaponMaxLevel(model.selectType); m_ContainerLock.SetActive(!active); m_ContainerUnlock.SetActive(active); m_ContainerSlider.SetActive(active); m_Hammer.SetActive((active || model.SatisfyUnlockCondition(model.selectType)) && !maxLevel); m_AutoHammer.SetActive(active && !maxLevel); m_HammerRedpoint.SetActive(model.GetRedpointLightByType(model.selectType)); m_Preview.SetActive(false); if (!active) { m_CostItemTitle.text = Language.Get("L1049"); m_PropertyTitle.text = Language.Get("L1048"); m_HammerLabel.text = Language.Get("L1130"); DisplayPreviewProperty(); DisplayProgress(); DisplayCondition(); } else { m_ContainerProgress.SetActive(false); m_ContainerCondition.SetActive(false); m_CostItemTitle.text = Language.Get("L1052"); m_PropertyTitle.text = Language.Get("L1051"); m_HammerLabel.text = Language.Get("L1131"); DisplayProperty(); DisplayExp(immediatly); } } private void DisplaySkills() { List displaySkillLevels = new List(); Dictionary dict; var index = 0; if (model.TryGetGodWeaponSkills(model.selectType, out dict)) { displaySkillLevels.AddRange(dict.Keys); } displaySkillLevels.Sort(); foreach (var level in displaySkillLevels) { if (index < m_Skills.Length) { m_Skills[index].SetActive(true); var godWeaponConfig = GodWeaponConfig.GetConfig(model.selectType, level); if (dict != null && dict.ContainsKey(level)) { m_Skills[index].Display(godWeaponConfig); } index++; } } for (int i = index; i < m_Skills.Length; i++) { m_Skills[i].SetActive(false); } m_ContainerSkill.SetActive(displaySkillLevels.Count > 0); m_SkillSizeFitter.horizontalFit = displaySkillLevels.Count > 4 ? ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained; m_SkillLayout.childAlignment = displaySkillLevels.Count > 4 ? TextAnchor.MiddleLeft : TextAnchor.MiddleCenter; m_SkillScroller.horizontal = displaySkillLevels.Count > 4; if (displaySkillLevels.Count <= 4) { var rt = m_SkillLayout.transform as RectTransform; rt.sizeDelta = rt.sizeDelta.SetX(m_ContainerSkill.rect.width); } } private void DisplayItems() { var items = model.GetLevelUpItemByType(model.selectType); for (int i = 0; i < m_Items.Length; i++) { if (items != null && i < items.Length) { m_Items[i].SetActive(true); var count = packModel.GetItemCountByID(PackType.Item, items[i]); ItemCellModel cellModel = new ItemCellModel(items[i], false, (ulong)count); m_Items[i].Init(cellModel); m_Items[i].countText.text = count.ToString(); m_Items[i].countText.color = count > 0 ? UIHelper.GetUIColor(TextColType.Green) : UIHelper.GetUIColor(TextColType.Red); m_Items[i].countText.SetActive(true); } else { m_Items[i].SetActive(false); } } } private void OnSelectItem(int index, bool tip = true) { if (model.selectItemIndex == index && tip) { var items = model.GetLevelUpItemByType(model.selectType); ItemTipUtility.Show(items[model.selectItemIndex]); } else { model.selectItemIndex = index; DisplaySelectItem(); } } private void DisplaySelectItem() { if (model.selectItemIndex >= 0 && model.selectItemIndex < m_Items.Length) { m_Select.transform.localPosition = m_Items[model.selectItemIndex].transform.localPosition; int[] items = model.GetLevelUpItemByType(model.selectType); selectItemCount = packModel.GetItemCountByID(PackType.Item, items[model.selectItemIndex]); } else { selectItemCount = 0; } } private void CheckSelectItemCounts() { int[] items = model.GetLevelUpItemByType(model.selectType); if (items != null && model.selectItemIndex >= 0 && model.selectItemIndex < items.Length) { selectItemCount = packModel.GetItemCountByID(PackType.Item, items[model.selectItemIndex]); } } private int GetItemIndex(int type, int except = -1) { var items = model.GetLevelUpItemByType(type); var index = 0; for (int i = 0; i < items.Length; i++) { if (i == except) { continue; } var count = packModel.GetItemCountByID(PackType.Item, items[i]); if (count > 0) { index = i; } } return index; } private void DisplayProgress() { bool requireProgress = !model.IsGodWeaponUnlock(model.selectType) && !model.ContainsCondition(model.selectType); m_ContainerProgress.SetActive(requireProgress); if (requireProgress) { var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); var config = GodWeaponConfig.GetConfig(godWeaponInfo.type, godWeaponInfo.level); int progress = 100; if (config != null) { progress = (int)((float)godWeaponInfo.exp / config.NeedExp * 100); } m_Progress.text = StringUtility.Contact(progress, "%"); } } private void DisplayCondition() { bool requireCondition = !model.IsGodWeaponUnlock(model.selectType) && model.ContainsCondition(model.selectType); m_ContainerCondition.SetActive(requireCondition); if (requireCondition) { var playerLevelLimit = 0; model.TryGetPlayerLevelCondition(model.selectType, out playerLevelLimit); List list; model.TryGetConditions(model.selectType, out list); var limitGodWeaponType = 0; var limitGodWeaponLevel = 0; if (list != null) { var index = 0; for (int i = 0; i < list.Count; i++) { var godWeaponInfo = model.GetGodWeaponInfo(list[i].type); if (godWeaponInfo != null && godWeaponInfo.level >= list[i].level) { if (i + 1 < list.Count) { index = i + 1; } } else { break; } } if (index < list.Count) { limitGodWeaponType = list[index].type; limitGodWeaponLevel = list[index].level; } } if (playerLevelLimit > 0 && list != null) { var config = GodWeaponConfig.GetConfig(limitGodWeaponType, 1); m_GodWeaponCondition.text = Language.Get("GodWeaponCondition1", playerLevelLimit, config.Name, limitGodWeaponLevel); } else if (playerLevelLimit > 0 && list == null) { m_GodWeaponCondition.text = Language.Get("GodWeaponCondition2", playerLevelLimit); } else if (playerLevelLimit == 0 && list != null) { var config = GodWeaponConfig.GetConfig(limitGodWeaponType, 1); m_GodWeaponCondition.text = StringUtility.Contact(config.Name, Language.Get("GodWeaponCondition", limitGodWeaponLevel)); } } } private void DisplayExp(bool immediatly) { var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); if (godWeaponInfo != null && godWeaponInfo.level >= 1) { bool isMaxLevel = model.IsGodWeaponMaxLevel(model.selectType); m_ExpSlider.slider.minValue = 0; m_ExpSlider.slider.maxValue = 1; var config = GodWeaponConfig.GetConfig(model.selectType, godWeaponInfo.level); m_ExpSlider.stage = config.Lv; if (isMaxLevel) { m_ExpSlider.delay = 0; m_ExpSlider.ResetStage(); m_ExpSlider.value = 1; m_Exp.text = Language.Get("L1053"); } else { var value = (float)godWeaponInfo.exp / config.NeedExp; if (immediatly) { m_ExpSlider.delay = 0; m_ExpSlider.ResetStage(); } else { m_ExpSlider.delay = m_SliderDelay; } m_Exp.text = StringUtility.Contact(godWeaponInfo.exp, "/", config.NeedExp); m_ExpSlider.value = value; } } } private void DisplayPreviewProperty() { var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); if (godWeaponInfo != null) { var config = GodWeaponConfig.GetConfig(godWeaponInfo.type, godWeaponInfo.level + 1); m_UnlockCondition.text = Language.Get("L1050", config.Name); for (int i = 0; i < m_PreviewPropertys.Length; i++) { if (i < config.AttrType.Length) { m_PreviewPropertys[i].SetActive(true); m_PreviewPropertys[i].DisplayUpper(config.AttrType[i], config.AttrNum[i]); } else { m_PreviewPropertys[i].SetActive(false); } } } } private void DisplayProperty() { bool isMaxLevel = model.IsGodWeaponMaxLevel(model.selectType); var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); currentPropertyDict.Clear(); addPropertyDict.Clear(); displayPropertys.Clear(); var config = GodWeaponConfig.GetConfig(model.selectType, godWeaponInfo.level); for (int i = 0; i < config.AttrType.Length; i++) { currentPropertyDict.Add(config.AttrType[i], config.AttrNum[i]); if (!displayPropertys.Contains(config.AttrType[i])) { displayPropertys.Add(config.AttrType[i]); } } if (!isMaxLevel) { config = GodWeaponConfig.GetConfig(model.selectType, godWeaponInfo.level + 1); for (int i = 0; i < config.AttrType.Length; i++) { addPropertyDict.Add(config.AttrType[i], config.AttrNum[i]); if (!displayPropertys.Contains(config.AttrType[i])) { displayPropertys.Add(config.AttrType[i]); } } } for (int i = 0; i < m_Propertys.Length; i++) { if (i < displayPropertys.Count) { var key = displayPropertys[i]; m_Propertys[i].SetActive(true); var currentValue = 0; if (currentPropertyDict.ContainsKey(key)) { currentValue = currentPropertyDict[key]; } var addValue = 0; if (addPropertyDict.ContainsKey(key)) { if (currentPropertyDict.ContainsKey(key)) { addValue = addPropertyDict[key] - currentPropertyDict[key]; } else { addValue = addPropertyDict[key]; } } m_Propertys[i].DisplayGodWeaponAdd(displayPropertys[i], currentValue, addValue); } else { m_Propertys[i].SetActive(false); } } } private int GetDefaultSelect() { var _type = model.godWeaponTypes[0]; if (model.godWeaponTypes.Contains(model.gotoType)) { _type = model.gotoType; model.gotoType = 0; } else { for (int i = 0; i < model.godWeaponTypes.Count; i++) { if (model.GetRedpointLightByType(model.godWeaponTypes[i])) { _type = model.godWeaponTypes[i]; break; } } } return _type; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var godWeaponCell = cell as GodWeaponCell; godWeaponCell.Display(cell.index); } private void DisplayGodWeaponTypes() { if (m_GodWeaponController.GetNumberOfCells(m_GodWeaponController.m_Scorller) == 0) { var list = model.godWeaponSorts; m_GodWeaponController.Refresh(); for (int i = 0; i < list.Count; i++) { if (model.godWeaponTypes.Contains(list[i])) { m_GodWeaponController.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect); } } m_GodWeaponController.Restart(); } else { m_GodWeaponController.m_Scorller.RefreshActiveCellViews(); } } private void OnGodWeaponSelect(CellView cell) { model.selectType = cell.index; } private void DisplayGodWeaponModel() { m_GodWeaponModel.SetActive(true); UI3DTreasureExhibition.Instance.ShowGodWeapon(model.selectType, m_GodWeaponModel); } private bool TryGetGodWeaponType(int skillId, out int type, out int index) { type = 0; index = 0; foreach (var key in model.godWeaponSkillDict.Keys) { var dict = model.godWeaponSkillDict[key]; var list = model.TryGetDisplaySkillLevels(key); foreach (var level in dict.Keys) { if (dict[level] == skillId) { type = key; index = list.IndexOf(level); return true; } } } return false; } private int HammerEffectId(int index) { return index == 0 ? 1117 : index == 1 ? 1118 : 1119; } private void PressHammer() { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.None; } if (!model.IsGodWeaponUnlock(model.selectType) && model.ContainsCondition(model.selectType)) { return; } if (selectItemCount <= 0) { CheckSelectItemCounts(); if (selectItemCount <= 0) { OnSelectItem(GetItemIndex(model.selectType), false); } if (selectItemCount <= 0) { var items = model.GetLevelUpItemByType(model.selectType); ItemTipUtility.Show(items[model.selectItemIndex]); return; } } selectItemCount--; Hammer(); } private void Hammer() { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.None; } if (!model.IsGodWeaponUnlock(model.selectType)) { if (model.ContainsCondition(model.selectType)) { if (model.SatisfyUnlockCondition(model.selectType)) { CA556_tagCMGodWeaponActivate pak = new CA556_tagCMGodWeaponActivate(); pak.WeaponType = (uint)model.selectType; GameNetSystem.Instance.SendInfo(pak); } return; } } var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); bool requireSwitchItem = false; if (godWeaponInfo != null) { var items = model.GetLevelUpItemByType(godWeaponInfo.type); if (model.selectItemIndex < items.Length) { var count = packModel.GetItemCountByID(PackType.Item, items[model.selectItemIndex]); if (count > 0 && godWeaponInfo.level >= 1) { EffectMgr.Instance.PlayUIEffect(HammerEffectId(model.selectItemIndex), 2500, m_Items[model.selectItemIndex].transform, false); } LimitedTimeLuxuryGiftModel.Instance.IsItemIdShow(10, items[model.selectItemIndex], 1, 1, 0); requireSwitchItem = count == 1; } } model.HammerGodWeapon(model.selectType); EffectMgr.Instance.PlayUIEffect(HammerEffectId(model.selectItemIndex), 2500, m_Items[model.selectItemIndex].transform, false); if (requireSwitchItem) { OnSelectItem(GetItemIndex(model.selectType, model.selectItemIndex), false); } } private void OnAutoHammerConfirm(bool isOk) { if (isOk && autoHammerState == AutoHammerState.None) { moneyHammer = true; autoHammerState = AutoHammerState.Hammer; } } private void AutoHammer() { if (autoHammerState != AutoHammerState.None) { autoHammerState = AutoHammerState.None; } else { var index = 0; if (model.IsGodWeaponMaxLevel(model.selectType)) { return; } if (ExistAnyHammerItem(model.selectType, out index)) { moneyHammer = false; autoHammerState = AutoHammerState.Hammer; } else { //AutoHammerCost autoHammerCost; //if (model.TryGetAutoHammerCost(model.selectType, out autoHammerCost)) //{ // AutoHammerWin.selectGodWeaponType = model.selectType; // WindowCenter.Instance.Open(); //} //else { var items = model.GetLevelUpItemByType(model.selectType); ItemTipUtility.Show(items[0]); } } } } private void OnHammer() { if (model.IsGodWeaponMaxLevel(model.selectType)) { autoHammerState = AutoHammerState.None; return; } var items = model.GetLevelUpItemByType(model.selectType); LimitedTimeLuxuryGiftModel.Instance.IsItemIdShow(10, items[model.selectItemIndex], 1, 1, 0); var index = 0; if (!moneyHammer) { if (!ExistAnyHammerItem(model.selectType, out index)) { autoHammerState = AutoHammerState.None; return; } var count = model.GetAutoHammerCount(model.selectType, index); if (index != model.selectItemIndex) { OnSelectItem(index); } EffectMgr.Instance.PlayUIEffect(HammerEffectId(index), 2500, m_Items[index].transform, false); CA555_tagCMGodWeaponPlus pak = new CA555_tagCMGodWeaponPlus(); pak.ItemID = (uint)items[index]; pak.WeaponType = (uint)model.selectType; pak.IsAutoBuy = 1; pak.ItemCount = (byte)Mathf.Min(byte.MaxValue, count); GameNetSystem.Instance.SendInfo(pak); model.PlayHammerAudio(); } else { var godWeaponInfo = model.GetGodWeaponInfo(model.selectType); if (godWeaponInfo != null && godWeaponInfo.level >= model.autoHammerLevel) { autoHammerState = AutoHammerState.None; return; } var requireExp = 0; for (int i = godWeaponInfo.level; i < model.autoHammerLevel; i++) { var config = GodWeaponConfig.GetConfig(model.selectType, i); if (config != null) { requireExp += config.NeedExp; } } requireExp -= (int)godWeaponInfo.exp; requireExp = Mathf.Max(0, requireExp); var count = model.GetAutoHammerCount(model.selectType); AutoHammerCost autoHammerCost; if (!model.TryGetAutoHammerCost(model.selectType, out autoHammerCost)) { autoHammerState = AutoHammerState.None; return; } if (count * autoHammerCost.exp > requireExp) { count = Mathf.CeilToInt((float)requireExp / autoHammerCost.exp); } count = Mathf.Max(1, count); count = Mathf.Min(byte.MaxValue, count); var cost = count * autoHammerCost.cost; if (PlayerDatas.Instance.baseData.diamond < cost) { autoHammerState = AutoHammerState.None; return; } CA555_tagCMGodWeaponPlus pak = new CA555_tagCMGodWeaponPlus(); pak.ItemID = (uint)items[0]; pak.WeaponType = (uint)model.selectType; pak.IsAutoBuy = 1; pak.ItemCount = (byte)count; GameNetSystem.Instance.SendInfo(pak); model.PlayHammerAudio(); } lockGodWeaponUpdate = true; lockItemUpdate = true; autoHammerState = AutoHammerState.WaitServer; } private void DisplayAutoHammerLabel() { switch (autoHammerState) { case AutoHammerState.None: m_AutoHammerLabel.text = Language.Get("AutoHammerBtnTxt"); break; case AutoHammerState.Hammer: case AutoHammerState.WaitAnimation: case AutoHammerState.WaitServer: m_AutoHammerLabel.text = Language.Get("CancelAutoHammerBtnTxt"); break; } } private void OnExitAutoHammer() { if (m_LastAutoHammerState != AutoHammerState.None) { DisplayExp(true); if (moneyHammer) { ScrollTip.Close(); } } } private void OnWaitServer() { waitServerTimer = 0f; } private void Preview() { } bool ExistAnyHammerItem(int type, out int index) { var items = model.GetLevelUpItemByType(type); index = 0; for (int i = items.Length - 1; i >= 0; i--) { var count = packModel.GetItemCountByID(PackType.Item, items[i]); if (count > 0) { index = i; return true; } } return false; } private void OnRule() { var ruleId = 0; switch (model.selectType) { case 1: ruleId = 33; break; case 2: ruleId = 34; break; case 3: ruleId = 35; break; case 4: ruleId = 36; break; } if (ruleId != 0) { ModelCenter.Instance.GetModel().ruleId = ruleId; WindowCenter.Instance.Open(); } } bool HandleAchievement() { if (AchievementGoto.achievementType == AchievementGoto.GodWeapon) { var config = SuccessConfig.Get(AchievementGoto.guideAchievementId); if (config != null) { var type = config.Condition[0]; if (model.GetRedpointLightByType(type)) { model.selectType = type; var effect = AchievementGuideEffectPool.Require(1); effect.transform.SetParentEx(m_Hammer.transform, Vector3.zero, Vector3.zero, Vector3.one); return true; } else { SysNotifyMgr.Instance.ShowTip("Achievement_8"); } } } return false; } enum AutoHammerState { None, Hammer, WaitAnimation, WaitServer, } } }