示例#1
0
        private void InitializeNewContainerContext(ILifetimeScope container)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            var gameInitializables = container.Resolve <IEnumerable <IGameInitializable> >();
            var gameStartables     = container.Resolve <IEnumerable <IGameStartable> >();

            CurrentGameTickables      = container.Resolve <IEnumerable <IGameTickable> >();
            CurrentGameFixedTickables = container.Resolve <IEnumerable <IGameFixedTickable> >();

            EventQueueAsync.Enqueue(async() =>
            {
                foreach (var initializable in gameInitializables)
                {
                    await initializable.OnGameInitialized();
                }

                foreach (var startable in gameStartables)
                {
                    await startable.OnGameStart();
                }
            });

            LifetimeDependencyScope = container;
        }
示例#2
0
        public async Task Service()
        {
            //Just do one a tick.
            if (EventQueue.Any())
            {
                if (EventQueue.TryDequeue(out var action))
                {
                    action?.Invoke();
                }
            }

            if (EventQueueAsync.Any())
            {
                if (EventQueueAsync.TryDequeue(out var action))
                {
                    await action.Invoke();
                }
            }

            foreach (var tickable in CurrentGameTickables)
            {
                tickable.Tick();
            }

            long currentMilliseconds = TimeService.CurrentTimeInMilliseconds();

            if (LastMilliseconds == -1)
            {
                LastMilliseconds = currentMilliseconds;
            }
            else if (currentMilliseconds - 600 >= LastMilliseconds)
            {
                //It's been 600ms, time for another tick.
                LastMilliseconds = currentMilliseconds;

                foreach (var fixedTickable in CurrentGameFixedTickables)
                {
                    fixedTickable.OnGameFixedTick();
                }
            }
        }
示例#3
0
 public void EnqueueAsync(Func <Task> actionEventAsync)
 {
     EventQueueAsync.Enqueue(actionEventAsync);
 }