コード例 #1
0
        public int GetReservedBullet(Entity entity, EBulletCaliber caliber)
        {
            var playerEntity = entity as PlayerEntity;

            switch (caliber)
            {
            case EBulletCaliber.E12No:
                return(playerEntity.weaponState.ReservedBullet12);

            case EBulletCaliber.E300Mag:
                return(playerEntity.weaponState.ReservedBullet300);

            case EBulletCaliber.E45apc:
                return(playerEntity.weaponState.ReservedBullet45);

            case EBulletCaliber.E50AE:
                return(playerEntity.weaponState.ReservedBullet50);

            case EBulletCaliber.E556mm:
                return(playerEntity.weaponState.ReservedBullet556);

            case EBulletCaliber.E762mm:
                return(playerEntity.weaponState.ReservedBullet762);

            case EBulletCaliber.E9mm:
                return(playerEntity.weaponState.ReservedBullet9);

            case EBulletCaliber.E57mm:
                return(playerEntity.weaponState.ReservedBullet57);

            default:
                Logger.ErrorFormat("Illegal caliber {0}", caliber);
                return(0);
            }
        }
コード例 #2
0
        public int SetReservedBullet(Entity playerEntity, EBulletCaliber caliber, int count)
        {
            var player = playerEntity as PlayerEntity;

            switch (caliber)
            {
            case EBulletCaliber.E12No:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet12, count));

            case EBulletCaliber.E300Mag:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet300, count));

            case EBulletCaliber.E45apc:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet45, count));

            case EBulletCaliber.E50AE:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet50, count));

            case EBulletCaliber.E556mm:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet556, count));

            case EBulletCaliber.E762mm:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet762, count));

            case EBulletCaliber.E9mm:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet9, count));

            case EBulletCaliber.E57mm:
                return(DoSetReserveBullet(ref player.weaponState.ReservedBullet57, count));

            default:
                Logger.ErrorFormat("Illegal caliber {0}", caliber);
                return(0);
            }
        }
コード例 #3
0
        public int SetReservedBullet(IPlayerWeaponProcessor controller, EBulletCaliber caliber, int count)
        {
            var relatedAmmunition = (controller as PlayerWeaponController).RelatedAmmunition;

            switch (caliber)
            {
            case EBulletCaliber.E12No:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet12, count));

            case EBulletCaliber.E300Mag:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet300, count));

            case EBulletCaliber.E45apc:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet45, count));

            case EBulletCaliber.E50AE:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet50, count));

            case EBulletCaliber.E556mm:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet556, count));

            case EBulletCaliber.E762mm:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet762, count));

            case EBulletCaliber.E9mm:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet9, count));

            case EBulletCaliber.E57mm:
                return(DoSetReserveBullet(ref relatedAmmunition.ReservedBullet57, count));

            default:
                //Logger.ErrorFormat("Illegal caliber {0}", caliber);
                return(0);
            }
        }
コード例 #4
0
        public int GetReservedBullet(IPlayerWeaponProcessor controller, EBulletCaliber caliber)
        {
            var relatedAmmunition = (controller as PlayerWeaponController).RelatedAmmunition;

            switch (caliber)
            {
            case EBulletCaliber.E12No:
                return(relatedAmmunition.ReservedBullet12);

            case EBulletCaliber.E300Mag:
                return(relatedAmmunition.ReservedBullet300);

            case EBulletCaliber.E45apc:
                return(relatedAmmunition.ReservedBullet45);

            case EBulletCaliber.E50AE:
                return(relatedAmmunition.ReservedBullet50);

            case EBulletCaliber.E556mm:
                return(relatedAmmunition.ReservedBullet556);

            case EBulletCaliber.E762mm:
                return(relatedAmmunition.ReservedBullet762);

            case EBulletCaliber.E9mm:
                return(relatedAmmunition.ReservedBullet9);

            case EBulletCaliber.E57mm:
                return(relatedAmmunition.ReservedBullet57);

            default:
                Logger.ErrorFormat("Illegal caliber {0}", caliber);
                return(0);
            }
        }
コード例 #5
0
        public BulletDropConfigItem GetConfigByCaliber(EBulletCaliber caliber)
        {
            if (_itemDic.ContainsKey((caliber)))
            {
                return(_itemDic[caliber]);
            }

            return(null);
        }
コード例 #6
0
        public AssetInfo GetDropEffectAsset(EBulletCaliber caliber)
        {
            var item = GetConfigByCaliber(caliber);

            if (null != item)
            {
                return(item.DropAsset);
            }
            Logger.ErrorFormat("Config of caliber {0} does not exist ", caliber);
            return(null);
        }
