Пример #1
0
        void Start()
        {
            // void can be switched to IEnumerator for support coroutines.

            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            var gameState = new GameState();
            _systems
            // register your systems here:
            .Add(new InitializeFieldSystem())
            .Add(new CreateCellViewSystem())
            .Add(new SetCameraSystem())
            .Add(new ControlSystem())
            .Add(new AnalyzeClickSystem())
            .Add(new CreateTakenViewSystem())

            //»спользует компоент 1 кадр, после чего удал¤ет компонент
            .OneFrame <UpdateCameraEvent> ()
            .OneFrame <Clicked> ()
            // .OneFrame<TestComponent2> ()

            // внедрение внешних данных
            .Inject(Configuration)
            .Inject(SceneData)
            .Inject(gameState)
            // .Inject (new NavMeshSupport ())
            .Init();
        }
Пример #2
0
        void Start()
        {
            _world = new EcsWorld();
#if UNITY_EDITOR
            UnityIntegration.EcsWorldObserver.Create(_world);
#endif
            _systems = new EcsSystems(_world);
            _systems
#if !LEOECS_DISABLE_INJECT
            .Add(_uiEmitter)
            .Add(new TestUiClickEventSystem())
            .Add(new TestUiDragEventSystem())
            .Add(new TestUiEnterExitEventSystem())
            .Add(new TestUiInputEventSystem())
            .Add(new TestUiScrollViewEventSystem())
#else
            .Add(_uiEmitter.SetWorld(_world))
            .Add(new TestUiClickEventSystem(_world))
            .Add(new TestUiDragEventSystem(_world))
            .Add(new TestUiEnterExitEventSystem(_world))
            .Add(new TestUiInputEventSystem(_world))
            .Add(new TestUiScrollViewEventSystem(_world))
#endif
            .Initialize();
#if UNITY_EDITOR
            UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
        }
Пример #3
0
 void OnDisable()
 {
     _systems.Destroy();
     _systems = null;
     _world.Destroy();
     _world = null;
 }
Пример #4
0
        private void OnEnable()
        {
            _ecsWorld  = new EcsWorld();
            _systems   = new EcsSystems(_ecsWorld);
            _gameState = new GameState();

            _tilesPool = gameObject.GetComponentInChildren <TilesPool>();
            _tilesPool.Prewarm(20, configuration.tileView);

            _audioSource = GetComponent <AudioSource>();

#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_ecsWorld);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif

            _systems
            .Add(new TempoEmitSystem())
            .Add(new TempoTileSpawnerSystem())
            .Add(new TempoTilesMoveSystem())
            .Add(new TempoHitSystem())

            .Inject(_gameState)
            .Inject(configuration)
            .Inject(_tilesPool)
            .Inject(_audioSource)

            .OneFrame <TempoEvent>()
            .OneFrame <TempoHitEvent>()

            .Init();
        }
Пример #5
0
 public void Run(EcsSystems systems)
 {
     foreach (var entity in _filter)
     {
         _pool.Del(entity);
     }
 }
Пример #6
0
    void Awake()
    {
        world   = new EcsWorld();
        systems = new EcsSystems(world);

        var random      = new Random();
        var resourceIds = configuration.resourceElementDefinitions.Select(o => o.uid).ToArray();

        dependencyContainer = new DependencyContainer
        {
            Random                  = random,
            Configuration           = configuration,
            ServerStubConfiguration = serverStubConfiguration,
            ResourceIds             = resourceIds,
            Server                  = new ServerStub(serverStubConfiguration, random, resourceIds)
        };

        systems.Add(new InitializeResourcesProcessing(world, dependencyContainer))
        .Add(new UserInputProcessing(world, dependencyContainer))
        .Add(new PlayerMovementProcessing(dependencyContainer))
        .Add(new ResourceItemSpawnProcessing(world, dependencyContainer))
        .Add(new ServerResourceChangedEventProcessing(world, dependencyContainer))
        .Add(new UpdateResourcesProcessing())
        .OneFrame <ResourceAmountChangedEventComponent>()
        .Inject(dependencyContainer)
        .Init();
    }
