TriggerWinFinal.cs

A trigger component that handles the player reaching the level finish. On trigger enter it plays win/explosion sounds, spawns particles, tweaks model animation and physics, disables several renderers/colliders, records score/time, and then loads the next scene after a delay while updating leaderboard stats.

NetworkingFile Access
using Sandbox;
using static Sandbox.Resources.ResourceGenerator;

public sealed class TriggerWinFinal : Component, Component.ITriggerListener

{
	[Property] public SkinnedModelRenderer model { get; set; }
	[Property] public Rigidbody rb { get; set; }
	[Property] public SoundEvent win { get; set; }
	[Property] public SoundEvent explosion { get; set; }
	[Property] public static int CurrentLevelIndex = 1;
	[Property] public ParticleSphereEmitter winparticles { get; set; }

	[Property] static Scene ActiveScene { get; set; }

	[Property] public SceneFile nextscene { get; set; }

	[Property] int nextLevelDelay = 3;

	[Property] public ChickenControls chicken { get; set; }
	[Property] public SkinnedModelRenderer MechaChicken { get; set; }
	[Property] public ModelRenderer SDButton { get; set; }
	[Property] public SphereCollider head { get; set; }
	[Property] public SphereCollider body { get; set; }
	[Property] public float newTime { get; set; }



	
	async void ITriggerListener.OnTriggerEnter( Collider other )
	{
		newTime = chicken.gametime;
		ScoreManager.CurrentScore = chicken.cornpoints;
		winparticles.Enabled = true;
		model.Set( "AnimPar", 6 );
		rb.ApplyForce( Vector3.Backward * 50000 );
		GameObject.PlaySound( win );
		GameObject.PlaySound( explosion );
		MechaChicken.Enabled = false;
		SDButton.Enabled = false;
		head.Enabled = false;
		body.Enabled = false;
		await Task.Delay( 500 );
		rb.GravityScale = 125;
		LoadNextLevel();

	}
	void ITriggerListener.OnTriggerExit( Collider other )
	{
		
		
	}
	async void DelayedMethod()
	{
		
		// Wait for 2 seconds
		await Task.Delay( nextLevelDelay );

		// Code to run after delay
		var options = new SceneLoadOptions();

		options.SetScene( nextscene);
		Scene.Load( options );
		Sound.StopAll( 0f );
		if (chicken.cornpoints > ScoreManager.HighScore )
		{
			ScoreManager.HighScore = chicken.cornpoints;
			Sandbox.Services.Stats.SetValue( "HighScoreLeaderboard", chicken.cornpoints );
		}
		if (newTime < ScoreManager.BestTime)
		{
		    ScoreManager.BestTime = newTime;
			Sandbox.Services.Stats.SetValue( "BestTimeLeaderboard", newTime );
		}
		
	}

	void LoadNextLevel()
	{
		DelayedMethod();
		
	}


}