コード例 #7
0
        public AssetInfo GetDropModelAsset(EBulletCaliber caliber)
        {
            var item = GetConfigByCaliber(caliber);

            if (null != item)
            {
                return(item.ModelAsset);
            }

            return(null);
        }
コード例 #8
0
        public Entity CreateBulletEntity(
            int cmdSeq,
            int weaponId,
            EntityKey entityKey,
            int serverTime, Vector3 dir,
            IBulletFireInfoProviderDispatcher bulletFireInfoProviderDispatcher,
            BulletConfig bulletConfig,
            EBulletCaliber caliber)
        {
            int bulletEntityId = _entityIdGenerator.GetNextEntityId();

            //var emitPost = PlayerEntityUtility.GetCameraBulletEmitPosition(playerEntity);
            Vector3 velocity     = dir * bulletConfig.EmitVelocity;
            var     bulletEntity = _bulletContext.CreateEntity();
            float   maxDistance  = bulletConfig.MaxDistance;

            bulletEntity.AddEntityKey(new EntityKey(bulletEntityId, (int)EEntityType.Bullet));

            bulletEntity.AddBulletData(
                velocity,
                0,
                bulletConfig.Gravity,
                0,
                serverTime,
                maxDistance,
                bulletConfig.PenetrableLayerCount,
                bulletConfig.BaseDamage,
                bulletConfig.PenetrableThickness,
                bulletConfig,
                bulletConfig.VelocityDecay,
                caliber,
                weaponId);
            var viewPosition = bulletFireInfoProviderDispatcher.GetFireViewPosition();
            var emitPosition = bulletFireInfoProviderDispatcher.GetFireEmitPosition();

            bulletEntity.AddPosition(viewPosition);
            bulletEntity.AddOwnerId(entityKey);
            bulletEntity.bulletData.CmdSeq     = cmdSeq;
            bulletEntity.bulletData.StartPoint = viewPosition;
            bulletEntity.bulletData.EmitPoint  = emitPosition;
            bulletEntity.bulletData.StartDir   = dir;
            bulletEntity.isNew = true;
            bulletEntity.AddEmitPosition(emitPosition);
            bulletEntity.isFlagSyncNonSelf = true;
            bulletEntity.AddLifeTime(DateTime.Now, SharedConfig.BulletLifeTime); // in case user logout
            return(bulletEntity);
        }
コード例 #9
0
 public int SetReservedBullet(Entity playerEntity, EBulletCaliber caliber, int count)
 {
     return(count);
 }
コード例 #10
0
ファイル: BagLogic.cs プロジェクト: zuojiashun/CsharpCode
 public int GetReservedBullet(EBulletCaliber caliber)
 {
     return(_playerEntity.modeLogic.ModeLogic.GetReservedBullet(_playerEntity, caliber));
 }
コード例 #11
0
ファイル: BagLogic.cs プロジェクト: zuojiashun/CsharpCode
 public int SetReservedBullet(EBulletCaliber caliber, int count)
 {
     return(_playerEntity.modeLogic.ModeLogic.SetReservedBullet(_playerEntity, caliber, count));
 }
コード例 #12
0
 public int GetReservedBullet(IPlayerWeaponProcessor controller, EBulletCaliber caliber)
 {
     return(ReservedBulletHandler.GetReservedBullet(controller, caliber));
 }
コード例 #13
0
 public int SetReservedBullet(IPlayerWeaponProcessor controller, EBulletCaliber caliber, int count)
 {
     return(ReservedBulletHandler.SetReservedBullet(controller, caliber, count));
 }
