예제 #1
0
        public GamePhysics(ILogger logger,
                           ITime engineTime, SnapshotTime gameTime,
                           ServerEntities entities, ServerEntityList entityList,
                           BSPModel worldModel,
                           ICommandContext commandContext)
        {
            _logger     = logger ?? throw new ArgumentNullException(nameof(logger));
            _engineTime = engineTime ?? throw new ArgumentNullException(nameof(engineTime));
            _gameTime   = gameTime ?? throw new ArgumentNullException(nameof(gameTime));
            _entities   = entities ?? throw new ArgumentNullException(nameof(entities));
            _entityList = entityList ?? throw new ArgumentNullException(nameof(entityList));
            _worldModel = worldModel ?? throw new ArgumentNullException(nameof(worldModel));

            //TODO: need to reset this on map spawn for singleplayer
            //TODO: mark as server cvar
            _sv_clienttrace = commandContext.RegisterVariable(
                new VariableInfo("sv_clienttrace")
                .WithHelpInfo("Scale multiplier for trace lines ran against studio models")
                .WithValue(1)
                .WithNumberFilter());

            InitBoxHull();

            box_hull = new Hull[1]
            {
                new Hull(0, PhysicsConstants.MaxBoxSides, Vector3.Zero, Vector3.Zero, box_clipnodes, new Memory <Models.BSP.FileFormat.Plane>(box_planes))
            };

            CreateAreaNode(0, ref _worldModel.SubModel.Mins, ref _worldModel.SubModel.Maxs);
        }
예제 #2
0
 public void CreateEntityList()
 {
     EntityList = new ServerEntityList(
         EntityDictionary,
         _serverEngine.Clients.MaxClients,
         _entitiesNetworkList,
         this);
 }
예제 #3
0
        public GameMovement(ILogger logger, ITime engineTime, SnapshotTime gameTime,
                            IServerClients serverClients,
                            ServerEntities entities, ServerEntityList entityList,
                            Random random,
                            GamePhysics physics,
                            ICommandContext commandContext)
        {
            _logger        = logger ?? throw new ArgumentNullException(nameof(logger));
            _engineTime    = engineTime ?? throw new ArgumentNullException(nameof(engineTime));
            _gameTime      = gameTime ?? throw new ArgumentNullException(nameof(gameTime));
            _serverClients = serverClients ?? throw new ArgumentNullException(nameof(serverClients));
            _entities      = entities ?? throw new ArgumentNullException(nameof(entities));
            _entityList    = entityList ?? throw new ArgumentNullException(nameof(entityList));
            _random        = random ?? throw new ArgumentNullException(nameof(random));
            _physics       = physics ?? throw new ArgumentNullException(nameof(physics));

            //TODO: add a filter to enforce positive values only
            _sv_maxvelocity = commandContext.RegisterVariable(
                new VariableInfo("sv_maxvelocity")
                .WithHelpInfo("The maximum velocity in any axis that an entity can have. Any velocity greater than this is clamped to this value")
                .WithValue(2000)
                .WithNumberFilter()
                .WithNumberSignFilter(true));

            //TODO: mark as server cvar
            _sv_stepsize = commandContext.RegisterVariable(
                new VariableInfo("sv_stepsize")
                .WithHelpInfo("Defines the maximum height that characters can still step over (e.g. stairs)")
                .WithValue(18)
                .WithNumberFilter()
                .WithNumberSignFilter(true));

            //TODO: mark as server cvar
            _sv_bounce = commandContext.RegisterVariable(
                new VariableInfo("sv_bounce")
                .WithHelpInfo("Multiplier for physics bounce effect when objects collide with other objects")
                .WithValue(1)
                .WithNumberFilter()
                .WithNumberSignFilter(true));

            //TODO: mark as server cvar
            _sv_gravity = commandContext.RegisterVariable(
                new VariableInfo("sv_gravity")
                .WithHelpInfo("The world's gravity amount, in units per second")
                .WithValue(800)
                .WithNumberFilter());

            //TODO: mark as server cvar
            _sv_stopspeed = commandContext.RegisterVariable(
                new VariableInfo("sv_stopspeed")
                .WithHelpInfo("Minimum stopping speed when on the ground")
                .WithValue(100)
                .WithNumberFilter()
                .WithNumberSignFilter(true));

            //TODO: mark as server cvar
            _sv_friction = commandContext.RegisterVariable(
                new VariableInfo("sv_friction")
                .WithHelpInfo("World friction")
                .WithValue(4)
                .WithNumberFilter()
                .WithNumberSignFilter(true));
        }