private void OnHostShutdown(EntityUid uid, GuardianHostComponent component, ComponentShutdown args) { if (component.HostedGuardian == null) { return; } EntityManager.QueueDeleteEntity(component.HostedGuardian.Value); }
/// <summary> /// Called every time the host moves, to make sure the distance between the host and the guardian isn't too far /// </summary> private void OnHostMove(EntityUid uid, GuardianHostComponent component, ref MoveEvent args) { if (component.HostedGuardian == null || !TryComp(component.HostedGuardian, out GuardianComponent? guardianComponent) || !guardianComponent.GuardianLoose) { return; } CheckGuardianMove(uid, component.HostedGuardian.Value, component); }
private void RetractGuardian(GuardianHostComponent hostComponent, GuardianComponent guardianComponent) { if (!guardianComponent.GuardianLoose) { DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); return; } hostComponent.GuardianContainer.Insert(guardianComponent.Owner); DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); _popupSystem.PopupEntity(Loc.GetString("guardian-entity-recall"), hostComponent.Owner, Filter.Pvs(hostComponent.Owner)); guardianComponent.GuardianLoose = false; }
private void OnPerformAction(EntityUid uid, GuardianHostComponent component, GuardianToggleActionEvent args) { if (args.Handled) { return; } if (component.HostedGuardian != null) { ToggleGuardian(component); } args.Handled = true; }
public void ToggleGuardian(GuardianHostComponent hostComponent) { if (hostComponent.HostedGuardian == null || !TryComp(hostComponent.HostedGuardian, out GuardianComponent? guardianComponent)) { return; } if (guardianComponent.GuardianLoose) { RetractGuardian(hostComponent, guardianComponent); } else { ReleaseGuardian(hostComponent, guardianComponent); } }
/// <summary> /// Triggers when the host receives damage which puts the host in either critical or killed state /// </summary> private void OnHostStateChange(EntityUid uid, GuardianHostComponent component, MobStateChangedEvent args) { if (component.HostedGuardian == null) { return; } if (args.CurrentMobState.IsCritical()) { _popupSystem.PopupEntity(Loc.GetString("guardian-critical-warn"), component.HostedGuardian.Value, Filter.Entities(component.HostedGuardian.Value)); SoundSystem.Play("/Audio/Effects/guardian_warn.ogg", Filter.Entities(component.HostedGuardian.Value), component.HostedGuardian.Value); } else if (args.CurrentMobState.IsDead()) { SoundSystem.Play("/Audio/Voice/Human/malescream_guardian.ogg", Filter.Pvs(uid), uid, AudioHelpers.WithVariation(0.20f)); EntityManager.RemoveComponent <GuardianHostComponent>(uid); } }
private void ReleaseGuardian(GuardianHostComponent hostComponent, GuardianComponent guardianComponent) { if (guardianComponent.GuardianLoose) { DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); return; } if (!CanRelease(hostComponent, guardianComponent)) { _popupSystem.PopupEntity(Loc.GetString("guardian-no-soul"), hostComponent.Owner, Filter.Entities(hostComponent.Owner)); return; } DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); hostComponent.GuardianContainer.Remove(guardianComponent.Owner); DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); guardianComponent.GuardianLoose = true; }
private void OnHostInit(EntityUid uid, GuardianHostComponent component, ComponentInit args) { component.GuardianContainer = uid.EnsureContainer <ContainerSlot>("GuardianContainer"); _actionSystem.AddAction(uid, component.Action, null); }
private bool CanRelease(GuardianHostComponent host, GuardianComponent guardian) { return(HasComp <ActorComponent>(guardian.Owner)); }
private void OnHostInit(EntityUid uid, GuardianHostComponent component, ComponentInit args) { component.GuardianContainer = uid.EnsureContainer <ContainerSlot>("GuardianContainer"); }