/******************************************************************** 文件名: Obj_Snare.cs 创建时间: 2014/05/11 14:55 全路径: TLOL\Version\Main\Project\Client\Assets\MLDJ\Script\Obj 创建人: 罗勇 功能说明: 陷阱 修改记录: *********************************************************************/ using Games.GlobeDefine; using Games.Scene; using GCGame.Table; using UnityEngine; namespace Games.LogicObj { public class Obj_Snare_Init_Data : Obj_Character_Init_Data { public int m_state; //0 未激活 1 激活 public Obj_Snare_Init_Data() { CleanUp(); } public override void CleanUp() { base.CleanUp(); m_state = 0; } } public class Obj_Snare : Obj { private int m_nOwerobjID = -1; private ulong m_OwnerGuid = GlobeVar.INVALID_GUID; private int m_State; private int? _effectState; public Obj_Snare() { m_ObjType = GameDefine_Globe.OBJ_TYPE.OBJ_SNARE; } public int OwerobjID { get { return m_nOwerobjID; } set { m_nOwerobjID = value; } } public ulong OwnerGuid { get { return m_OwnerGuid; } set { m_OwnerGuid = value; } } public override bool Init(ObjParent_Init_Data initData1) { var result = base.Init(initData1); if (result == false) return false; var initData = initData1 as Obj_Snare_Init_Data; if (initData == null) return false; //服务器发过来的信息 OwerobjID = initData.m_OwnerObjId; OwnerGuid = initData.m_OwerGuid; //var ownerCharacter = Singleton.GetInstance().FindObjCharacterInScene(OwerobjID); ////修正陷阱的高度和陷阱释放者一样 //if (ownerCharacter != null) //{ // var newPosVector3 = m_ObjTransform.position; // newPosVector3.y = ownerCharacter.ObjTransform.position.y; // m_ObjTransform.position = newPosVector3; //} var snareInfo = TableManager.GetSnareObjInfoByID(RoleBaseID, 0); if (snareInfo == null) return false; var charModel = TableManager.GetCharModelByID(snareInfo.CharModelId, 0); if (null == charModel) return false; CreateModel(snareInfo.CharModelId); ObjManager.Instance.AddPoolObj(this); // RotationType 等于0表示面向摄像机;否则使用ObjParent层的面向。 if (snareInfo.RotationType == 0) { // 面朝摄像机正方向 if (SceneLogic.CameraController != null && SceneLogic.CameraController.MainCamera != null) { var forward = Vector3.Cross(Vector3.up, SceneLogic.CameraController.MainCamera.transform.right); m_ObjTransform.rotation = Quaternion.LookRotation(forward, Vector3.up); } } PlayerEffect(initData.m_state); return true; } public void PlayerEffect(int state) { m_State = state; if (_effectState != state) { _effectState = state; var snareInfo = TableManager.GetSnareObjInfoByID(RoleBaseID, 0); if (snareInfo != null) // && ObjEffectLogic != null) { var effectCount = snareInfo.getAliveEffectIdCount(); if (state == 0) { // 移除激活期特效 StopEffect(snareInfo.ActivateEffectId); // 启动闲置期特效 for (var i = 0; i < effectCount; i++) { var effectId = snareInfo.GetAliveEffectIdbyIndex(i); if (effectId >= 0) PlayEffect(effectId); } var soundCount = snareInfo.getAliveSoundIdCount(); for (var i = 0; i < soundCount; i++) { var soundId = snareInfo.GetAliveSoundIdbyIndex(i); if (soundId >= 0) GameManager.gameManager.SoundManager.PlaySoundEffect(soundId); } } else { // 移除闲置期特效 for (var i = 0; i < effectCount; i++) { var effectId = snareInfo.GetAliveEffectIdbyIndex(i); if (effectId >= 0) StopEffect(effectId); } // 启动激活期特效 PlayEffect(snareInfo.ActivateEffectId); } } } } } }