Files
JJBB/Assets/Project/Script/Scene/SceneLogic/FusionEffectController.cs
2024-08-23 15:49:34 +08:00

95 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Games.GlobeDefine;
using Games.LogicObj;
using Games.Scene;
using GCGame.Table;
using Module.Log;
using UnityEngine;
// 融合效果的控制器 - 切换场景需要删除。逻辑也独立于其他模块因此单独开EffectController
public class FusionEffectController : MonoBehaviour
{
private const string _handleHeader = "FusionModel_";
private const int _defaultAnimId = 0;
private FusionEffectData _data;
private int _serverId0;
private int _serverId1;
private float _startTime;
private void Start()
{
_serverId0 = Animator.StringToHash(_handleHeader + _data.modelId0 + "_" + Time.realtimeSinceStartup + "_0");
_serverId1 = Animator.StringToHash(_handleHeader + _data.modelId1 + "_" + Time.realtimeSinceStartup + "_1");
_startTime = Time.unscaledTime;
var animData0 = GetAnimationData(_data.animId0);
var animData1 = GetAnimationData(_data.animId1);
CreateCloneObj(_serverId0, _data.modelId0, animData0.AnimName.ToLower(), _data.endPos);
CreateCloneObj(_serverId1, _data.modelId1, animData1.AnimName.ToLower(), _data.endPos);
}
private Tab_Animation GetAnimationData(int index)
{
var result = TableManager.GetAnimationByID(index, 0);
if (result == null)
{
LogModule.ErrorLog(string.Format("无法获得id = {0}的动画!", index));
result = TableManager.GetAnimationByID(_defaultAnimId, 0);
}
return result;
}
private void Update()
{
if (Time.unscaledTime > _startTime + _data.duration)
{
Destroy(gameObject);
if (IndependentEffectManager.Instance != null)
{
IndependentEffectManager.Instance.RemoveCharacterClone(_serverId0);
IndependentEffectManager.Instance.RemoveCharacterClone(_serverId1);
}
}
}
private Obj_CharacterClone CreateCloneObj(int serverId, int modelId, string animName, Vector2 startPos)
{
var result = IndependentEffectManager.Instance.ShowCharacterClone(serverId, startPos, Quaternion.identity,
CreateInitData(modelId, startPos, animName)).cloneObj;
result.ObjTransform.localRotation = _data.rotation;
return result;
}
private static Obj_Character_Clone_Init_Data CreateInitData(int modelId, Vector2 position, string animName)
{
var initData = new Obj_Character_Clone_Init_Data
{
m_nProfession = GlobeVar.INVALID_ID,
m_ModelVisualID = modelId,
m_WeaponDataID = GlobeVar.INVALID_ID,
m_fX = position.x,
m_fZ = position.y,
animData = new CharacterCloneAnimData
{
animName = animName
}
};
return initData;
}
public static void CreateFusionEffect(FusionEffectData data)
{
var gameObject = new GameObject("FusionEffectController");
var component = gameObject.AddComponent<FusionEffectController>();
component._data = data;
}
}
public class FusionEffectData
{
public int modelId0;
public int modelId1;
public int animId0;
public int animId1;
public Vector2 endPos;
public Quaternion rotation;
public float duration;
}