コード例 #14
0
        private void OnHitEnvironment(PlayerEntity srcPlayer, IBulletEntity bulletEntity, RaycastHit hit)
        {
            if (srcPlayer.gamePlay.IsDead())
            {
                _logger.InfoFormat("[hit] environment dead");
                return;
            }

            ThicknessInfo   thicknessInfo;
            EnvironmentInfo info = BulletEnvironmentUtility.GetEnvironmentInfoByHitBoxName(hit, bulletEntity.Velocity, out thicknessInfo);
            float           damageDecayFactor = _environmentTypeConfigManager.GetDamageDecayFactorByEnvironmentType(info.Type);
            float           energyDecayFactor = _environmentTypeConfigManager.GetEnergyDecayFactorByEnvironmentType(info.Type);
            float           oldThickNess      = bulletEntity.PenetrableThickness;
            float           oldDamage         = bulletEntity.BaseDamage;

            bulletEntity.BaseDamage           *= damageDecayFactor;
            bulletEntity.PenetrableThickness   = bulletEntity.PenetrableThickness * energyDecayFactor - info.Thickness;
            bulletEntity.PenetrableLayerCount -= info.LayerCount;

            if (bulletEntity.PenetrableLayerCount <= 0 || bulletEntity.PenetrableThickness <= 0)
            {
                bulletEntity.IsValid = false;
            }
            else
            {
                bulletEntity.AddPenetrateInfo(info.Type);
            }

            EBulletCaliber caliber = bulletEntity.Caliber; //根据口径

            var collider          = hit.collider;
            var fracturedHittable = collider.GetComponent <FracturedHittable>();

            if (fracturedHittable != null)
            {
                EntityKey?hittedObjectKey = null;

                var script = fracturedHittable.gameObject.GetComponent <FracturedHittable>();
                if (script == null)
                {
                    return;
                }

                var objtype = MapObjectUtility.GetGameObjType(script.Owner);
                if (objtype < 0)
                {
                    return;
                }

                var rawObjKey = MapObjectUtility.GetGameObjId(script.Owner);

                if (rawObjKey != Int32.MinValue && !SharedConfig.IsServer &&
                    MapObjectUtility.GetMapObjectByGameObject(script.Owner) == null)
                {
                    MapObjectUtility.SendCreateMapObjMsg(objtype, rawObjKey);
                    _logger.InfoFormat("CreateMapObjEvent: type:{0}, obj:{1}, num:{2}", (ETriggerObjectType)objtype,
                                       fracturedHittable.gameObject,
                                       srcPlayer.uploadEvents.Events.Events[EEventType.CreateMapObj].Count);
                }

                FracturedAbstractChunk fracturedChunk = null;

                fracturedChunk = fracturedHittable.Hit(hit.point, hit.normal);
                if (fracturedHittable.HasBulletHole && fracturedChunk != null)
                {
                    ClientEffectFactory.CreateHitFracturedChunkEffect(_contexts.clientEffect, _entityIdGenerator, hit.point,
                                                                      srcPlayer.entityKey.Value, hittedObjectKey.Value, fracturedChunk.ChunkId,
                                                                      hit.point - fracturedChunk.transform.position, hit.normal);
                }

                srcPlayer.statisticsData.Statistics.ShootingSuccCount++;

                if (fracturedHittable.HasBulletHole && fracturedChunk != null && bulletEntity.IsValid && thicknessInfo.Thickness > 0)
                {
                    ClientEffectFactory.CreateHitFracturedChunkEffect(_contexts.clientEffect, _entityIdGenerator, thicknessInfo.OutPoint, srcPlayer.entityKey.Value,
                                                                      hittedObjectKey.Value, fracturedChunk.ChunkId, thicknessInfo.OutPoint - fracturedChunk.transform.position, thicknessInfo.Normal);
                }
            }
            else
            {
                ClientEffectFactory.AdHitEnvironmentEffectEvent(srcPlayer, hit.point, hit.normal, info.Type);

                if (bulletEntity.IsValid && thicknessInfo.Thickness > 0)
                {
                    ClientEffectFactory.AdHitEnvironmentEffectEvent(srcPlayer, thicknessInfo.OutPoint, thicknessInfo.Normal, info.Type);
                }
            }

            _logger.InfoFormat("[hit]bullet from {0} hit environment {1}, collier {2}, base damage {3}->{4}, penetrable thick {5}->{6}, env ({7}), remain layer {8}",
                               bulletEntity.OwnerEntityKey, hit.point, hit.collider.name, oldDamage, bulletEntity.BaseDamage, oldThickNess, bulletEntity.PenetrableThickness,
                               info, bulletEntity.PenetrableLayerCount);
        }
コード例 #15
0
 public int GetReservedBullet(EBulletCaliber caliber)
 {
     return(ModeController.GetReservedBullet(this, caliber));
 }
コード例 #16
0
 public int Model_SetReservedBullet(EBulletCaliber caliber, int count)
 {
     return(entity.modeLogic.ModeLogic.SetReservedBullet(entity, caliber, count));
 }
コード例 #17
0
 public int Model_GetReserveBullet(EBulletCaliber caliber)
 {
     return(entity.modeLogic.ModeLogic.GetReservedBullet(entity, caliber));
 }
コード例 #18
0
 public int SetReservedBullet(Entity playerEntity, EBulletCaliber caliber, int count)
 {
     return(_reservedBulletLogic.SetReservedBullet(playerEntity, caliber, count));
 }
コード例 #19
0
 public int GetReservedBullet(Entity playerEntity, EBulletCaliber caliber)
 {
     return(0);
 }
コード例 #20
0
 public int GetReservedBullet(EBulletCaliber caliber)
 {
     return(controller.GetReservedBullet(caliber));
 }
コード例 #21
0
 public int GetReservedBullet(Entity playerEntity, EBulletCaliber caliber)
 {
     return(_reservedBulletLogic.GetReservedBullet(playerEntity, caliber));
 }
