iso2/scene/ScenePlayerWake.cs
using Sandbox.Audio;
using Sandbox.Utility;
public class PlayerWake : Component {
[Property] public BasePlayer Player {get; set;}
[Property] public SkinnedModelRenderer Body {get; set;}
[Property] public SkinnedModelRenderer Bulb {get; set;}
[Property] public NpcAnimator Dog {get; set;}
[Property] public GameObject DogTargetA {get; set;}
[Property] public GameObject DogTargetB {get; set;}
[Property] public GameObject DarkLight {get; set;}
[Property] public GameObject BulbLight {get; set;}
[Property] public SoundPointComponent Score {get; set;}
[Property] public PacViewNode ExitTo {get; set;}
[Property] public bool Play {get; set;}
[Property, ReadOnly] public bool Playing {get; set;}
[Property, ReadOnly] public bool Done {get; set;}
protected override void OnStart() {
PlayDelay = 2f;
base.OnStart();
}
private TimeUntil PlayDelay {get; set;}
private TimeUntil StartDelay {get; set;}
private TimeUntil Finished;
protected override void OnUpdate() {
if (PlayDelay)
Play = true;
base.OnUpdate();
Playing = Playing && Play;
Done = Done && Play;
if (Done)
return;
Player.WorldTransform = Body.GetAttachment("camera").Value;
if (!Playing && !Play) {
Mixer.FindMixerByName("Game").Volume = 0f;
Dog.GameObject.WorldTransform = DogTargetA.WorldTransform;
Body.UseAnimGraph = true;
Body.Set("play", false);
Bulb.UseAnimGraph = true;
Bulb.Set("play", false);
BulbLight.Enabled = false;
DarkLight.Enabled = true;
Bulb.MaterialGroup = "off";
Dog.Activity = "sleep";
Body.Enabled = true;
Player.Isometric = false;
StartDelay = 5.1f;
if (Player.PacCamera.IsValid()) {
Player.PacCamera.RenderCamera.FieldOfView = 80f;
Player.PacCamera.Fade = -1;
}
}
if (Play && !Playing) {
Score.StartSound();
Player.PacCamera.Fade = -(StartDelay.Relative*0.25f).Clamp(0,1);
Mixer.FindMixerByName("Game").Volume = Easing.EaseIn(StartDelay.Fraction);
Player.PacCamera.FullScreenFMV = true;
if (!StartDelay)
return;
Body.Set("play", true);
Bulb.Set("play", true);
Sound.Play("sounds/choreo/player_wake_foley.sound");
Finished = 18.5f;
Bulb.OnGenericEvent = (SceneModel.GenericEvent evt) => {
if (evt.Type == "WAKE_DOG")
Dog.Activity = "lie";
if (evt.Type == "DOG_SIT") {
Dog.Activity = "sit";
Dog.GameObject.WorldTransform = DogTargetB.WorldTransform;
}
if (evt.Type == "LIGHT_ON") {
BulbLight.Enabled = true;
DarkLight.Enabled = false;
Bulb.MaterialGroup = "Default";
}
};
Playing = true;
} else if (Play && Playing) {
if (Player.PacCamera.IsValid())
Player.PacCamera.RenderCamera.FieldOfView = 80f;
if (!Finished)
return;
Playing = false;
Done = true;
if (!BulbLight.Enabled)
BulbLight.Enabled = true;
DarkLight.Enabled = false;
Bulb.MaterialGroup = "Default";
Body.Enabled = false;
ExitTo.ConnectToNode(0, PlayerPacCamera.TransitionType.None);
BulbLight.Parent.WorldPosition = Vector3.Zero;
}
}
}