示例#1
0
        protected override void OnUpdate()
        {
            var gameState    = GetSingleton <GameState>();
            var input        = World.GetExistingSystem <InputSystem>();
            var playerEntity = GetSingletonEntity <Player>();

            if (gameState.Value == GameStates.Start &&
                IsPressingToStart(input))
            {
                // remove all stuff
                EntityManager.DestroyEntity(m_AsteroidsQuery);
                EntityManager.DestroyEntity(m_MissileQuery);

                // put the ship back in the center
                EntityManager.SetComponentData(playerEntity, new Translation
                {
                    Value = float3.zero
                });
                EntityManager.SetComponentData(playerEntity, new Rotation
                {
                    Value = quaternion.identity
                });

                AudioUtils.PlaySound(EntityManager, AudioTypes.ExtraShip);

                gameState.Value = GameStates.InGame;
                SetSingleton(gameState);
            }
        }
示例#2
0
        protected override void OnUpdate()
        {
            var gameState = GetSingleton <GameState>();

            if (gameState.Value != GameStates.InGame)
            {
                return;
            }

            var playerEntity = GetSingletonEntity <Player>();
            var player       = GetSingleton <Player>();
            var playerRot    = EntityManager.GetComponentData <Rotation>(playerEntity);
            var playerTr     = EntityManager.GetComponentData <Translation>(playerEntity);

            m_ElapsedTime += Time.DeltaTime;
            var timeLimit = 1.0f / player.FireRate;

            if (m_ElapsedTime > timeLimit)
            {
                var missile = EntityManager.Instantiate(player.MissilePrefab);

                EntityManager.SetComponentData(missile, playerRot);
                EntityManager.SetComponentData(missile, playerTr);
                EntityManager.SetComponentData(missile, new PhysicsVelocity
                {
                    Linear = math.mul(playerRot.Value, new float3(0f, player.FireSpeed, 0f)).xy
                });

                AudioUtils.PlaySound(EntityManager, AudioTypes.PlayerFire);

                m_ElapsedTime = 0;
            }
        }
示例#3
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            var gameState = GetSingleton <GameState>();

            if (gameState.Value != GameStates.InGame)
            {
                return(inputDeps);
            }

            var gameStateEntity = GetSingletonEntity <GameState>();

            var physicsWorldSystem = World.GetExistingSystem <PhysicsWorldSystem>();
            var physicsWorld       = physicsWorldSystem.PhysicsWorld;

            var wasPlayerHit = false;

            Entities
            .WithAll <Player>()
            .WithoutBurst()
            .ForEach((
                         Entity e,
                         ref PhysicsColliderBlob collider,
                         ref Translation tr,
                         ref Rotation rot) =>
            {
                // check with player
                if (physicsWorld.OverlapCollider(
                        new OverlapColliderInput
                {
                    Collider = collider.Collider,
                    Transform = new PhysicsTransform(tr.Value, rot.Value),
                    Filter = collider.Collider.Value.Filter
                },
                        out OverlapColliderHit hit))
                {
                    wasPlayerHit = true;

                    // stop everything
                    EntityManager.SetComponentData(gameStateEntity, new GameState
                    {
                        Value = GameStates.Start
                    });
                }
            }).Run();

            if (wasPlayerHit)
            {
                AudioUtils.PlaySound(EntityManager, AudioTypes.PlayerExplosion);
            }

            return(inputDeps);
        }
示例#4
0
        protected override void OnUpdate()
        {
            var physicsWorldSystem = World.GetExistingSystem <PhysicsWorldSystem>();
            var physicsWorld       = physicsWorldSystem.PhysicsWorld;

            var explosions = GetSingleton <ExplosionSpawner>();

            {
                var didExplode = false;
                Entities.WithAll <Missile>()
                .ForEach((
                             Entity missileEntity,
                             ref PhysicsColliderBlob collider,
                             ref Translation tr,
                             ref Rotation rot) =>
                {
                    // check with missile
                    if (physicsWorld.OverlapCollider(
                            new OverlapColliderInput
                    {
                        Collider = collider.Collider,
                        Transform = new PhysicsTransform(tr.Value, rot.Value),
                        Filter = collider.Collider.Value.Filter
                    },
                            out OverlapColliderHit hit))
                    {
                        var asteroidEntity = physicsWorld.AllBodies[hit.PhysicsBodyIndex].Entity;

                        var exp = PostUpdateCommands.Instantiate(explosions.Prefab);
                        PostUpdateCommands.SetComponent(exp, new Translation {
                            Value = tr.Value
                        });

                        PostUpdateCommands.DestroyEntity(asteroidEntity);
                        PostUpdateCommands.DestroyEntity(missileEntity);

                        didExplode = true;
                    }
                });

                if (didExplode)
                {
                    var randomSfx    = m_Random.NextInt(0, 3);
                    var explosionSfx = randomSfx == 2 ? AudioTypes.AsteroidExplosionLarge :
                                       randomSfx == 1 ? AudioTypes.AsteroidExplosionMedium :
                                       AudioTypes.AsteroidExplosionSmall;

                    AudioUtils.PlaySound(EntityManager, explosionSfx);
                }
            }
        }
 private void PlayMoveSound()
 {
     AudioUtils.PlaySound(EntityManager, AudioTypes.PlayerThruster, true);
     m_IsPlayingMoveSound = true;
 }