示例#1
0
        protected override void OnUpdate()
        {
            // Get access to UI entities
            var scoreUI    = GetSingletonEntity <UIScore>();
            var fanSpeedUI = GetSingletonEntity <UIFanSpeed>();

            var game = GetSingleton <Game>();

            if (game.gameState == GameState.Initialization)
            {
                return;
            }

            // Set Score text value
            TextLayout.SetEntityTextRendererString(EntityManager, scoreUI, game.score.ToString());

            // Set fan force text value
            var fan = GetSingleton <FanComponent>();
            var amt = fan.fanForce;

            TextLayout.SetEntityTextRendererString(EntityManager, fanSpeedUI, amt.ToString());

            var time = (float)Time.ElapsedTime;

            // Add simple motion to the texts
            Entities.ForEach((ref Translation pos, in UIAnimated ui) =>
            {
                var t     = time * ui.swaySpeed;
                var rx    = noise.snoise(math.float2(t + 0));
                var ry    = noise.snoise(math.float2(t + 1));
                pos.Value = ui.origin + math.float3(rx, ry, 0.0f) * ui.swayAmount;
            }).ScheduleParallel();
        }
 protected override void OnStartRunning()
 {
     base.OnStartRunning();
     _entityGold = GetSingletonEntity <GoldScoreTagComponent>();
     _entityCam  = GetSingletonEntity <CameraTagComponent>();
     _text       = GetSingletonEntity <ScoreTagComponent>();
     TextLayout.SetEntityTextRendererString(EntityManager, _text, GetSingleton <GameDataComponent>().Score.ToString());
 }
        public void LevelButton(int level)
        {
            Entities.
            WithAll <WindowStartButtonTagComponent, FloatComponent>().
            ForEach((ref FloatComponent floatComponent) =>
            {
                floatComponent.Value = level;
            }).Run();


            Entity entity = GetSingletonEntity <WindowTextTagComponent>();

            TextLayout.SetEntityTextRendererString(EntityManager, entity, GetLevelText(level));
            HideWindow(true);
        }
        protected override void OnUpdate()
        {
            float           deltaTime      = Time.DeltaTime;
            NonUniformScale goldUiScale    = EntityManager.GetComponentData <NonUniformScale>(_entityGold);
            float3          goldUiPosition = EntityManager.GetComponentData <LocalToWorld>(_entityGold).Position;
            float3          posCam         = EntityManager.GetComponentData <Translation>(_entityCam).Value;
            var             commandBuffer  = new EntityCommandBuffer(Allocator.TempJob);
            var             score          = new NativeQueue <bool>(Allocator.TempJob);
            JobHandle       jobHandle      = Entities
                                             .WithAll <GoldToScoreComponent>()
                                             .WithBurst()
                                             .ForEach((Entity entity, DynamicBuffer <Child> children, ref Translation position, ref NonUniformScale scale, ref GoldToScoreComponent goldToScoreComponent) =>
            {
                goldToScoreComponent.Lerp += deltaTime;
                float3 t3CameraFixPosition = goldToScoreComponent.GoldFixPosition + posCam - goldToScoreComponent.CameraFixPosition;
                position.Value             = math.lerp(t3CameraFixPosition, goldUiPosition, goldToScoreComponent.Lerp);
                scale.Value = math.lerp(goldToScoreComponent.StartScale, goldUiScale.Value, goldToScoreComponent.Lerp);
                if (goldToScoreComponent.Lerp >= 1)
                {
                    commandBuffer.DestroyEntity(entity);
                    foreach (Child child in children)
                    {
                        commandBuffer.DestroyEntity(child.Value);
                    }

                    score.Enqueue(true);
                }
            }).Schedule(Dependency);

            jobHandle.Complete();
            commandBuffer.Playback(EntityManager);
            commandBuffer.Dispose();

            if (score.Count <= 0)
            {
                return;
            }


            Entities.
            WithAll <GameDataComponent>().
            ForEach((ref GameDataComponent gameData) =>
            {
                gameData.Score += score.Count;
            }).Run();
            TextLayout.SetEntityTextRendererString(EntityManager, _text, GetSingleton <GameDataComponent>().Score.ToString());
            score.Clear();
        }
