using UnityEngine; using System.Collections; using Games.Item; using GCGame.Table; using Games.GlobeDefine; using System.Collections.Generic; using Module.Log; public class TresureItem :Singleton { void OnEnable() { GameManager.gameManager.PlayerDataPool.InTreasureState = true; } void OnDisable() { GameManager.gameManager.PlayerDataPool.InTreasureState = false; } public static float _AnimTime = 2; public static float AnimTime { get { if (_AnimTime < 0) { _AnimTime = SystemParam.GetSystemParam_FLOAT(24); } return _AnimTime; } } public void UseTresureItemInBackPack(GameItem gameItem) { if (gameItem.GetClass() != (int)ItemClass.TRESURE) return; if (gameItem.GetSubClass() == (int)TresureSubClass.PosClearLow || gameItem.GetSubClass() == (int)TresureSubClass.PosClearMid || gameItem.GetSubClass() == (int)TresureSubClass.PosClearHeight || gameItem.GetSubClass() == (int)TresureSubClass.PosClearGold) { UseDefinedTresure(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.PosNotClearLow) { UseDefinedTresure(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.PosNotClearHeight) { UIManager.CloseUI(UIInfo.BackPackRoot); PosNotClearItemMid(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.Lottery) { UseDefinedTresure(gameItem); } } private void UseDefinedTresure(GameItem gameitem) { UIManager.CloseUI(UIInfo.BackPackRoot); TreasureItemLogic.InitItemInfo(gameitem); } public void Update() { if (_SearchItem == null) return; AnimUpdate(); } #region private GameItem _SearchItem = null; public GameItem SearchItem { get { return _SearchItem; } } public void UseTresureInUI(GameItem gameItem) { if (gameItem.GetSubClass() == (int)TresureSubClass.PosClearLow || gameItem.GetSubClass() == (int)TresureSubClass.PosClearMid || gameItem.GetSubClass() == (int)TresureSubClass.PosClearHeight || gameItem.GetSubClass() == (int)TresureSubClass.PosClearGold) { PosClearItem(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.PosNotClearLow) { PosNotClearItem(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.PosNotClearHeight) { PosNotClearItemMid(gameItem); } else if (gameItem.GetSubClass() == (int)TresureSubClass.Lottery) { } } private void PosClearItem(GameItem gameItem) { Tab_TreasureBase treasureTab = TableManager.GetTreasureBaseByID(gameItem.DataID, 0); if (treasureTab == null) return; _SearchItem = gameItem; AutoSearchTreasurePos(treasureTab.ScneneId, new Vector3(treasureTab.GetPosXbyIndex(0), 0, treasureTab.GetPosYbyIndex(0)), gameItem); } public void AutoSearchTreasurePos(int sceneID, Vector3 pos, GameItem gameItem) { Singleton.GetInstance().MainPlayer.BreakAutoCombatState(); // 自动寻路 AutoSearchPoint point = new AutoSearchPoint(sceneID, pos.x, pos.z); if (GameManager.gameManager && GameManager.gameManager.AutoSearch) { GameManager.gameManager.AutoSearch.BuildPath(point); if (null != GameManager.gameManager.AutoSearch.Path) { GameManager.gameManager.AutoSearch.Path.autoSearchRadius = 1; GameManager.gameManager.AutoSearch.Path.AutoSearchTargetID = -1; GameManager.gameManager.AutoSearch.Path.finishCallBack = AutoSearchCallBack; GameManager.gameManager.AutoSearch.Path.callBackParam = gameItem; } } } private List treasureActionNameList = new List { 5600, 5601, 5602, 5603 }; private void AutoSearchCallBack(object param) { var mainPlayer = Singleton.GetInstance().MainPlayer; if (mainPlayer == null || mainPlayer.IsUsingSkill || Singleton.GetInstance().MainPlayer.IsHaveNoMoveBuff()) { return; } if (GameManager.gameManager.PlayerDataPool.IsInMeditateState) mainPlayer.BreakMeditate(); mainPlayer.AskUnMount(); mainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_FINSH); mainPlayer.AnimLogic.Play((int)CharacterDefine.CharacterAnimId.COLLECTACTION); var strdicId = "#{" + treasureActionNameList[Random.Range(0, 3)] + "}"; SkillProgressLogic.PlayProcess(SkillProgressLogic.ProgressModel.ORDERMODEL, AnimTime, StrDictionary.GetClientDictionaryString(strdicId)); _ActingTime = AnimTime; } private void BreakAnim() { SkillProgressLogic.StopProcess(0); _SearchItem = null; _ActingTime = 0; } private float _ActingTime = 0; private void AnimUpdate() { if (_ActingTime <= 0) return; _ActingTime -= Time.deltaTime; if (Singleton.GetInstance().MainPlayer.CurObjAnimState != GameDefine_Globe.OBJ_ANIMSTATE.STATE_FINSH) { BreakAnim(); return; } if (_ActingTime <= 0) { SendTreasureItem(_SearchItem); Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR); //_SearchItem = null; } } private void SendTreasureItem(GameItem treasureItem) { LogModule.DebugLog("SendTreasureItem"); if (treasureItem != null && treasureItem.IsValid()) { if (null != Singleton.Instance.MainPlayer) { Singleton.Instance.MainPlayer.UseItem(treasureItem); } } if (treasureItem.StackCount > 1) { TreasureItemLogic.InitItemInfo(treasureItem); UseTresureInUI(treasureItem); return; } var treasureList = ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, (int)ItemClass.TRESURE, (int)TresureSubClass.PosClearLow, false); treasureList.AddRange(ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, (int)ItemClass.TRESURE, (int)TresureSubClass.PosClearMid, false)); treasureList.AddRange(ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, (int)ItemClass.TRESURE, (int)TresureSubClass.PosClearHeight, false)); treasureList.AddRange(ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, (int)ItemClass.TRESURE, (int)TresureSubClass.PosClearGold, false)); foreach (var treasure in treasureList) { if (treasure != treasureItem) { TreasureItemLogic.InitItemInfo(treasure); UseTresureInUI(treasure); return; } } _SearchItem = null; UIManager.CloseUI(UIInfo.TreasureItemRoot); } private void PosNotClearItem(GameItem gameItem) { Tab_TreasureBase treasureTab = TableManager.GetTreasureBaseByID(gameItem.DataID, 0); if (treasureTab == null) return; if (GameManager.gameManager.ActiveScene.CurSceneServerID != treasureTab.ScneneId) { GUIData.AddNotifyData( StrDictionary.GetClientDictionaryString("#{5009}")); return; } float distance = Vector2.Distance(new Vector2(Singleton.Instance.MainPlayer.Position.x, Singleton.Instance.MainPlayer.Position.z), new Vector2(treasureTab.GetPosXbyIndex(0), treasureTab.GetPosYbyIndex(0))); if (distance < 2) { SendTreasureItem(gameItem); } else { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5010}")); } } private void PosNotClearItemMid(GameItem gameItem) { TreasureSceneMap.ShowTreasureMap(gameItem); } #endregion }