Esempio n. 1
0
        void SpawnOne()
        {
            SpawnerState state = _state.CurrentState[0];

            float3 spawnPosition = GetRandomPosition();

            state.CurrentCount++;

            Debug.Log($"spawn new enemy at {spawnPosition}");

            PostUpdateCommands.CreateEntity(Bootloader.EnemyArchveType);
            PostUpdateCommands.SetComponent(new Position {
                Value = spawnPosition
            });
            PostUpdateCommands.SetComponent(new Rotation {
                Value = quaternion.LookRotation(new float3(0.0f, 0.0f, -1.0f), math.up())
            });
            PostUpdateCommands.SetComponent(new MoveSpeed {
                Speed = GameSettings.ENEMY_SPEED
            });
            PostUpdateCommands.SetComponent(new Health {
                Value = GameSettings.ENEMY_HP
            });

            PostUpdateCommands.AddSharedComponent(Bootloader.EnemyPrefab);
            // PostUpdateCommands.AddSharedComponent(Bootloader.EnemyPrefab);

            _state.CurrentState[0] = state;
        }
/*      protected override JobHandle OnUpdate(JobHandle inputDeps)
 *              {
 *                      EntityCommandBuffer cmd = _removeBuffer.CreateCommandBuffer();
 *
 *                      var remove_bullet = new RemoveBulletsJob
 *                      {
 *                              PlayerDead = _playerCheck.PlayerInput.Length == 0,
 *                              Commands = cmd
 *                      }.ScheduleSingle(this, inputDeps);
 *
 *                      var remove_unit = new RemoveUnitJob
 *                      {
 *                              Commands = cmd
 *                      }.ScheduleSingle(this,remove_bullet);
 *
 *                      return remove_unit;
 *              } */

        protected override void OnUpdate()
        {
            bool  playerAlive = _playerCheck.PlayerInput.Length > 0;
            float dt          = Time.deltaTime;

            for (int i = 0; i < _data.Entities.Length; ++i)
            {
                Shot s = _data.Shots[i];
                if (s.TimeToLive > 0)
                {
                    s.TimeToLive -= dt;
                }
                if (s.TimeToLive <= 0.0f || !playerAlive)
                {
                    PostUpdateCommands.DestroyEntity(_data.Entities[i]);
                }

                _data.Shots[i] = s;
            }

            SpawnerState ss      = _gameState.State[0];
            bool         changed = false;

            for (int i = 0; i < _enemyCheckData.Enemies.Length; ++i)
            {
                Health hp = _enemyCheckData.Healths[i];
                if (hp.Value <= 0 || !playerAlive)
                {
                    if (hp.Value <= 0)
                    {
                        ss.KillCount++;
                        changed = true;
                    }
                    PostUpdateCommands.DestroyEntity(_enemyCheckData.Entities[i]);
                }
            }
            if (changed)
            {
                _gameState.State[0] = ss;
            }

            for (int i = 0; i < _playerCheck.PlayerInput.Length; i++)
            {
                if (_playerCheck.Health[i].Value <= 0)
                {
                    PostUpdateCommands.DestroyEntity(_playerCheck.Entities[i]);
                }
            }
        }