Esempio n. 1
0
        private Services CreateAllSharedState(BouncyShooterOptions options)
        {
            var ss = new SharedState
            {
                ActorTypesCount = options.ActorTypesCount,
                BulletSpeed     = options.BulletSpeed,
                FireTimeout     = 1f / options.RateOfFire,
                ActorsCount     = options.ActorsCount,
                ActorSpeed      = options.ActorSpeed,
                BulletLifeTime  = options.BulletLifeTime,
                ActorRadius     = options.ActorRadius,
                BulletRadius    = options.BulletRadius
            };

            var allShared = new Services()
            {
                TimeService   = new TimeService(),
                ActorService  = new ActorService(),
                BulletService = new BulletService(),
                SharedState   = ss
            };

            if (options.IsRendering)
            {
                var bullet            = options.BulletPrefab;
                var bulletViewService = new BulletViewService()
                {
                    Pool = new Pool <Transform>(
                        () =>
                    {
                        var tr = Object.Instantiate(bullet).transform;
                        tr.gameObject.SetActive(false);
                        return(tr);
                    }, 2),
                    Views = new Dictionary <int, Transform>()
                };
                var actor = options.ShooterPrefab;

                var actorViewService = new ActorViewService()
                {
                    Pool = new Pool <Transform>(
                        () =>
                    {
                        var tr = Object.Instantiate(actor).transform;
                        tr.gameObject.SetActive(false);
                        return(tr);
                    }, 2),
                    Views = new Dictionary <int, Transform>()
                };

                allShared.ActorViewService  = actorViewService;
                allShared.BulletViewService = bulletViewService;
            }

            return(allShared);
        }
Esempio n. 2
0
        public void Start()
        {
            var ss       = CreateSharedState(_options);
            var worldCfg = new EcsWorldConfig()
            {
                FilterEntitiesCacheSize = _options.EntitiesMax,
                WorldEntitiesCacheSize  = _options.EntitiesMax,
            };

            _world = new EcsWorld(worldCfg);

            _systems = new EcsSystems(_world, "RUN SYSTEMS");

            _systems
            .Add(new InitSystem())
            .Add(new TimeSystem())
            .Add(new ShootSystem())
            .Add(new BulletSystem())
            .Add(new MoveSystem())
            ;

            AddActorTypeSystemsByTypeCount();

            if (_isRendering)
            {
                _systems
                .Add(new ActorViewUpdateSystem())
                .Add(new BulletViewDeleteSystem())
                .Add(new BulletViewUpdateSystem())
                ;
            }

            _systems
            .Add(new BulletDeleteSystem())
            ;

            _systems
            .Inject(ss)
            .Inject(new TimeService())
            .Inject(new ActorService())
            .Inject(new BulletService())
            ;

            if (_isRendering)
            {
                var bullet            = _options.BulletPrefab;
                var bulletViewService = new BulletViewService()
                {
                    Pool = new Pool <Transform>(
                        () =>
                    {
                        var tr = Object.Instantiate(bullet).transform;
                        tr.gameObject.SetActive(false);
                        return(tr);
                    }, 2),
                    Views = new Dictionary <int, Transform>()
                };
                var actor = _options.ShooterPrefab;

                var actorViewService = new ActorViewService()
                {
                    Pool = new Pool <Transform>(
                        () =>
                    {
                        var tr = Object.Instantiate(actor).transform;
                        tr.gameObject.SetActive(false);
                        return(tr);
                    }, 2),
                    Views = new Dictionary <int, Transform>()
                };

                _systems
                .Inject(bulletViewService)
                .Inject(actorViewService)
                ;
            }

            _systems.ProcessInjects();
            _systems.Init();
        }