public override void Control(Entity entity, EntityUniverseFacade facade, ControlState main, ControlState alt) { if (!main.DownClick) { return; } if (entity.PlayerEntityLogic.LookingAtTile(out var target, out _)) { if (facade.TryGetLightPower(target, out var efficiency, out var phase, out var reductions)) { var notificationParams = new NotificationParams(3); notificationParams.SetString(0, efficiency + "%"); notificationParams.SetFloat(1, phase); notificationParams.SetFloat(2, reductions); var notification = GameContext.NotificationDatabase.CreateNotificationFromCode( "nimbusfox.powerapi.notifications.lightInformation", facade.Step, notificationParams, true); entity.PlayerEntityLogic.ShowNotification(notification); } } }
public override void Update(Timestep timestep, EntityUniverseFacade entityUniverseFacade) { if (!entityUniverseFacade.TryGetLightPower(Location, out var efficiency, out _, out _)) { base.Update(timestep, entityUniverseFacade, 0); return; } base.Update(timestep, entityUniverseFacade, efficiency); }
public override void ClientUpdate(Timestep timestep, Entity entity, AvatarController avatarController, EntityUniverseFacade facade) { var fail = true; if (entity.Logic is SolarPanelTileEntityLogic logic) { if (facade.ReadTile(logic.Location, TileAccessFlags.None, out var tile)) { if (tile.Configuration.Components.Select <ChargeableComponent>().Any()) { if (ClientHook.NameTags.Contains(logic.Location)) { if (NameTag == null) { NameTag = ClientContext.NameTagRenderer.RegisterNameTag(entity.Id); } if (_efficienyTag == null) { _efficienyTag = ClientContext.NameTagRenderer.RegisterNameTag(entity.Id); } if (_chargeTag == null) { _chargeTag = ClientContext.NameTagRenderer.RegisterNameTag(entity.Id); } if (facade.TryGetLightPower(logic.Location, out var efficiency, out _, out _)) { var pos = Constants.NameTagLowerOffset; NameTag.Setup(entity.Physics.Position, new Vector3D(pos.X, pos.Y + 0.2, pos.Z), logic.TilePower.CurrentCharge.ToString("N0") + " / " + logic.TilePower.MaxCharge.ToString("N0"), false, false, false); _efficienyTag.Setup(entity.Physics.Position, new Vector3D(pos.X, pos.Y, pos.Z), efficiency + "%", false, false, false); _chargeTag.Setup(entity.Physics.Position, new Vector3D(pos.X, pos.Y - 0.2, pos.Z), logic.Generated + ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.powerapi.perCycle"), false, false, false); fail = false; } } } } if (fail) { if (NameTag != null) { ClientContext.NameTagRenderer.Unregister(NameTag); NameTag = null; } if (_efficienyTag != null) { ClientContext.NameTagRenderer.Unregister(_efficienyTag); _efficienyTag = null; } if (_chargeTag != null) { ClientContext.NameTagRenderer.Unregister(_chargeTag); _chargeTag = null; } } } }