public static void CreateMuzzleSparkEffct(Vector3 postion, float pitch, float yaw, int effectId,
                                                  Transform muzzleTrans)
        {
            ClientEffectEmitter clientEffectObj =
                LocalObjectGenerator.EffectLocal.GetClientEffectEmitter(EEffectObjectClassify.Muzzle);
            var immobileEffectBehavior = ObjectAllocatorHolder <YawEffectBehavior> .Allocate();

            immobileEffectBehavior.Initialize(pitch, yaw, postion, muzzleTrans);
            clientEffectObj.Initialize(effectId, immobileEffectBehavior);
        }
        public static void CreateBulletDrop(Vector3 position, float yaw, float pitch, int effectId,
                                            int weaponId, AudioGrp_FootMatType dropMatType)
        {
            ClientEffectEmitter clientEffectObj =
                LocalObjectGenerator.EffectLocal.GetClientEffectEmitter(EEffectObjectClassify.BulletDrop);
            var yawImmobileEffectBehavior = ObjectAllocatorHolder <YawEffectBehavior> .Allocate();

            yawImmobileEffectBehavior.Initialize(pitch, yaw, position, SingletonManager.Get <AudioWeaponManager>().FindById(weaponId).BulletDrop, (int)dropMatType, AudioClientEffectType.BulletDrop);
            clientEffectObj.Initialize(effectId, yawImmobileEffectBehavior);
        }
        public static void CreateBulletFlyEffect(EntityKey owner, Vector3 startPos, Quaternion startRocation,
                                                 Vector3 velocity, int effectId, float delay)
        {
            ClientEffectEmitter clientEffectObj =
                LocalObjectGenerator.EffectLocal.GetClientEffectEmitter(EEffectObjectClassify.BulletFly);
            var moveEffectBehavior = ObjectAllocatorHolder <MoveEffectBehavior> .Allocate();

            moveEffectBehavior.Initialize(startPos, startRocation, velocity, delay);
            clientEffectObj.Initialize(effectId, moveEffectBehavior);
            //DebugUtil.MyLog("emit fire effect:{0},{1}", startPos, effectId);
        }
        public static void CreateHitPlayerEffect(Contexts context, EntityKey owner, HitPlayerEvent hitPlayerEvent)
        {
            if (SharedConfig.IsHXMod)
            {
                return;
            }
            var player = context.player.GetEntityWithEntityKey(owner);

            if (null == player || !player.hasBones)
            {
                return;
            }
            var effectId = SingletonManager.Get <ClientEffectCommonConfigManager>()
                           .GetConfigByType(EEffectObjectClassify.PlayerHit).PreLoadCfgId;
            ClientEffectEmitter clientEffectObj =
                LocalObjectGenerator.EffectLocal.GetClientEffectEmitter(EEffectObjectClassify.PlayerHit);
            var hitPlayerEffectBehavior = ObjectAllocatorHolder <HitPlayerEffectBehavior> .Allocate();

            hitPlayerEffectBehavior.Initialize(hitPlayerEvent.HitPoint.ShiftedVector3(), new AudioEffectData(hitPlayerEvent.HitBodyPart, hitPlayerEvent.HitAudioId, AudioClientEffectType.WeaponPlayerHit), player.bones.Spine);
            clientEffectObj.Initialize(effectId, hitPlayerEffectBehavior);
        }
        public static void CreateHitEnvironmentEffect(Vector3 hitPoint, Vector3 normal,
                                                      EEnvironmentType environmentType, int hitAudioId,
                                                      bool needEffectEntity, int chunkId, Transform parent = null)
        {
            EffectTypeInfo effectTypeInfo = environmentType.ToClientEfcInfo();

            if (needEffectEntity)
            {
                ClientEffectEmitter clientEffectObj =
                    LocalObjectGenerator.EffectLocal.GetClientEffectEmitter(EEffectObjectClassify.EnvHit);
                IEffectBehavior effectBehavior;
                if (chunkId > 0)
                {
                    var chunkBehavior = ObjectAllocatorHolder <ChunkEffectBehavior> .Allocate();

                    //ChunkEffectBehavior  b1 =ObjectAllocatorHolder<ChunkEffectBehavior>.Allocate();
                    chunkBehavior.Initialize(normal, hitPoint, (int)effectTypeInfo.AudioType, hitAudioId,
                                             AudioClientEffectType.WeaponEnvHit, chunkId, parent);
                    effectBehavior = chunkBehavior;
                }
                else
                {
                    var noramlEffect = ObjectAllocatorHolder <NormalEffectBehavior> .Allocate();

                    //NormalEffectBehavior b2 = ObjectAllocatorHolder<>.Allocate();
                    noramlEffect.Initialize(normal, hitPoint, (int)effectTypeInfo.AudioType, hitAudioId,
                                            AudioClientEffectType.WeaponEnvHit);
                    effectBehavior = noramlEffect;
                }
                clientEffectObj.Initialize((int)effectTypeInfo.DefaultId, effectBehavior);
            }
            else //应对于空手情况
            {
                GameAudioMedia.PlayHitEnvironmentAudio(effectTypeInfo.AudioType, hitAudioId, hitPoint);
            }
        }