protected void GeneralStopImpact(ImpactLogicInfo logicInfo) { if (IsLogicDead(logicInfo.Target)) { SetGfxStateFlag(logicInfo.Target, Operate_Type.OT_RemoveBit, GfxCharacterState_Type.Stiffness); SetGfxStateFlag(logicInfo.Target, Operate_Type.OT_RemoveBit, GfxCharacterState_Type.HitFly); SetGfxStateFlag(logicInfo.Target, Operate_Type.OT_RemoveBit, GfxCharacterState_Type.GetUp); } else { ClearGfxStateFlag(logicInfo.Target); } logicInfo.CustomDatas.Clear(); //foreach=>for for (int i = 0; i < logicInfo.EffectsDelWithImpact.Count; ++i) { GameObject Obj = logicInfo.EffectsDelWithImpact[i]; ResourceSystem.RecycleObject(Obj); } //foreach(GameObject obj in logicInfo.EffectsDelWithImpact){ // ResourceSystem.RecycleObject(obj); //} ResetLayer(logicInfo.Target, logicInfo); LogicSystem.NotifyGfxAnimationFinish(logicInfo.Target, false); LogicSystem.NotifyGfxMoveControlFinish(logicInfo.Target, logicInfo.ImpactId, false); LogicSystem.NotifyGfxStopImpact(logicInfo.Sender, logicInfo.ImpactId, logicInfo.Target); }
public override void StopImpact(ImpactLogicInfo logicInfo) { logicInfo.IsActive = false; StopAnimation(logicInfo.Target, Animation_Type.AT_Grab); if (null != logicInfo.Target) { UnityEngine.Vector3 rotation = logicInfo.Target.transform.rotation.eulerAngles; logicInfo.Target.transform.rotation = UnityEngine.Quaternion.Euler(0, rotation.y, 0); } SetGfxStateFlag(logicInfo.Target, Operate_Type.OT_RemoveBit, GfxCharacterState_Type.Grab); LogicSystem.NotifyGfxMoveControlFinish(logicInfo.Target, logicInfo.ImpactId, false); LogicSystem.NotifyGfxAnimationFinish(logicInfo.Target, false); LogicSystem.NotifyGfxStopImpact(logicInfo.Sender, logicInfo.ImpactId, logicInfo.Target); }
public void SendImpactToCharacter(int sender, int target, int impactId, float x, float y, float z, float dir, int forceLogicId) { GameObject senderObj = LogicSystem.GetGameObject(sender); GameObject targetObj = LogicSystem.GetGameObject(target); if (null == senderObj || null == targetObj) { LogSystem.Error("null obj"); } SharedGameObjectInfo targetInfo = LogicSystem.GetSharedGameObjectInfo(targetObj); if (null == targetInfo || targetInfo.IsDead) { return; } GfxImpactSoundManager.Instacne.TryPlaySound(target, impactId); ImpactLogicData config = (ImpactLogicData)SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_IMPACT, impactId); if (null != config) { if (config.MoveMode == (int)ImpactMovementType.Inherit) { GetPreImpactMoveInfo(targetObj, out x, out y, out z, out dir); } bool needSendImpact = true; int logicId = config.ImpactGfxLogicId; if (-1 != forceLogicId) { logicId = forceLogicId; } for (int i = m_ImpactLogicInfos.Count - 1; i >= 0; --i) { ImpactLogicInfo info = m_ImpactLogicInfos[i]; if (null != info) { if (info.IsActive) { if (info.Target.GetInstanceID() == targetObj.GetInstanceID()) { if (info.LogicId == (int)GfxImpactLogicManager.GfxImpactLogicId.GfxImpactLogic_Default || logicId == (int)GfxImpactLogicManager.GfxImpactLogicId.GfxImpactLogic_Default) { if (info.ImpactId != impactId) { continue; } } IGfxImpactLogic logic = GfxImpactLogicManager.Instance.GetGfxImpactLogic(info.LogicId); if (null != logic) { needSendImpact = logic.OnOtherImpact(logicId, info, (info.ImpactId == impactId)); if (needSendImpact) { info.Recycle(); m_ImpactLogicInfos.RemoveAt(i); } } } } } } if (needSendImpact) { SendImpactToCharacterImpl(senderObj, targetObj, impactId, x, y, z, dir, forceLogicId); } else { LogicSystem.NotifyGfxStopImpact(senderObj, impactId, targetObj); } } }