Esempio n. 1
0
        public override void DoAction(IEventArgs args)
        {
            if (index < list.Count)
            {
                for (int i = 0; i < 20; i++)
                {
                    ItemDrop drop = list[index++];
                    if (drop.cat == (int)ECategory.Vehicle)
                    {
                        VehicleEntityUtility.CreateNewVehicle(args.GameContext.vehicle, drop.id, args.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), GetGround(drop.pos));
                        break;
                    }
                    else
                    {
                        args.GameContext.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)drop.cat, drop.id, drop.count, GetGround(drop.pos));
                    }

                    List <ItemDrop> extra = SingletonManager.Get <FreeItemDrop>().GetExtraItems(drop);
                    foreach (ItemDrop e in extra)
                    {
                        args.GameContext.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)e.cat, e.id, e.count, GetGround(drop.pos));
                    }
                    if (index >= list.Count)
                    {
                        break;
                    }
                }
            }
        }
Esempio n. 2
0
        public void OnHitVehicle(PlayerEntity srcPlayer, VehicleEntity targetVehicle, IBulletEntity bulletEntity, RaycastHit hit)
        {
            if (srcPlayer.gamePlay.IsDead())
            {
                return;
            }

            Collider         collider = hit.collider;
            VehiclePartIndex partIndex;
            var hitBoxFactor = VehicleEntityUtility.GetHitFactor(targetVehicle, collider, out partIndex);

            var totalDamage = GetBulletDamage(bulletEntity, hitBoxFactor, Vector3.Distance(hit.point, bulletEntity.GunEmitPosition));
            var gameData    = targetVehicle.GetGameData();

            gameData.DecreaseHp(partIndex, totalDamage, srcPlayer.entityKey.Value);
            srcPlayer.statisticsData.Statistics.TotalDamage += totalDamage;

            bulletEntity.IsValid = false;

            srcPlayer.statisticsData.Statistics.ShootingSuccCount++;
            _logger.DebugFormat("bullet from {0} hit vehicle {1}, part {2}",
                                bulletEntity.OwnerEntityKey, targetVehicle.entityKey.Value, collider.name);

            ClientEffectFactory.AddHitVehicleEffectEvent(srcPlayer, targetVehicle.entityKey.Value, hit.point,
                                                         hit.point - targetVehicle.position.Value, hit.normal);
        }
Esempio n. 3
0
        private float GetVehicleFactor(RaycastHit hit, VehicleEntity target, out VehiclePartIndex partIndex)
        {
            Collider collider     = hit.collider;
            var      hitBoxFactor = VehicleEntityUtility.GetHitFactor(target, collider, out partIndex);

            return(hitBoxFactor);
        }
Esempio n. 4
0
        public void CreateVehicles(IEntityIdGenerator idGenerator)
        {
            var vehicles = VehicleEntityUtility.CreateVehicles(_contexts.session.commonSession.RoomInfo.MapId, _contexts.vehicle, idGenerator);

            foreach (var vehicle in vehicles)
            {
                vehicle.isFlagOffline = true;
            }
        }
Esempio n. 5
0
        public override void DoAction(IEventArgs args)
        {
            UnitPosition up = pos.Select(args);

            Contexts con = args.GameContext;

            VehicleEntityUtility.CreateNewVehicle(con.vehicle, FreeUtil.ReplaceInt(carId, args),
                                                  con.session.commonSession.EntityIdGenerator.GetNextEntityId(),
                                                  map.position.UnityPositionUtil.ToVector3(up));
        }
        public void ExecuteCreateVehicle(Contexts contexts)
        {
            if (_vehicleCreateRequests.Count > 0)
            {
                var req         = _vehicleCreateRequests.Dequeue();
                var idGenerator = contexts.session.commonSession.EntityIdGenerator;

                for (int i = 0; i < req.Count; ++i)
                {
                    var id = idGenerator.GetNextEntityId();
                    VehicleEntityUtility.CreateNewVehicle(contexts.vehicle, req.VehicleId, id, req.Position);
                }
            }
        }
        private void CreateVehicleCmd(PlayerEntity player)
        {
            var controlledVehicle = PlayerVehicleUtility.GetControlledVehicle(player, _contexts.vehicle);

            if (controlledVehicle != null)
            {
                var vehicleCmd = VehicleEntityUtility.CreateVehicleCmd(_vehicleCmdGenerator, _contexts.vehicle, player,
                                                                       _simulationTimer.CurrentTime);

                if (vehicleCmd != null)
                {
                    controlledVehicle.vehicleCmd.AddLatest(vehicleCmd);
                }
            }
        }
        public void OnGamePlay()
        {
            if (!loadConfig && dropList.IsEmpty())
            {
                foreach (MapConfigPoints.ID_Point point in MapConfigPoints.current.IDPints)
                {
                    dropList.AddRange(SingletonManager.Get <FreeItemDrop>().GetDropItems(point.ID, _contexts.session.commonSession.RoomInfo.MapId));
                }
                loadConfig = true;
            }

            if (loadConfig && dropList.IsEmpty())
            {
                return;
            }

            if (_contexts.player.count > 0 && !loadComplete)
            {
                if (index >= dropList.Count)
                {
                    loadComplete = true;
                    return;
                }
                for (int i = 0; i < 20; i++)
                {
                    ItemDrop drop = dropList[index++];
                    if (drop.cat == (int)ECategory.Vehicle)
                    {
                        VehicleEntityUtility.CreateNewVehicle(_contexts.vehicle, drop.id, _contexts.session.commonSession.EntityIdGenerator.GetNextEntityId(), GetGround(drop.pos));
                        break;
                    }
                    else
                    {
                        _contexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)drop.cat, drop.id, drop.count, GetGround(drop.pos));
                        List <ItemDrop> extra = SingletonManager.Get <FreeItemDrop>().GetExtraItems(drop);
                        foreach (ItemDrop e in extra)
                        {
                            _contexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)e.cat, e.id, e.count, GetGround(drop.pos));
                        }
                    }
                }
            }
        }
        private void DoExplosionDamangeToVehicle(VehicleEntity explodedVehicle, Collider collider, Vector3 explosionCenter)
        {
            var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider);

            if (vehicle == null || vehicle == explodedVehicle || _processedEntities.Contains(vehicle))
            {
                return;
            }
            _processedEntities.Add(vehicle);

            var damage = CalcExplosionDamageToObject(explodedVehicle, vehicle, explosionCenter);

            var gameData   = vehicle.GetGameData();
            var indexArray = VehicleIndexHelper.GetAllPartIndexArray();

            foreach (var index in indexArray)
            {
                gameData.DecreaseHp(index, damage);
            }

            //Debug.LogFormat("explosion damange vehicle id {0} damage {1}", vehicle.entityKey.Value.EntityId, damage);
            _logger.InfoFormat("explosion damange vehicle id {0} damage {1}", vehicle.entityKey.Value.EntityId, damage);
        }
 public void CreateVehicles()
 {
     VehicleEntityUtility.CreateVehicles(_contexts.session.commonSession.RoomInfo.MapId, _contexts.vehicle, _contexts.session.commonSession.EntityIdGenerator);
 }
