Exemplo n.º 1
0
 private void OnInteractionAttempt(EntityUid uid, DroneComponent component, InteractionAttemptEvent args)
 {
     if (HasComp <MobStateComponent>(args.Target) && !HasComp <DroneComponent>(args.Target))
     {
         args.Cancel();
     }
 }
Exemplo n.º 2
0
 private void OnActivateUIAttempt(EntityUid uid, DroneComponent component, UserOpenActivatableUIAttemptEvent args)
 {
     if (!_tagSystem.HasTag(args.Target, "DroneUsable"))
     {
         args.Cancel();
     }
 }
Exemplo n.º 3
0
        private void OnMindAdded(EntityUid uid, DroneComponent drone, MindAddedMessage args)
        {
            UpdateDroneAppearance(uid, DroneStatus.On);
            _popupSystem.PopupEntity(Loc.GetString("drone-activated"), uid, Filter.Pvs(uid));

            if (drone.AlreadyAwoken == false)
            {
                var spawnCoord = Transform(uid).Coordinates;

                if (drone.Tools.Count == 0)
                {
                    return;
                }

                if (TryComp <HandsComponent>(uid, out var hands) && hands.Count >= drone.Tools.Count)
                {
                    foreach (var entry in drone.Tools)
                    {
                        var item = EntityManager.SpawnEntity(entry.PrototypeId, spawnCoord);
                        AddComp <UnremoveableComponent>(item);
                        hands.PutInHand(item);
                        drone.ToolUids.Add(item);
                    }
                }

                drone.AlreadyAwoken = true;
            }
        }
Exemplo n.º 4
0
 private void OnExamined(EntityUid uid, DroneComponent component, ExaminedEvent args)
 {
     if (TryComp <MindComponent>(uid, out var mind) && mind.HasMind)
     {
         args.PushMarkup(Loc.GetString("drone-active"));
     }
     else
     {
         args.PushMarkup(Loc.GetString("drone-dormant"));
     }
 }
Exemplo n.º 5
0
        private void OnMobStateChanged(EntityUid uid, DroneComponent drone, MobStateChangedEvent args)
        {
            if (args.Component.IsDead())
            {
                var body = Comp <SharedBodyComponent>(uid); //There's no way something can have a mobstate but not a body...

                foreach (var item in drone.ToolUids)
                {
                    EntityManager.DeleteEntity(item);
                }
                body.Gib();
                EntityManager.DeleteEntity(uid);
            }
        }
Exemplo n.º 6
0
        private void OnInteractionAttempt(EntityUid uid, DroneComponent component, InteractionAttemptEvent args)
        {
            if (NonDronesInRange(uid, component))
            {
                args.Cancel();
            }

            if (HasComp <SharedItemComponent>(args.Target) && !HasComp <UnremoveableComponent>(args.Target))
            {
                if (!_tagSystem.HasAnyTag(args.Target.Value, "DroneUsable", "Trash"))
                {
                    args.Cancel();
                }
            }
        }
