protected void DoTrigger(int nLogicCount, int nTargetCount, int[] paTargetIDs) { SetLogicCount(nLogicCount); if (GetSpecialObjData() != null && GetSpecialObjData().m_lpszEffect_Active != null && GetSpecialObjData().m_lpszEffect_Active.Length > 0) { CObject_Effect pEffectObj = (CObject_Effect)(CObjectManager.Instance.NewEffect(-1)); if (pEffectObj != null) { SObject_EffectInit initEffect = new SObject_EffectInit(); initEffect.m_fvPos = GetPosition(); initEffect.m_fvRot = new UnityEngine.Vector3(0.0f, 0.0f, 0.0f); initEffect.m_pszEffectName = GetSpecialObjData().m_lpszEffect_Active; initEffect.m_bLoopEffect = false; pEffectObj.Initial(initEffect); } } // 有子弹 if (GetSpecialObjData() != null && GetSpecialObjData().m_nBulletID != MacroDefine.INVALID_ID) { SObject_BulletInit initBullet = new SObject_BulletInit(); initBullet.m_fvPos = GetPosition(); UnityEngine.Vector3 fvRot = UnityEngine.Vector3.zero; fvRot.y = GetFaceDir(); initBullet.m_fvRot = fvRot; initBullet.m_idSend = (uint)ServerID; initBullet.m_nSendLogicCount = GetLogicCount(); initBullet.m_nBulletID = m_pSpecialObjData.m_nBulletID; initBullet.m_bSingleTarget = true; initBullet.m_fvTargetPos = new UnityEngine.Vector3(-1.0f, -1.0f, -1.0f); for (int i = 0; i < nTargetCount; i++) { initBullet.m_idTarget = paTargetIDs[i]; CObject_Bullet pBullet = (CObject_Bullet)CObjectManager.Instance.NewBullet(-1); pBullet.Initial(initBullet); } } else { CObject_Character pCharacter = null; for (int i = 0; i < nTargetCount; i++) { int idCharacter = paTargetIDs[i]; pCharacter = (CObject_Character)(CObjectManager.Instance.FindServerObject(idCharacter)); if (pCharacter != null) { pCharacter.ShowLogicEvent(ServerID, nLogicCount, true); } } } }
//// 没用到 public void RemoveLogicEvent(int nLogicCount) ////{ //// _LOGIC_EVENT pLogicEvent; //// for (int i = 0; i < m_listLogicEvent.Count; i++) //// { //// pLogicEvent = m_listLogicEvent[i]; //// if (pLogicEvent.m_nSenderLogicCount == nLogicCount) //// { //// m_listLogicEvent.RemoveAt(i); //// break; //// } //// } ////} private void DoLogicEvent_Bullet(_LOGIC_EVENT pLogicEvent) { if (pLogicEvent != null) { _LOGIC_EVENT_BULLET pBulletInfo = pLogicEvent.m_bullet; CObject pSender = CObjectManager.Instance.FindServerObject((int)pLogicEvent.m_nSenderID); if (pSender != null) { UnityEngine.Vector3 fvSenderPos = new UnityEngine.Vector3(); UnityEngine.Vector3 fvSenderRot = UnityEngine.Vector3.zero; CObject_Character pCharacterSender = (CObject_Character)pSender; fvSenderPos = pSender.GetPosition(); fvSenderPos.y += 1.0f; //temp code fvSenderRot.y = pSender.GetFaceDir(); if (pCharacterSender != null) { if (pBulletInfo.m_pszSenderLocator.Length > 0 && pCharacterSender.GetRenderInterface() != null) { pCharacterSender.GetRenderInterface().GetLocator(pBulletInfo.m_pszSenderLocator, ref fvSenderPos); } } SObject_BulletInit initBullet = new SObject_BulletInit(); initBullet.m_fvPos = fvSenderPos; initBullet.m_fvRot = fvSenderRot; initBullet.m_idSend = pLogicEvent.m_nSenderID; initBullet.m_nSendLogicCount = pLogicEvent.m_nSenderLogicCount; initBullet.m_nBulletID = pBulletInfo.m_nBulletID; initBullet.m_bSingleTarget = pBulletInfo.m_bHitTargetObj; if (pBulletInfo.m_bHitTargetObj) { initBullet.m_fvTargetPos = new Vector3(-1.0f, -1.0f, -1.0f); initBullet.m_idTarget = (int)pBulletInfo.m_nTargetID; } else { initBullet.m_fvTargetPos.x = pBulletInfo.m_fTargetX; initBullet.m_fvTargetPos.z = pBulletInfo.m_fTargetZ; initBullet.m_fvTargetPos.y = GFX.GfxUtility.getSceneHeight(pBulletInfo.m_fTargetX, pBulletInfo.m_fTargetZ); } CObject_Bullet pBullet = CObjectManager.Instance.NewBullet(-1); pBullet.Initial(initBullet); } } }
public override void Initial(object pInit) { base.Initial(pInit); SObject_BulletInit pBulletInit = (SObject_BulletInit)(pInit); if (pBulletInit != null) { m_idSend = pBulletInit.m_idSend; if (pBulletInit.m_nBulletID != -1) { m_pBulletData = CDataBaseSystem.Instance.GetDataBase <_DBC_BULLET_DATA>((int)DataBaseStruct.DBC_BULLET_DATA).Search_Index_EQU((int)pBulletInit.m_nBulletID); } else { m_pBulletData = null; } m_nSendLogicCount = pBulletInit.m_nSendLogicCount; m_bSingleTarget = pBulletInit.m_bSingleTarget; m_idTarget = pBulletInit.m_idTarget; m_fvTargetPos = pBulletInit.m_fvTargetPos; } else { m_idSend = MacroDefine.UINT_MAX; m_pBulletData = null; m_nSendLogicCount = -1; m_bSingleTarget = false; m_idTarget = MacroDefine.INVALID_ID; m_fvTargetPos = new Vector3(-1.0f, -1.0f, -1.0f); } if (m_pBulletData != null) { switch ((ENUM_BULLET_CONTRAIL_TYPE)m_pBulletData.m_nContrailType) { case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_BEELINE: case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_PARABOLA: { m_fvStartPos = GetPosition(); if (m_pBulletData.m_szFlyEffect.Length != 0) { ChangEffect(m_pBulletData.m_szFlyEffect, false); } } break; case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_NONE: default: { //[无轨迹子弹击中效果需要由m_idTarget计算得来 2012/4/18 ZZY] //m_fvStartPos = m_fvTargetPos; if (m_idTarget != MacroDefine.INVALID_ID) { CObject_Character character = (CObject_Character)CObjectManager.Instance.FindServerObject(m_idTarget); if (character != null && character.GetRenderInterface() != null) { character.GetRenderInterface().GetLocator(m_pBulletData.m_szHitEffectLocator, ref m_fvStartPos); } } else { m_fvStartPos = m_fvTargetPos; } SetPosition(m_fvStartPos); } break; } } else { m_fvStartPos = GetPosition(); } m_fStartToEndDist = (m_fvTargetPos - m_fvStartPos).magnitude; m_bAlreadyHit = false; }