Пример #7
0
        void Start()
        {
            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            var _runtime = new RuntimeData();
            Service <RuntimeData> .Set(_runtime);

            UI _ui = GetOrSetUI(_config);

            Service <EcsWorld> .Set(_world);

            Service <StaticData> .Set(_config);

            Service <SceneData> .Set(_scene);

            _systems
            .Add(new InitializeSystem())
            .Add(new ChangeGameStateSystem())

            .Add(new WinSystem())
            .Add(new LoseSystem())


            .Inject(_runtime)
            .Inject(_config)
            .Inject(_scene)
            .Inject(_ui)
            .Init();
        }
Пример #8
0
        void Start()
        {
            // void can be switched to IEnumerator for support coroutines.

            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            _systems
            .Add(new InputSystem())

            .Add(LogicSystems())
            .Add(ViewSystems())

            .Add(new DestroySystem())

            // register one-frame components (order is important):
            .OneFrame <PositionUpdatedFlag>()
            .OneFrame <Ecs.Input>()
            .OneFrame <Drag>()
            .OneFrame <PlaceItemFlag>()
            //.OneFrame<ThreadChunk>()
            .OneFrame <DestroyedFlag>()

            // inject service instances here (order doesn't important):
            .Inject(GetComponent <IInputService>())
            .Inject(GetComponent <IViewService>())
            .Inject(GetComponent <IInventoryService>())
            .Inject(new GameWorld())
            .Inject(new Random())

            .Init();
        }
Пример #9
0
 public void Destroy()
 {
     _systems?.Destroy(_worlds);
     _systems = null;
     _worlds?.Destroy();
     _worlds = null;
 }
Пример #10
0
    public void Init()
    {
        systems = new EcsSystems(world);

        systems
        .Add(new StartGameSystem())
        .Add(new ClearLevelSystem())
        .Add(new LevelGenerationSystem())
        .Add(new EndGameSystem())
        .Add(new DoomSystem())
        .Add(new LevelTimerSystem())
        .Add(new EndGameTimerUpdaterSystem())
        .Add(new CameraControllerSystem())
        .Add(new MapsExploringSystem())
        .Add(new DebugLogErrorsSystem())
        .Add(new ChangeDebugUIState())
        .Add(new MapObjectsExploringSystem())
        .Add(new WallsExploringSystem())
        .Add(new WallDestroyingSystem())
        .Add(new LookToCameraSystem())
        .Add(new DirectionArrowsSystem())
        .Add(new ObjectsRotationSystem())
        .Add(new ObjectMovingSystem())
        .Add(new CameraZoomSystem())

        .Inject(gameData)
        .Inject(levelData)
        .Inject(runtimeData)

        .OneFrame <MessageComponent>()
        .OneFrame <ExploreComponent>()
        .Init();
    }
Пример #11
0
 public void Dispose()
 {
     Systems.Destroy();
     Systems = null;
     World.Destroy();
     World = null;
 }
Пример #12
0
    public void Init()
    {
        systems = new EcsSystems(world);

        systems
        .Add(new PlayerSpawnSystem())
        .Add(new PlayerTargetSystem())
        .Add(new PlayerMiningSystem())
        .Add(new PlayerMovingSystem())
        .Add(new PlayerStopMiningSystem())
        .Add(new PlayerStopMovingSystem())
        .Add(new SpawnEscapedPlayersSystem())
        .Add(new PlayerExitSystem())
        .Add(new HeadSizeChangingSystem())
        .Add(new PlayerMiningCompleteSystem())
        .Add(new PlayerMovingCompleteSystem())
        .Add(new MinigProgressSystem())
        .Add(new SkinColorChangingSystem())
        .Add(new PlayerRemovingSystem())
        .Add(new EnableNavmeshAgentDelaySystem())
        .Add(new PlayerHudRemovingSystem())
        .Add(new LeaderBoardSystem())
        .Add(new PlayerUsingSystem())
        .Add(new ChangeHatSystem())
        .Add(new SavePlayersSystem())
        .Add(new LoadPlayersSystem())

        .Inject(gameData)
        .Inject(levelData)
        .Inject(runtimeData);

        systems.Init();
    }
