private void CreateBulletEffect(WeaponAttackProxy attackProxy, ICharacterBone bones)
        {
            if (DefaultCfg.BulletFly < 1 || attackProxy.IsAiming)
            {
                return;
            }
            var muzzleTrans = bones.GetLocation(SpecialLocation.MuzzleEffectPosition,
                                                attackProxy.Appearence.IsFirstPerson ? CharacterView.FirstPerson : CharacterView.ThirdPerson);

            if (!muzzleTrans)
            {
                return;
            }
            var efcCommonCfg = SingletonManager.Get <ClientEffectCommonConfigManager>()
                               .GetConfigByType(EEffectObjectClassify.BulletFly);

            foreach (var bulletData in attackProxy.Owner.BulletList)
            {
                var origin   = bulletData.ViewPosition;
                var velocity = efcCommonCfg.Velocity * bulletData.Dir;

                Vector3 target = origin + velocity * 1.0f;
                Vector3 bulletEffectVelocity = (target - bulletData.EmitPosition) / 1.0f;
                ClientEffectFactory.CreateBulletFlyEffect(attackProxy.Owner.Owner, muzzleTrans.position,
                                                          muzzleTrans.rotation, bulletEffectVelocity, DefaultCfg.BulletFly, efcCommonCfg.Delay);
            }
        }
예제 #2
0
        public void PreUpdate(FollowRotParam param, ICharacterBone characterBone)
        {
            //人物正向和载具正向相差180度
            var curAngle    = param.CameraFreeYaw;
            var needReverse = FollowRotHelper.NeedReverse();

            if (needReverse)
            {
                curAngle = curAngle + (curAngle > 0 ? -180 : 180);
            }

            if (curAngle * characterBone.LastHeadRotAngle < _horizontalHeadRotMax * _horizontalHeadRotMin
                ) //头部水平旋转角穿过+-180度(暂定最大旋转角度为+-60)
            {
                characterBone.LastHeadRotSlerpTime = param.ClientTime;
                characterBone.IsHeadRotCW          = curAngle > 0;
//                    needReverse
//                    ? curAngle < 0
//                    : curAngle > 0;
            }

            if (FollowRotHelper.ForbidRot())
            {
                characterBone.ForbidRot = true;
            }
            else if (param.CameraFreeNowMode != (byte)ECameraFreeMode.On &&
                     param.CameraEulerAngle == Vector3.zero)
            {
                characterBone.ForbidRot = false;
            }

            if (characterBone.ForbidRot)
            {
                characterBone.LastHeadRotAngle = 0;
            }
            else
            {
                characterBone.LastHeadRotAngle = curAngle;
            }
        }
예제 #3
0
        public void PreUpdate(FollowRotParam param, ICharacterBone characterBone, float deltaTime)
        {
            //人物正向和载具正向相差180度
            var curAngle    = param.CameraFreeYaw;
            var needReverse = FollowRotHelper.NeedReverse();

            if (needReverse)
            {
                curAngle = curAngle + (curAngle > 0 ? -180 : 180);
            }

            if (curAngle > NoHeadRotStart)
            {
                curAngle = 0;
            }
            if (curAngle < -NoHeadRotStart)
            {
                curAngle = 0;
            }

            if (FollowRotHelper.ForbidRot())
            {
                characterBone.ForbidRot = true;
            }
            else
            {
                characterBone.ForbidRot = false;
            }

            var aimAngle = characterBone.ForbidRot ? 0 : curAngle;

            characterBone.LastHeadRotAngle =
                CalcuStepRotAngle(aimAngle,
                                  characterBone.LastHeadRotAngle, deltaTime);

            CalcCurrentHandPitch(FollowRotHelper.PitchHandAngle(), deltaTime);
        }
        protected virtual void CreateFireRelatedEffect(WeaponAttackProxy attackProxy, ICharacterBone bones)

        {
            if (DefaultCfg.Spark < 1)
            {
                return;
            }
            var muzzleTrans = bones.GetLocation(SpecialLocation.MuzzleEffectPosition,
                                                attackProxy.Appearence.IsFirstPerson ? CharacterView.FirstPerson : CharacterView.ThirdPerson);
            var ejectTrans = bones.GetLocation(SpecialLocation.EjectionLocation,
                                               attackProxy.Appearence.IsFirstPerson ? CharacterView.FirstPerson : CharacterView.ThirdPerson);

            bool hasMuzzleEfc  = muzzleTrans && DefaultCfg.Spark > 0 && attackProxy.Owner.HeldWeaponAgent.HasSpark;
            bool hasBulletDrop = ejectTrans && DefaultCfg.BulletDrop > 0;

            if (hasMuzzleEfc)
            {
                ClientEffectFactory.CreateMuzzleSparkEffct(muzzleTrans.position, attackProxy.Orientation.Yaw,
                                                           attackProxy.Orientation.Pitch, DefaultCfg.Spark, muzzleTrans);
            }
            if (hasBulletDrop)
            {
                ClientEffectFactory.CreateBulletDrop(ejectTrans.position, attackProxy.Orientation.Yaw,
                                                     attackProxy.Orientation.Pitch, DefaultCfg.BulletDrop, attackProxy.WeaponConfigAssy.S_Id,
                                                     attackProxy.AudioController.GetFootMatType());
            }
        }
예제 #5
0
 public void PreUpdate(FollowRotParam param, ICharacterBone characterBone, float deltaTime)
 {
     _followRot.PreUpdate(param, characterBone, deltaTime);
 }
예제 #6
0
 public void PreUpdate(FollowRotParam param, ICharacterBone characterBone)
 {
     _followRot.PreUpdate(param, characterBone);
 }
예제 #7
0
        protected override void CreateFireRelatedEffect(WeaponAttackProxy attackProxy, ICharacterBone bones)
        {
            if (DefaultCfg.Spark < 1)
            {
                return;
            }
            var muzzleTrans = bones.GetLocation(SpecialLocation.MuzzleEffectPosition,
                                                attackProxy.Appearence.IsFirstPerson ? CharacterView.FirstPerson : CharacterView.ThirdPerson);
            var ejectTrans = bones.GetLocation(SpecialLocation.EjectionLocation,
                                               attackProxy.Appearence.IsFirstPerson ? CharacterView.FirstPerson : CharacterView.ThirdPerson);
            bool hasMuzzleEfc  = null != muzzleTrans && DefaultCfg.Spark > 0 && attackProxy.Owner.HeldWeaponAgent.HasSpark;
            bool hasBulletDrop = null != ejectTrans && DefaultCfg.BulletDrop > 0;

            if (!hasMuzzleEfc && !hasBulletDrop)
            {
                return;
            }
            FireEvent.FireEffectType fireEffectType = FireEvent.FireEffectType.Both;
            if (!hasMuzzleEfc)
            {
                fireEffectType = FireEvent.FireEffectType.EnjectOnly;
            }
            if (!hasBulletDrop)
            {
                fireEffectType = FireEvent.FireEffectType.MuzzleOnly;
            }

            FireEvent e = (FireEvent)EventInfos.Instance.Allocate(EEventType.Fire, false);

            e.owner          = attackProxy.Owner.Owner;
            e.fireEffectType = fireEffectType;
            e.pitch          = attackProxy.Orientation.Pitch;
            e.yaw            = attackProxy.Orientation.Yaw;
            e.weaponId       = attackProxy.WeaponConfigAssy.S_Id;
            attackProxy.Owner.RelatedLocalEvents.AddEvent(e);
        }