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