Files
JJBB/Assets/Project/Script/Obj/Obj_Characters/Obj_OtherPlayer_Magic.cs
2024-08-23 15:49:34 +08:00

100 lines
3.6 KiB
C#

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;
}
}
}
}