Hotspot.cs
namespace NiuLai;
public sealed class Hotspot : Component
{
[Property] public string Id { get; set; }
[Property] public string LabelCn { get; set; }
[Property] public string LabelEn { get; set; }
[Property] public float Radius { get; set; } = 80f;
public bool InRange( Vector3 pos ) =>
(WorldPosition.WithZ( 0 ) - pos.WithZ( 0 )).Length < Radius;
public void Use()
{
GameAudio.PlayForHotspot( Id );
Trophies.OnUsed( Id );
switch ( Id )
{
case "mom":
if ( GameState.Beat == Beat.Canyon && !GameState.MomGone )
GameState.HearMom();
else if ( GameState.Beat == Beat.Night && !GameState.HasMilk && !GameState.GaveMilk )
GameState.GiveMilk();
else if ( !GameState.MomGone )
Chatter.Say( "牛妈妈 / Mama", Chatter.Pick( Lines.MomIntro ), 3.0f );
else
Chatter.Say( "牛妈妈 / Mama", new Line( "风还在。", "Wind still here." ) );
break;
case "lark":
if ( GameState.Beat == Beat.Migrate && !GameState.HeardLikeHere )
GameState.HearLikeHere();
else if ( GameState.Beat == Beat.Migrate )
FilmCut.Play( CutId.LarkBack );
else if ( GameState.Beat == Beat.Farewell )
FilmCut.Play( CutId.Ng );
else if ( GameState.Beat == Beat.Wake )
GameState.Talk( "云玎 / Yun Ding", new[] { new Line( "跟着我飞的线。", "Follow my fly line." ) } );
else
GameState.Talk( "云玎 / Yun Ding", Lines.Dream );
break;
case "snake":
GameState.GetBitten();
break;
case "creek":
GameState.JumpCreek();
break;
case "leopard":
if ( GameState.FedLeopard && GameState.Beat == Beat.Ban )
GameState.BanBaoLa();
else if ( GameState.FedLeopard && GameState.ShareAgain() )
break;
else if ( GameState.FedLeopard )
GameState.Talk( "豹拉 / Bao La", new[] { new Line( "我还在。他们不信我。急什么。", "I still here. They not believe me. Rush what." ) } );
else if ( !GameState.TryLeopardMeet() )
GameState.Talk( "豹拉 / Bao La", new[] { new Line( "先去吃草。再分给我。", "First go eat grass. Then share to me." ) } );
break;
case "rock":
GameState.Talk( "三只狼 / Three wolves", Lines.RockStare );
if ( GameState.Beat == Beat.Wolves )
GameState.FirstWolfWave();
break;
case "niuer":
if ( GameState.Beat == Beat.Suspect )
GameState.HearSuspect();
else if ( GameState.Beat == Beat.Ban )
GameState.BanBaoLa();
else
Chatter.Say( "牛二 / Niu Er", Chatter.Pick( Lines.Suspect ), 3.0f );
break;
case "dad":
if ( GameState.Beat is Beat.Wake or Beat.Reunion )
GameState.MeetDad();
else
GameState.Talk( "牛爸爸 / Cow Father", new[] { new Line( "先走完你的路。", "First finish your road." ) } );
break;
case "cart":
if ( GameState.Beat == Beat.Cart )
GameState.MooCart();
else
Chatter.Say( "台车 / The Cart", new Line( "它还会更大。现在只是预习。", "It will more big. Now only rehearsal." ) );
break;
case "grass":
var tuft = GameObject.Components.Get<GrassTuft>();
if ( tuft.IsValid() )
tuft.Eat();
else
GameState.EatGrass();
break;
case "orb":
GameState.EatGrass();
GameState.CourageBoost( 1 );
Chatter.Say( "树球 / Tree ball", Chatter.Pick( Lines.Orb ) );
GameObject.Destroy();
break;
case "mask":
Chatter.Say( "口罩牛 / Mask cow", Chatter.Pick( Lines.MaskCow ), 3.2f );
GameAudio.PlayClip( GameAudio.Stand, 0.8f );
break;
}
}
}