TriggerWinFinal.cs

Component that listens for trigger entry to mark level completion. On trigger it plays sounds and particles, applies force and gravity to a rigidbody, disables renderers/colliders, records score/time, saves player data, and initiates loading the next scene after a delay.

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();
		SavePlayerInfo();
	}
	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 );
			Sandbox.Services.Achievements.Unlock( "high_score" );
		}
		if (newTime < ScoreManager.BestTime)
		{
		    ScoreManager.BestTime = newTime;
			Sandbox.Services.Stats.SetValue( "BestTimeLeaderboard", newTime );
			Sandbox.Services.Achievements.Unlock( "best_time" );
		}
		
	}

	void LoadNextLevel()
	{
		DelayedMethod();
		
	}
	private void SavePlayerInfo()
	{
		var PlayerInfo = new PlayerSaveData()
		{
			
			currentScene = chicken.currentScene,
			w1 = ScoreManager.AllWM,
			t1 = ScoreManager.AllTofu,
			highscore = chicken.highscore,
			besttime = chicken.besttime
		};

		SaveLoadSystem.SaveGame( PlayerInfo );
	}

}