Esempio n. 11
0
        private static void ResolveOverlapWithVehicle(VehicleContext context, PlayerEntity player, ICharacterControllerContext controller, float deltaTime)
        {
            var gamePlay = player.gamePlay;

            if (gamePlay.IsLifeState(EPlayerLifeState.Alive) && !gamePlay.IsVehicleCollisionState(EVehicleCollisionState.None))
            {
                var vehicle = context.GetEntityWithEntityKey(gamePlay.CollidedVehicleKey);
                if (vehicle != null && vehicle.hasGameObject)
                {
                    var transform = vehicle.gameObject.UnityObjWrapper.Value.transform;
                    var forward   = transform.forward;
                    var right     = transform.right;

                    var rootTransform   = player.characterContoller.Value.transform;
                    var playerPosition  = rootTransform.position;
                    var vehiclePosition = vehicle.gameObject.UnityObjWrapper.Value.transform.position;
                    var deltaPosition   = playerPosition - vehiclePosition;
                    deltaPosition.y = 0;
                    deltaPosition   = deltaPosition.normalized;
                    if (deltaPosition.sqrMagnitude < 1E-4f)
                    {
                        if (Mathf.Abs(forward.y) > 0.8)
                        {
                            deltaPosition = right;
                        }
                        else
                        {
                            deltaPosition = forward;
                        }
                    }

                    var moveDirection = Mathf.Abs(forward.y) < 0.8 ? forward : right;
                    var baseDirection = moveDirection;
                    var maxDot        = float.NegativeInfinity;

                    //select the best overlap-resolve direction
                    foreach (var angle in _resolveRotateAngle)
                    {
                        var direction = Quaternion.AngleAxis(angle, transform.up) * baseDirection;
                        var dot       = Vector3.Dot(direction, deltaPosition);
                        if (dot > maxDot)
                        {
                            moveDirection = direction;
                            maxDot        = dot;
                        }
                    }

                    //resolve overlap according to direction
                    const int maxIterator = 2;

                    var velcoity         = vehicle.GetLinearVelocity().magnitude;
                    var expectedDistance = velcoity * 0.333f;
                    for (int i = 1; i <= maxIterator; ++i)
                    {
                        moveDirection.y = 0;
                        moveDirection   = moveDirection.normalized;
                        //move forward to resolve overlap
                        float resolveDist = 5.5f * i /*+ 0.1f*/;
                        controller.Move(moveDirection * resolveDist, deltaTime);

                        var position = rootTransform.position;
                        if (VehicleEntityUtility.IsPlayerOverlapAtPosition(player, position, UnityLayers.VehicleLayerMask))
                        {
                            rootTransform.position = playerPosition;
                            continue;
                        }
                        //move backward to close vehicle
                        var backDist = (playerPosition - rootTransform.position);
//                        var backMag = backDist.magnitude;
//                        if (backMag > expectedDistance)
//                        {
//                            var backNorm = backDist.normalized;
//                            backMag = backMag - expectedDistance;
//                            backDist = backMag * backNorm;
//                        }

                        if (backDist.sqrMagnitude > 1E-4f)
                        {
                            controller.Move(backDist, deltaTime);
                        }

                        break;
                    }
                }
                gamePlay.CollidedVehicleKey = new EntityKey();
            }
        }