private void OnInteractionAttempt(EntityUid uid, DroneComponent component, InteractionAttemptEvent args) { if (HasComp <MobStateComponent>(args.Target) && !HasComp <DroneComponent>(args.Target)) { args.Cancel(); } }
private void OnActivateUIAttempt(EntityUid uid, DroneComponent component, UserOpenActivatableUIAttemptEvent args) { if (!_tagSystem.HasTag(args.Target, "DroneUsable")) { args.Cancel(); } }
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; } }
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")); } }
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); } }
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(); } } }
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); }
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; } } }
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); } }
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; } }
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); } }
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); }
private void OnMindRemoved(EntityUid uid, DroneComponent drone, MindRemovedMessage args) { UpdateDroneAppearance(uid, DroneStatus.Off); _tagSystem.RemoveTag(uid, "DoorBumpOpener"); EnsureComp <GhostTakeoverAvailableComponent>(uid); }
private void OnActivateUIAttempt(EntityUid uid, DroneComponent component, UserOpenActivatableUIAttemptEvent args) { args.Cancel(); }
private void OnThrowAttempt(EntityUid uid, DroneComponent drone, ThrowAttemptEvent args) { args.Cancel(); }
private void OnEmoteAttempt(EntityUid uid, DroneComponent component, EmoteAttemptEvent args) { // No. args.Cancel(); }
private void OnMindRemoved(EntityUid uid, DroneComponent drone, MindRemovedMessage args) { UpdateDroneAppearance(uid, DroneStatus.Off); EnsureComp <GhostTakeoverAvailableComponent>(uid); }