コード例 #22
0
 public int SetReservedBullet(EBulletCaliber caliber, int count)
 {
     return(ModeController.SetReservedBullet(this, caliber, count));
 }
コード例 #23
0
        private void OnHitEnvironment(PlayerEntity srcPlayer, IBulletEntity bulletEntity, RaycastHit hit)
        {
            ThicknessInfo   thicknessInfo;
            EnvironmentInfo info = BulletEnvironmentUtility.GetEnvironmentInfoByHitBoxName(hit, bulletEntity.Velocity, out thicknessInfo);
            float           damageDecayFactor = _environmentTypeConfigManager.GetDamageDecayFactorByEnvironmentType(info.Type);
            float           energyDecayFactor = _environmentTypeConfigManager.GetEnergyDecayFactorByEnvironmentType(info.Type);
            float           oldThickNess      = bulletEntity.PenetrableThickness;
            float           oldDamage         = bulletEntity.BaseDamage;

            bulletEntity.BaseDamage           *= damageDecayFactor;
            bulletEntity.PenetrableThickness   = bulletEntity.PenetrableThickness * energyDecayFactor - info.Thickness;
            bulletEntity.PenetrableLayerCount -= info.LayerCount;

            if (bulletEntity.PenetrableLayerCount <= 0 || bulletEntity.PenetrableThickness <= 0)
            {
                bulletEntity.IsValid = false;
            }
            else
            {
                bulletEntity.AddPenetrateInfo(info.Type);
            }

            EBulletCaliber caliber = bulletEntity.Caliber; //根据口径

            var collider          = hit.collider;
            var fracturedHittable = collider.GetComponent <FracturedHittable>();

            if (fracturedHittable != null)
            {
                EntityKey?hittedObjectKey = null;

                var sceneObjectEntity = MapObjectUtility.GetMapObjectOfFracturedHittable(fracturedHittable);
                if (sceneObjectEntity != null)
                {
                    hittedObjectKey = sceneObjectEntity.entityKey.Value;
                }
                else
                {
                    var mapObjectEntity = MapObjectUtility.GetMapObjectOfFracturedHittable(fracturedHittable);
                    if (mapObjectEntity != null)
                    {
                        hittedObjectKey = mapObjectEntity.entityKey.Value;
                    }
                }

                FracturedAbstractChunk fracturedChunk = null;

                if (null != hittedObjectKey)
                {
                    fracturedChunk = fracturedHittable.Hit(hit.point, hit.normal);
                    if (fracturedHittable.HasBulletHole && fracturedChunk != null)
                    {
                        ClientEffectFactory.CreateHitFracturedChunkEffect(
                            _contexts.clientEffect,
                            _entityIdGenerator,
                            hit.point,
                            srcPlayer.entityKey.Value,
                            hittedObjectKey.Value,
                            fracturedChunk.ChunkId,
                            hit.point - fracturedChunk.transform.position,
                            hit.normal);
                    }

                    srcPlayer.statisticsData.Statistics.ShootingSuccCount++;
                }
                else
                {
                    _logger.ErrorFormat("no entity reference attached to {0}", fracturedHittable.name);
                }
                if (fracturedHittable.HasBulletHole && fracturedChunk != null &&
                    bulletEntity.IsValid && thicknessInfo.Thickness > 0)
                {
                    ClientEffectFactory.CreateHitFracturedChunkEffect(_contexts.clientEffect,
                                                                      _entityIdGenerator,
                                                                      thicknessInfo.OutPoint,
                                                                      srcPlayer.entityKey.Value,
                                                                      hittedObjectKey.Value,
                                                                      fracturedChunk.ChunkId,
                                                                      thicknessInfo.OutPoint - fracturedChunk.transform.position,
                                                                      thicknessInfo.Normal);
                }
            }
            else
            {
                ClientEffectFactory.AdHitEnvironmentEffectEvent(srcPlayer, hit.point,
                                                                hit.normal, info.Type);

                if (bulletEntity.IsValid && thicknessInfo.Thickness > 0)
                {
                    ClientEffectFactory.AdHitEnvironmentEffectEvent(srcPlayer, thicknessInfo.OutPoint, thicknessInfo.Normal, info.Type);
                }
            }


            _logger.DebugFormat(
                "bullet from {0} hit environment {1}, collier {2}, base damage {3}->{4}, penetrable thick {5}->{6}, env ({7}), remain layer {8}",
                bulletEntity.OwnerEntityKey,
                hit.point, hit.collider.name,
                oldDamage, bulletEntity.BaseDamage,
                oldThickNess, bulletEntity.PenetrableThickness,
                info,
                bulletEntity.PenetrableLayerCount);

            DamageInfoDebuger.OnEnvironmentHit(_contexts.player, _damager, _damageInfoCollector);
        }