Пример #13
0
    public void Init()
    {
        systems = new EcsSystems(world);

        systems
        .Add(new PlayerEnterSystem())
        .Add(new DirectionCommandsSystem())
        .Add(new StatsMessagesSystem())
        .Add(new HelpMessagesSystem())
        .Add(new ColorCommandSystem())
        .Add(new HeadSizeCommandSystem())
        .Add(new ExitCommandSystem())
        .Add(new UpgradeSystem())
        .Add(new TasksBreakSystem())
        .Add(new TaskCompleteSystems())
        .Add(new UseCommandSystem())
        .Add(new HatCommandSystem())

        .Inject(gameData.TwitchCommands)
        .Inject(runtimeData)
        .Inject(gameData)

        .OneFrame <MessageComponent>()

        .Init();
    }
Пример #14
0
    void Start()
    {
        World    = new EcsWorld();
        _systems = new EcsSystems(World)
                   //InitSystems
                   .Add(new LevelSetupSystem())

                   //RunSystems
                   .Add(new PlaySystem())
                   .Add(new GameStateProcessSystem())
                   .Add(new UpgradeSystem())
                   .Add(new IncomeProcessSystem())
                   .Add(new GameStateProcessSystem())
                   .Add(new GameSaveSystem())

                                              //DestroySystems
                   .Add(new EndGameSystem(0)) //TODO: manage scene idx in convenient readable form

                   .Inject(_currentLevel)
                   .Inject(_root)
                   .Inject(_configuration)
                   .Inject(_game)
                   .Inject(_saveService)

                   .OneFrame <PlayModeEvent>()
                   .OneFrame <IncomeEvent>()
                   .OneFrame <UpgradeCharacterEvent>();


#if UNITY_EDITOR
        Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(World);
        Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
        _systems?.Init();
    }
Пример #15
0
        void Start()
        {
            // void can be switched to IEnumerator for support coroutines.

            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            _systems
            // register your systems here, for example:
            .Add(new GameInitSystems())
            .Add(new InputSystem())
            .Add(new MoveObjectSystem())

            .Add(new CreateViewSystem())
            .Add(new MoveViewSystem())

            // register one-frame components (order is important), for example:
            .OneFrame <EcsInput>()
            .OneFrame <UpdatePositionFlag>()

            // inject service instances here (order doesn't important), for example:
            .Inject(GetComponent <IViewService>())
            .Inject(GetComponent <IInputService>())
            .Inject(new Rnd(0))
            .Init();
        }
Пример #16
0
        public void Init(EcsSystems systems)
        {
            var worldConstraints = systems.GetWorld(PhysicsWorldNames.Constraints);

            springsBodyBody  = worldConstraints.Filter <SpringBodyBody>().End();
            springsBodySpace = worldConstraints.Filter <SpringBodySpace>().End();
        }
Пример #17
0
        void Start()
        {
            // create ecs environment.
            _world = new EcsWorld();

#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
#endif
            _systems = new EcsSystems(_world)
                       .Add(new DemoInitSystem())
                       .Add(new InputSystem())
                       .Add(new PlayerMoveSystem())

                       .Add(new PlayerViewCreateSystem())
                       .Add(new PlayerViewUpdatePositionSystem())

                       .Inject(GetComponent <IViewService>())
                       .Inject(GetComponent <IInputService>())

                       .OneFrame <Ecs.Input>()
                       .OneFrame <PositionUpdated>()
            ;
            _systems.Init();

#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
        }