示例#5
0
        protected override void OnUpdate()
        {
            var    uiSystem = World.GetExistingSystem <ProcessUIEvents>();
            Entity incrementButtonEntity = uiSystem.GetEntityByUIName("PageIncrement");
            Entity decrementButtonEntity = uiSystem.GetEntityByUIName("PageDecrement");

            Entity eClicked = Entity.Null;

            Entities.ForEach((Entity entity, in UIState state) =>
            {
                if (state.IsClicked)
                {
                    eClicked = entity;
                }
            }).Run();

            if (eClicked == incrementButtonEntity || eClicked == decrementButtonEntity)
            {
                var pageIndex = GetSingleton <PageIndex>();
                if (eClicked == incrementButtonEntity)
                {
                    pageIndex.Value++;
                }
                else
                {
                    pageIndex.Value--;
                }
                pageIndex.Value = math.min(math.max(pageIndex.Value, 1), MAX_INDEX);
                SetSingleton <PageIndex>(pageIndex);
                Entities
                .ForEach((ref RectTransform rt, in Page p) =>
                {
                    if (p.Index == pageIndex.Value)
                    {
                        rt.Hidden = false;
                    }
                    else
                    {
                        rt.Hidden = true;
                    }
                }).Run();
                Entity textEntity = uiSystem.GetEntityByUIName("PageIndex");
                TextLayout.SetEntityTextRendererString(EntityManager, textEntity, pageIndex.Value.ToString());
            }
        }
        protected override void OnUpdate()
        {
            var currentTime = DateTime.Now;
            var input       = World.GetOrCreateSystem <InputSystem>();
            var timeData    = GetSingleton <TimeData>();
            var hours       = DateTime.Now.Hour;

            timeData.IsNightTime = hours < 6 || hours > 17;

            if (input.GetKey(KeyCode.Space))
            {
                timeData.IsNightTime = !timeData.IsNightTime;
            }

            SetSingleton(timeData);
            TextLayout.SetEntityTextRendererString(EntityManager, TimeEntity, TimeFormat(currentTime));
            TextLayout.SetEntityTextRendererString(EntityManager, DateEntity,
                                                   $"{GetDayOfWeek(currentTime)} {currentTime.Month:00}/{currentTime.Day:00}");
        }
示例#7
0
    protected override void OnUpdate()
    {
        // TODO: Update only when sphere destroyed?

        var gameData = GetSingleton <GameData>();

        Entities
        .ForEach((Entity e, ref TextRenderer textRenderer, in UIName uiName) =>
        {
            if (uiName.Name == "ScoreText")
            {
                TextLayout.SetEntityTextRendererString(EntityManager, e, $"{gameData.score}");
            }

            if (uiName.Name == "HighscoreText")
            {
                TextLayout.SetEntityTextRendererString(EntityManager, e, $"{highScoreSystem.CurrentHighscore}");
            }
        }).WithStructuralChanges().Run();
    }
示例#8
0
        protected override void OnUpdate()
        {
            var currentTime = DateTime.Now;
            var input       = World.GetOrCreateSystem <InputSystem>();
            var timeData    = GetSingleton <TimeData>();
            var hours       = DateTime.Now.Hour;

            DateEntity           = World.GetExistingSystem <ProcessUIEvents>().GetEntityByUIName("DateText");
            TimeEntity           = World.GetExistingSystem <ProcessUIEvents>().GetEntityByUIName("TimeText");
            timeData.IsNightTime = hours < 6 || hours > 17;

            if (input.GetKey(KeyCode.Space) || (input.IsTouchSupported() && input.TouchCount() > 0))
            {
                timeData.IsNightTime = !timeData.IsNightTime;
            }

            SetSingleton(timeData);
            TextLayout.SetEntityTextRendererString(EntityManager, TimeEntity, TimeFormat(currentTime));
            TextLayout.SetEntityTextRendererString(EntityManager, DateEntity,
                                                   $"{GetDayOfWeek(currentTime)} {currentTime.Month:00}/{currentTime.Day:00}");
        }
示例#9
0
        protected override void OnUpdate()
        {
            var race   = GetSingleton <Race>();
            var player = GetSingletonEntity <PlayerTag>();

            // Update gameplay menu visibility
            if (!race.IsRaceStarted || race.IsRaceFinished)
            {
                SetMenuVisibility(false);
                return;
            }

            SetMenuVisibility(true);

            var ui = GetSingleton <GameplayUI>();

            // Update Countdown label
            var countdownTimer = race.IsRaceStarted ? (int)math.ceil(race.CountdownTimer) : 0;

            if (countdownTimer > 0)
            {
                EntityManager.RemoveComponent <Disabled>(ui.CountdownLabel);
                var font = GetComponent <TextRenderer>(ui.CountdownLabel);
                if (countdownTimer >= 3)
                {
                    font.Size      = 8.0f;
                    font.MeshColor = Colors.White;
                }
                else if (countdownTimer == 2)
                {
                    font.Size      = 9.0f;
                    font.MeshColor = Colors.Yellow;
                }
                else if (countdownTimer == 1)
                {
                    font.Size      = 10.0f;
                    font.MeshColor = Colors.Red;
                }

                SetComponent(ui.CountdownLabel, font);

                TextLayout.SetEntityTextRendererString(EntityManager, ui.CountdownLabel, $"{countdownTimer}");
                if (!GetComponent <AudioSource>(ui.CountdownLabel).isPlaying)
                {
                    EntityManager.AddComponent <AudioSourceStart>(ui.CountdownLabel);
                }
            }
            else
            {
                EntityManager.AddComponent <Disabled>(ui.CountdownLabel);
            }

            // Update the lap/rank/etc. labels

            var playerLap = GetComponent <LapProgress>(player).CurrentLap;

            TextLayout.SetEntityTextRendererString(EntityManager, ui.LapLabel, $"LAP {playerLap} / {race.LapCount}");

            var playerRank = GetComponent <CarRank>(player);

            TextLayout.SetEntityTextRendererString(EntityManager, ui.RankLabel, $"{playerRank.Value}");
            // TODO just do this once at the start of a race, the values won't change!
            TextLayout.SetEntityTextRendererString(EntityManager, ui.RankTotalLabel, $"/ {race.NumCars}");

            // Update the lap time and offset from leader labels
            var raceTime            = race.RaceTimer;
            var includeMilliseconds = false; // we need to use a monospaced font for this readout, to not make the numebrs shift

            TextLayout.SetEntityTextRendererString(EntityManager, ui.CurrentTimeLabel, FormatTime(raceTime, includeMilliseconds: includeMilliseconds));

            // Find either the leader's time, or the second car's time
            var otherLapTime = 0.0f;

            Entities.ForEach((Entity entity, ref CarRank rank, ref LapProgress progress) =>
            {
                // we only care if a car has completed one lap
                if (progress.CurrentLap < 2)
                {
                    return;
                }

                // then we want either the #2 car's time if we're the lead, or the lead's car if we're not
                if ((playerRank.Value == 1 && rank.Value == 2) || (playerRank.Value != 1 && rank.Value == 1))
                {
                    otherLapTime = rank.LastLapTime;
                }
            }).Run();

            if (playerLap > 1 && otherLapTime > 0.0f)
            {
                EntityManager.RemoveComponent <Disabled>(ui.TimeFromLeaderLabel);
                var timeDiff = otherLapTime - playerRank.LastLapTime;
                // timediff will be positive if player is in the lead, or negative if not
                var font = GetComponent <TextRenderer>(ui.TimeFromLeaderLabel);
                font.MeshColor = timeDiff > 0.0f ? Colors.Green : Colors.Red;
                SetComponent(ui.TimeFromLeaderLabel, font);
                TextLayout.SetEntityTextRendererString(EntityManager, ui.TimeFromLeaderLabel, FormatTime(timeDiff, includeSign: true, includeMilliseconds: true));
            }
            else
            {
                EntityManager.AddComponent <Disabled>(ui.TimeFromLeaderLabel);
            }
        }
