using System.Collections.Generic; using System.Collections; using System.Security.Permissions; using UnityEngine; using Games.GlobeDefine; using Games.Item; using GCGame.Table; using Games.AnimationModule; namespace Games.LogicObj { ////////////////////////////////////////////////////////////////////////// // 法宝相关 ////////////////////////////////////////////////////////////////////////// public partial class Obj_OtherPlayer : Obj_Character { public readonly ObjModelRecord magicItem = new ObjModelRecord(); private const float _magicLerpRatio = 1.5f; private Vector3 _offset; public int MagicID { get { return _magicId; } private set { _magicId = value; } } private int _magicId = -1; public void CreateMagicModel(int nMagicID) { if (MagicID != nMagicID) { MagicID = nMagicID; Tab_MagicWeaponActiveModel magicTable = null; Tab_CharModel charTable = null; if (MagicID > GlobeVar.INVALID_ID) { magicTable = TableManager.GetMagicWeaponActiveModelByID(MagicID, 0); if (magicTable != null) charTable = TableManager.GetCharModelByID(magicTable.Model, 0); } if (charTable == null) magicItem.RemoveModel(); else { var hashTable = new Hashtable(); hashTable[modelDataHashName] = magicTable; magicItem.LoadModel(LoadAssetBundle.BUNDLE_PATH_MODEL, charTable.ResPath, hashTable, OnAsycLoadMagic); } } } private void OnMagicCreate(ObjPartRoot magicObj, object dataTable) { var magicData = dataTable as Tab_MagicWeaponActiveModel; Tab_CharModel charData = null; // 强制修复。注:走到这一步,有可能导致老模型使用新数据。 if (magicData == null) magicData = TableManager.GetMagicWeaponActiveModelByID(MagicID, 0); if (magicData != null) charData = TableManager.GetCharModelByID(magicData.Model, 0); magicObj.gameObject.SetLayerRecursively(gameObject.layer); var magicTransform = magicObj.transform; magicTransform.SetParent(null); if (charData == null) { magicTransform.localScale = Vector3.one; _offset = Vector3.zero; } else { magicTransform.localScale = Vector3.one * charData.Scale; _offset = new Vector3(magicData.PosX, magicData.PosY, magicData.PosZ); } magicTransform.position = ObjTransform.TransformPoint(_offset); } private void OnMagicDestroy(ObjPartRoot magicObj) { // 占位,暂时没有需要处理的功能 } public void OnAsycLoadMagic(string modelName, ObjPartRoot resObj, ObjModelLoadResult loadResult, Hashtable hash) { // 占位,暂时没有需要处理的功能 } private void UpdateMagic() { if (magicItem.model != null) { var magicTransform = magicItem.model.transform; var targetPos = ObjTransform.TransformPoint(_offset); var magicPos = Vector3.Lerp(magicTransform.position, targetPos, _magicLerpRatio * Time.deltaTime); magicTransform.position = magicPos; } } } }