Пример #18
0
        void Start()
        {
            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            _systems
            .Add(new GameInitSystem())
            .Add(new GridViewSystem())
            .Add(new GamePauseSystem())
            .Add(new SnakeViewSystem())
            .Add(new InputSystem())
            .Add(new MoveSystem())
            .Add(new SnakeTailSystem())
            .Add(new FoodSystem())
            .Add(new LevelProgresSystem())
            .Add(new ColorPaletteSystem())
            .Add(new GameOverSystem())
            .Add(new UISystem())
            .Add(new CameraPositionSystem())

            .OneFrame <TailComponent>()
            .OneFrame <LevelProgressEvent>()
            .OneFrame <ColorUpdateComponent>()

            .Inject(new LevelProgress())
            .Inject(Configuration)
            .Inject(SceneData)
            .Inject(UIData)
            .Inject(UIDataStart)
            .Init();
        }
Пример #19
0
        private void Start()
        {
            _world   = new EcsWorld();         // Инициализация окружения _world
            _systems = new EcsSystems(_world); // Инициализация систем окружения _systems

            //Добавление систем к инициализации в окружении
            _systems
            .Add(new GameInitSystem())
            .Add(new EnemyInitSystem())
            .Add(new PlayerInputSystem())
            .Add(new MoveSystem())
            .Add(new CameraSystem())
            .Add(new ShotSystem())
            .Add(new BonusInitSystem())

            //Внедрение зависимостей со сцены во все системы
            //Отлов зависимостей внутри систем => ECSFilter<T>, where T [anyAllowed]Component
            .Inject(playerStartPoint)
            .Inject(weaponController)
            .Inject(startButton)
            .Inject(waypoints)
            .Inject(spawnerContainer)

            /*
             * .Inject(levelSpawners)*/;


            //Инициализация систем
            _systems.Init();
        }
Пример #20
0
 void IEcsSystemsDebugListener.OnSystemsDestroyed(EcsSystems systems)
 {
     // for immediate unregistering this MonoBehaviour from ECS.
     OnDestroy();
     // for delayed destroying GameObject.
     Destroy(gameObject);
 }
Пример #21
0
        /// <summary>
        /// Click LMB to choose start point, click LMB another time to choose end point and create segment.
        /// Next LMB clicks will create segments with end point = current mouse position, start point = previous end point.
        /// Click RMB to stop.
        /// </summary>
        public void Run(EcsSystems systems)
        {
            var factory = sharedData.ObjectsFactory;
            var keys    = sharedData.Keys;

            var mousePositionWorld = keys.GetMousePosition() * sharedData.RenderData.PixelsToMeters;

            if (keys.IsKeyPressed(MouseButtons.Left))
            {
                if (!started)
                {
                    start   = mousePositionWorld;
                    started = true;
                }
                else
                {
                    factory.CreateSegment(start, mousePositionWorld, 0.9f);
                    start = mousePositionWorld;
                }
            }
            if (keys.IsKeyPressed(MouseButtons.Right))
            {
                started = false;
            }
        }
Пример #22
0
        void Start()
        {
            // void can be switched to IEnumerator for support coroutines.

            _world   = new EcsWorld();
            _systems = new EcsSystems(_world);
#if UNITY_EDITOR
            Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
            Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
            _systems
            // register your systems here, for example:
            .Add(new GameInitSystem())

            .Add(new CarInputSystem())
            .Add(new MoveCarSystem())
            .Add(new DragSystem())
            .Add(new VictimDamaginSystem())
            .Add(new VictimAISystem())

            // register one-frame components (order is important), for example:
            // .OneFrame<TestComponent1> ()
            // .OneFrame<TestComponent2> ()

            // inject service instances here (order doesn't important), for example:
            .Inject(_gameData)
            .Init();
        }
Пример #23
0
        public void Init(EcsSystems systems)
        {
            var world = systems.GetWorld(worldName);

            _filter = world.Filter <T> ().End();
            _pool   = world.GetPool <T> ();
        }