示例#10
0
        protected override void OnUpdate()
        {
            if (!HasSingleton <Race>())
            {
                return;
            }

            var race   = GetSingleton <Race>();
            var player = GetSingletonEntity <Player>();

            // Update Countdown label
            var countdownTimer = race.IsInProgress() ? (int)math.ceil(race.CountdownTimer) : 0;

            var playerRank = GetComponent <CarRank>(player);

            var playerLap = GetComponent <LapProgress>(player).CurrentLap;

            Entities.ForEach((Entity e, ref TextRenderer tr, ref RectTransform rect, ref UIName uiName) =>
            {
                if (uiName.Name == "LabelCountdown")
                {
                    if (countdownTimer > 0)
                    {
                        rect.Hidden = false;
                        if (countdownTimer >= 3)
                        {
                            tr.Size      = 2000f;
                            tr.MeshColor = Colors.White;
                        }
                        else if (countdownTimer == 2)
                        {
                            tr.Size      = 2500f;
                            tr.MeshColor = Colors.Yellow;
                        }
                        else if (countdownTimer == 1)
                        {
                            tr.Size      = 3000f;
                            tr.MeshColor = Colors.Red;
                        }

                        TextLayout.SetEntityTextRendererString(EntityManager, e, $"{countdownTimer}");
                    }
                    else
                    {
                        rect.Hidden = true;
                    }
                }

                // Update the lap/rank/etc. labels
                if (uiName.Name == "LabelLap")
                {
                    TextLayout.SetEntityTextRendererString(EntityManager, e, $"LAP {playerLap} / {race.LapCount}");
                }

                if (uiName.Name == "LabelRank")
                {
                    TextLayout.SetEntityTextRendererString(EntityManager, e, $"{playerRank.Value}");
                }

                if (uiName.Name == "LabelRankTotal")
                {
                    // TODO just do this once at the start of a race, the values won't change!
                    TextLayout.SetEntityTextRendererString(EntityManager, e, $"/ {race.NumCars}");
                }

                if (uiName.Name == "LabelTime")
                {
                    // Update the lap time and offset from leader labels
                    var raceTime            = race.RaceTimer;
                    var includeMilliseconds =
                        false; // we need to use a monospaced font for this readout, to not make the numebrs shift
                    TextLayout.SetEntityTextRendererString(EntityManager, e,
                                                           FormatTime(raceTime, includeMilliseconds: includeMilliseconds));
                }

                if (uiName.Name == "LabelTimeFromLeader")
                {
                    if (playerLap > 1 && race.OthersLapTime > 0.0f)
                    {
                        rect.Hidden  = false;
                        var timeDiff = race.OthersLapTime - playerRank.LastLapTime;
                        // timediff will be positive if player is in the lead, or negative if not
                        tr.MeshColor = timeDiff > 0.0f ? Colors.Green : Colors.Red;
                        TextLayout.SetEntityTextRendererString(EntityManager, e, FormatTime(timeDiff, true, true));
                    }
                    else
                    {
                        rect.Hidden = true;
                    }
                }
            }).WithStructuralChanges().WithReadOnly(playerLap).WithReadOnly(race).Run();
        }