Пример #1
0
        ISpatialPartitioner createSpatialPartitioner()
        {
            ISpatialPartitioner spatialPartitioner = Peer.ContextPlugin.CreateSpatialPartitioner();

            if (spatialPartitioner != null)
            {
                log.Info("Spatial Partitioner: {0}", spatialPartitioner.GetTypeName());
            }
            else
            {
                log.Warn("No spatial partitioner detected, you will not be able to do any raycasts or overlaps");
            }

            return(spatialPartitioner);
        }
Пример #2
0
        Context(Peer peer)
        {
            Assert.NotNull(peer, "peer");

            Client   = peer as Client;
            Server   = peer as Server;
            IsServer = peer is Server;
            IsClient = peer is Client;

            Peer = peer;
            Peer.ContextPlugin.Context = this;

            Scheduler            = new Scheduler(this);
            NetworkQueue         = new HashSet <Network.IConnection>();
            SynchronizationQueue = new HashSet <Synchronizable>();

            //
            Time = new TimeManager(peer);

            //
            Stats = new Stats(this);

            // Register packet handlers
            RegisterPacketHandler(new SynchronizableHandler(), HeaderBytes.Synchronizable);
            RegisterPacketHandler(RPC = new RPCDispatcher(this), HeaderBytes.RemoteProcedureCall);
            RegisterPacketHandler(StateStreamHandler = new StateStreamHandler(), HeaderBytes.ActorStateStream);

            // Register player events
            registerEventsForHandler <Actor>(ActorEventHandler   = new EventHandlerActor(this));
            registerEventsForHandler <Player>(PlayerEventHandler = new EventHandlerPlayer(this));

            // Create spatial partitioner
            SpatialPartitioner = createSpatialPartitioner();

            // Plugin callback
            Peer.ContextPlugin.ContextStarted();

            // Init actor definitions
            ActorDefinition.Init(this);
        }