Пример #24
0
        void OnRunSystemsGUI(EcsSystems systems)
        {
            var runList = _runList.Count > 0 ? _runList.Pop() : null;
            var count   = systems.GetRunSystems(ref runList);

            if (count > 0)
            {
                EditorGUI.indentLevel++;
                for (var i = 0; i < count; i++)
                {
                    var asSystems = runList[i] as EcsSystems;
                    var name      = asSystems != null ? asSystems.Name : runList[i].GetType().Name;
                    systems.DisabledInDebugSystems[i] = !EditorGUILayout.ToggleLeft(name, !systems.DisabledInDebugSystems[i]);
                    if (asSystems != null)
                    {
                        GUI.enabled = !systems.DisabledInDebugSystems[i];
                        OnRunSystemsGUI(asSystems);
                        if (systems.DisabledInDebugSystems[i])
                        {
                            GUI.enabled = true;
                        }
                    }
                    runList[i] = null;
                }
                EditorGUI.indentLevel--;
            }
            _runList.Push(runList);
        }
Пример #25
0
 public Game(EcsWorld world, EcsSystems systems, MapGenerator mapGenerator, ILogger logger)
 {
     World        = world;
     Systems      = systems;
     Logger       = logger;
     MapGenerator = mapGenerator;
 }
Пример #26
0
        public override void InitSystems(out EcsSystems update, out EcsSystems draw, out EcsSystems systems)
        {
            if (game == null)
            {
                throw new Exception();
            }

            sheets   = new(new GenIdxAllocator());
            tilesets = new(new GenIdxAllocator());
            levels   = new(new GenIdxAllocator());

            update = new EcsSystems(world)
                     .Add(new SheetLoader())
                     .Add(new TilesetLoader())
                     .Add(new LevelLoader())
                     .Add(new AABBs())
                     .Add(new Animated());

            draw = new EcsSystems(world)
                   .Add(new Renderer());

            systems = new EcsSystems(world)
                      .Inject(sheets)
                      .Inject(tilesets)
                      .Inject(levels);
        }
Пример #27
0
 void OnDisable()
 {
     _systems.Dispose();
     _systems = null;
     _world.Dispose();
     _world = null;
 }
Пример #28
0
    void Start()
    {
        _world   = new EcsWorld();
        _systems = new EcsSystems(_world);

#if UNITY_EDITOR
        Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
        Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);
#endif
        _systems
        .Add(new GameInitSystems())

        .Add(new InputSystem())
        .Add(new UpdatePlayerMoveTimerSystem())
        .Add(new MovePlayerSystem())

        .Add(new CreateViewSystem())
        .Add(new MoveViewSystem())

        .OneFrame <Ecs.Input>()
        .OneFrame <UpdatePositionFlag>()

        .Inject(GetComponent <IViewService>())
        .Inject(GetComponent <IInputService>())
        .Init();
    }
Пример #29
0
        // The constructor initializes all the fields
        public Game(MainWindow mainWindow)
        {
            this.mainWindow = mainWindow;

            // Create new ecs world instance
            Logger.Info("Creating world instance.");
            world = new EcsWorld();

            // Create the ecs systems
            Logger.Info("Creating systems.");
            systems = new EcsSystems(world)
                      .Add(new SnakeSystem(this))
                      .Add(new FoodSystem(this));

            // Initialize systems
            Logger.Info("Initializing systems.");
            systems.Initialize();

            // Set initial score
            Logger.Info("Setting initial score.");
            SetScore(0);

            // Setup game
            Logger.Info("Setting up game entities.");
            GameSetup();
        }
Пример #30
0
    void OnEnable()
    {
        _world = new EcsWorld();
#if UNITY_EDITOR
        Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world);
#endif
        _gameplaySystems = new EcsSystems(_world)
                           //.Add(jitEmitter)
                           .Add(new InitializePlayerSystem())
                           .Add(new InitializeCameraSystem())
                           .Add(new InputSystem(joystick, jumpButton))
                           //.Add(new FrameSelectionSystem())
                           //.Add(new RecorderSystem())
                           //.Add(new ReplaySystem())
                           .Add(new CameraFollowSystem())
                           .Add(new PlayerDieSystem());
        _gameplaySystems.Initialize();

        _physicsSystems = new EcsSystems(_world)
                          .Add(new PlayerMoveSystem())
                          .Add(new PlayerJumpSystem());
        _physicsSystems.Initialize();

#if UNITY_EDITOR
        Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_gameplaySystems);
#endif
    }