SubscribeLocalEvent<SleepingComponent, EntityZombifiedEvent>(OnZombified);
SubscribeLocalEvent<SleepingComponent, MobStateChangedEvent>(OnMobStateChanged);
SubscribeLocalEvent<SleepingComponent, ComponentInit>(OnCompInit);
+ SubscribeLocalEvent<SleepingComponent, ComponentRemove>(OnComponentRemoved);
+ SubscribeLocalEvent<SleepingComponent, RejuvenateEvent>(OnRejuvenate);
SubscribeLocalEvent<SleepingComponent, SpeakAttemptEvent>(OnSpeakAttempt);
SubscribeLocalEvent<SleepingComponent, CanSeeAttemptEvent>(OnSeeAttempt);
SubscribeLocalEvent<SleepingComponent, PointAttemptEvent>(OnPointAttempt);
SubscribeLocalEvent<SleepingComponent, InteractHandEvent>(OnInteractHand);
SubscribeLocalEvent<SleepingComponent, StunEndAttemptEvent>(OnStunEndAttempt);
SubscribeLocalEvent<SleepingComponent, StandUpAttemptEvent>(OnStandUpAttempt);
- SubscribeLocalEvent<SleepingComponent, RejuvenateEvent>(OnRejuvenate);
SubscribeLocalEvent<ForcedSleepingStatusEffectComponent, StatusEffectAppliedEvent>(OnStatusEffectApplied);
SubscribeLocalEvent<SleepingComponent, UnbuckleAttemptEvent>(OnUnbuckleAttempt);
TrySleeping((ent, ent.Comp));
}
+ private void OnRejuvenate(Entity<SleepingComponent> ent, ref RejuvenateEvent args)
+ {
+ // WAKE UP!!!
+ RemComp<SleepingComponent>(ent);
+ }
+
/// <summary>
/// when sleeping component is added or removed, we do some stuff with other components.
/// </summary>
_actionsSystem.AddAction(ent, ref ent.Comp.WakeAction, WakeActionId, ent);
}
+ private void OnComponentRemoved(Entity<SleepingComponent> ent, ref ComponentRemove args)
+ {
+ _actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction);
+
+ var ev = new SleepStateChangedEvent(false);
+ RaiseLocalEvent(ent, ref ev);
+
+ _blindableSystem.UpdateIsBlind(ent.Owner);
+ }
+
private void OnSpeakAttempt(Entity<SleepingComponent> ent, ref SpeakAttemptEvent args)
{
// TODO reduce duplication of this behavior with MobStateSystem somehow
args.Cancelled = true;
}
- private void OnRejuvenate(Entity<SleepingComponent> ent, ref RejuvenateEvent args)
- {
- TryWaking((ent.Owner, ent.Comp), true);
- }
-
private void OnExamined(Entity<SleepingComponent> ent, ref ExaminedEvent args)
{
if (args.IsInDetailsRange)
TrySleeping(args.Target);
}
- private void Wake(Entity<SleepingComponent> ent)
- {
- RemComp<SleepingComponent>(ent);
- _actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction);
-
- var ev = new SleepStateChangedEvent(false);
- RaiseLocalEvent(ent, ref ev);
-
- _blindableSystem.UpdateIsBlind(ent.Owner);
- }
-
/// <summary>
/// Try sleeping. Only mobs can sleep.
/// </summary>
_popupSystem.PopupClient(Loc.GetString("wake-other-success", ("target", Identity.Entity(ent, EntityManager))), ent, user);
}
- Wake((ent, ent.Comp));
- return true;
+ return RemComp<SleepingComponent>(ent);
}
/// <summary>