using Content.Shared.Examine; namespace Content.Shared.Power.Generator; /// /// Shared logic for power-switchable devices. /// /// public abstract class SharedPowerSwitchableSystem : EntitySystem { public override void Initialize() { SubscribeLocalEvent(OnExamined); } private void OnExamined(EntityUid uid, PowerSwitchableComponent comp, ExaminedEvent args) { // Show which voltage is currently selected. var voltage = VoltageColor(GetVoltage(uid, comp)); args.PushMarkup(Loc.GetString(comp.ExamineText, ("voltage", voltage))); } /// /// Helper to get the colored markup string for a voltage type. /// public string VoltageColor(SwitchableVoltage voltage) { return Loc.GetString("power-switchable-voltage", ("voltage", VoltageString(voltage))); } /// /// Converts from "hv" to "HV" since for some reason the enum gets made lowercase??? /// public string VoltageString(SwitchableVoltage voltage) { return voltage.ToString().ToUpper(); } /// /// Returns index of the next cable type index to cycle to. /// public int NextIndex(EntityUid uid, PowerSwitchableComponent? comp = null) { if (!Resolve(uid, ref comp)) return 0; // loop back at the end return (comp.ActiveIndex + 1) % comp.Cables.Count; } /// /// Returns the current cable voltage being used by a power-switchable device. /// public SwitchableVoltage GetVoltage(EntityUid uid, PowerSwitchableComponent? comp = null) { if (!Resolve(uid, ref comp)) return default; return comp.Cables[comp.ActiveIndex].Voltage; } /// /// Returns the cable's next voltage to cycle to being used by a power-switchable device. /// public SwitchableVoltage GetNextVoltage(EntityUid uid, PowerSwitchableComponent? comp = null) { if (!Resolve(uid, ref comp)) return default; return comp.Cables[NextIndex(uid, comp)].Voltage; } }