100 lines
3.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
} |