Exemplo n.º 7
0
        private bool NonDronesInRange(EntityUid uid, DroneComponent component)
        {
            var xform = Comp <TransformComponent>(uid);

            foreach (var entity in _lookup.GetEntitiesInRange(xform.MapID, xform.WorldPosition, component.InteractionBlockRange))
            {
                if (HasComp <MindComponent>(entity) && !HasComp <DroneComponent>(entity) && !HasComp <GhostComponent>(entity))
                {
                    if (_gameTiming.IsFirstTimePredicted)
                    {
                        _popupSystem.PopupEntity(Loc.GetString("drone-too-close"), uid, Filter.Entities(uid));
                    }
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 8
0
 private void DropObject()
 {
     grabbing = false;
     if (grabbedObject != null)
     {
         AudioSource.PlayClipAtPoint(dropSFX, transform.position);
         if (grabbedObject.tag == "Wing" || grabbedObject.tag == "Nose" || grabbedObject.tag == "Fuselage" || grabbedObject.tag == "Engine")
         {
             grabbedObject.transform.parent = componentBase;
             DroneComponent droneComponent = grabbedObject.GetComponent <DroneComponent>();
             grabbedObject.transform.position = droneComponent.defaultPos;
             grabbedObject.transform.rotation = droneComponent.defaultRot;
             droneComponent.onStand           = true;
         }
         else
         {
             grabbedObject.transform.parent = null;
         }
     }
 }
Exemplo n.º 9
0
        private void OnMobStateChanged(EntityUid uid, DroneComponent drone, MobStateChangedEvent args)
        {
            if (args.Component.IsDead())
            {
                var body = Comp <SharedBodyComponent>(uid); //There's no way something can have a mobstate but not a body...

                foreach (var item in drone.ToolUids.Select((value, i) => (value, i)))
                {
                    if (_tagSystem.HasTag(item.value, "Drone"))
                    {
                        RemComp <UnremoveableComponent>(item.value);
                    }
                    else
                    {
                        EntityManager.DeleteEntity(item.value);
                    }
                }
                body.Gib();
                EntityManager.DeleteEntity(uid);
            }
        }
Exemplo n.º 10
0
        private void OnMindAdded(EntityUid uid, DroneComponent drone, MindAddedMessage args)
        {
            UpdateDroneAppearance(uid, DroneStatus.On);
            _popupSystem.PopupEntity(Loc.GetString("drone-activated"), uid,
                                     Filter.Pvs(uid), PopupType.Large);

            if (drone.AlreadyAwoken == false)
            {
                var spawnCoord = Transform(uid).Coordinates;

                if (drone.Tools.Count == 0)
                {
                    return;
                }

                if (TryComp <HandsComponent>(uid, out var hands) && hands.Count >= drone.Tools.Count)
                {
                    var items = EntitySpawnCollection.GetSpawns(drone.Tools, _robustRandom);
                    foreach (var entry in items)
                    {
                        var item = Spawn(entry, spawnCoord);
                        AddComp <UnremoveableComponent>(item);
                        if (!_handsSystem.TryPickupAnyHand(uid, item, checkActionBlocker: false))
                        {
                            QueueDel(item);
                            Logger.Error($"Drone ({ToPrettyString(uid)}) failed to pick up innate item ({ToPrettyString(item)})");
                            continue;
                        }
                        drone.ToolUids.Add(item);
                    }
                }

                if (TryComp <ActionsComponent>(uid, out var actions) && TryComp <UnpoweredFlashlightComponent>(uid, out var flashlight))
                {
                    _actionsSystem.AddAction(uid, flashlight.ToggleAction, null, actions);
                }

                drone.AlreadyAwoken = true;
            }
        }
Exemplo n.º 11
0
 private void GrabObject()
 {
     grabbing      = true;
     grabbedObject = grabbable;
     if (grabbable != null)
     {
         AudioSource.PlayClipAtPoint(grabSFX, transform.position);
         grabbedObject = grabbable;
         //grabbedObject.transform.position = transform.position;
         if (grabbedObject.tag == "Wing" || grabbedObject.tag == "Nose" || grabbedObject.tag == "Fuselage" || grabbedObject.tag == "Engine")
         {
             componentBase = grabbedObject.transform.parent;
             DroneComponent droneComponent = grabbedObject.GetComponent <DroneComponent>();
             droneComponent.onStand = false;
         }
         grabbedObject.transform.parent = transform;
     }
     else
     {
         AudioSource.PlayClipAtPoint(grabFailSFX, transform.position);
     }
 }
Exemplo n.º 12
0
        private bool NonDronesInRange(EntityUid uid, DroneComponent component)
        {
            var xform = Comp <TransformComponent>(uid);

            foreach (var entity in _lookup.GetEntitiesInRange(xform.MapPosition, component.InteractionBlockRange))
            {
                // Return true if the entity is/was controlled by a player and is not a drone or ghost.
                if (HasComp <MindComponent>(entity) && !HasComp <DroneComponent>(entity) && !HasComp <GhostComponent>(entity))
                {
                    // Filter out dead ghost roles. Dead normal players are intended to block.
                    if ((TryComp <MobStateComponent>(entity, out var entityMobState) && HasComp <GhostTakeoverAvailableComponent>(entity) && entityMobState.IsDead()))
                    {
                        continue;
                    }
                    if (_gameTiming.IsFirstTimePredicted)
                    {
                        _popupSystem.PopupEntity(Loc.GetString("drone-too-close", ("being", entity)), uid, Filter.Entities(uid));
                    }
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 13
0
 private void OnMindRemoved(EntityUid uid, DroneComponent drone, MindRemovedMessage args)
 {
     UpdateDroneAppearance(uid, DroneStatus.Off);
     _tagSystem.RemoveTag(uid, "DoorBumpOpener");
     EnsureComp <GhostTakeoverAvailableComponent>(uid);
 }
Exemplo n.º 14
0
 private void OnActivateUIAttempt(EntityUid uid, DroneComponent component, UserOpenActivatableUIAttemptEvent args)
 {
     args.Cancel();
 }
Exemplo n.º 15
0
 private void OnThrowAttempt(EntityUid uid, DroneComponent drone, ThrowAttemptEvent args)
 {
     args.Cancel();
 }
Exemplo n.º 16
0
 private void OnEmoteAttempt(EntityUid uid, DroneComponent component, EmoteAttemptEvent args)
 {
     // No.
     args.Cancel();
 }
Exemplo n.º 17
0
 private void OnMindRemoved(EntityUid uid, DroneComponent drone, MindRemovedMessage args)
 {
     UpdateDroneAppearance(uid, DroneStatus.Off);
     EnsureComp <GhostTakeoverAvailableComponent>(uid);
 }