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); }
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(); }