]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Adding intellicard functionality. (#32347)
authorScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Tue, 22 Oct 2024 13:49:39 +0000 (15:49 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Oct 2024 13:49:39 +0000 (15:49 +0200)
* init

* im so confused

* clean

* sprite update

* :|

* further attempts

* be blessed for it works

* Very prestigious pAI

* cleaning up

* Intellicard in RD locker

* PAIn't

* .Clear()n't

* .Clear()n't for real this time

* Cleaning up

* Whoopsie Daisy

Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs
Content.Shared/UserInterface/IntrinsicUISystem.cs
Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
Resources/Prototypes/Entities/Mobs/Player/silicon.yml
Resources/Textures/Objects/Devices/ai_card.rsi/base.png
Resources/Textures/Objects/Devices/ai_card.rsi/empty.png
Resources/Textures/Objects/Devices/ai_card.rsi/full.png

index baef62c3da98ec7ab165cd7a1481c74678c5d68a..7eef20cebd83f3415705fe5db61681017c70e0d3 100644 (file)
@@ -285,6 +285,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem
 
     private bool SetupEye(Entity<StationAiCoreComponent> ent)
     {
+        if (_net.IsClient)
+            return false;
         if (ent.Comp.RemoteEntity != null)
             return false;
 
@@ -299,8 +301,11 @@ public abstract partial class SharedStationAiSystem : EntitySystem
 
     private void ClearEye(Entity<StationAiCoreComponent> ent)
     {
+        if (_net.IsClient)
+            return;
         QueueDel(ent.Comp.RemoteEntity);
         ent.Comp.RemoteEntity = null;
+        Dirty(ent);
     }
 
     private void AttachEye(Entity<StationAiCoreComponent> ent)
@@ -330,6 +335,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem
         if (_timing.ApplyingState)
             return;
 
+        SetupEye(ent);
+
         // Just so text and the likes works properly
         _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName);
 
@@ -351,6 +358,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem
         {
             _eye.SetTarget(args.Entity, null, eyeComp);
         }
+        ClearEye(ent);
     }
 
     private void UpdateAppearance(Entity<StationAiHolderComponent?> entity)
index 2d8c5d14801d2cf547d73f487e746367194c2307..b16492b83556136dec66de68f31f33ee874d4c97 100644 (file)
@@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem
     public override void Initialize()
     {
         SubscribeLocalEvent<IntrinsicUIComponent, MapInitEvent>(InitActions);
+        SubscribeLocalEvent<IntrinsicUIComponent, ComponentShutdown>(OnShutdown);
         SubscribeLocalEvent<IntrinsicUIComponent, ToggleIntrinsicUIEvent>(OnActionToggle);
     }
 
@@ -21,6 +22,15 @@ public sealed class IntrinsicUISystem : EntitySystem
         args.Handled = InteractUI(uid, args.Key, component);
     }
 
+    private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args)
+    {
+        foreach (var actionEntry in component.UIs.Values)
+        {
+            var actionId = actionEntry.ToggleActionEntity;
+            _actionsSystem.RemoveAction(uid, actionId);
+        }
+    }
+
     private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args)
     {
         foreach (var entry in component.UIs.Values)
index 82660f8f13abb73843c12dfdfbdfb28217395629..1cc97c2401fc0151d639d750a3d0ae3146d22ba4 100644 (file)
   id: LockerFillResearchDirectorNoHardsuit
   table: !type:AllSelector
     children:
+    - id: Intellicard
     - id: BoxEncryptionKeyScience
     - id: CircuitImprinterMachineCircuitboard
     - id: ClothingBeltUtilityFilled
index c9164b14d13239cc9ce4d2f70bf204dcdbc4915e..9f7e206c249ef0935023ef4a5cd69c76a1671f34 100644 (file)
     title: comms-console-announcement-title-station-ai
     color: "#2ed2fd"
 
+- type: entity
+  id: AiHeldIntellicard
+  description: Components added / removed from an entity that gets inserted into an Intellicard.
+  categories: [ HideSpawnMenu ]
+  components:
+  - type: IntrinsicRadioReceiver
+  - type: IntrinsicRadioTransmitter
+    channels:
+    - Binary
+  - type: ActiveRadio
+    channels:
+    - Binary
+    - Common
+  - type: ActionGrant
+    actions:
+    - ActionAIViewLaws
+  - type: UserInterface
+    interfaces:
+      enum.SiliconLawsUiKey.Key:
+        type: SiliconLawBoundUserInterface
 
 # Ai
 - type: entity
   - type: StationAiHolder
     slot:
       name: station-ai-mind-slot
-      locked: true
+      locked: false
+      disableEject: true
       whitelist:
         tags:
         - StationAi
 # Items
 - type: entity
   id: Intellicard
-  name: Intellicard
+  name: intellicard
   description: A storage device for AIs.
   parent:
   - BaseItem
   - AiHolder
   suffix: Empty
   components:
+  - type: ContainerComp
+    proto: AiHeldIntellicard
+    container: station_ai_mind_slot
   - type: Sprite
     sprite: Objects/Devices/ai_card.rsi
     layers:
       enum.SiliconLawsUiKey.Key:
         type: SiliconLawBoundUserInterface
   - type: ComplexInteraction
-  - type: DoorRemote
   - type: Actions
   - type: Access
     groups:
index 244183c078c3d580cda31d0431ced9150a7cf7c9..535f5a48e99f6bf7fb5e384259378c9f21082c70 100644 (file)
Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png differ
index 7e61f368de294ae506cdab73e818f0f594bb260c..a62b9263d52ce1637458bc3f14dc63bc12852b59 100644 (file)
Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png differ
index 59131c8c0aafc5f647d4409168265f23cc05e667..69a1825d91db90a67d6f57f2815d9f3581ecc43a 100644 (file)
Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png differ