TriggerWin.cs

A component that listens for trigger entry to mark level completion. On trigger enter it updates score from ChickenControls, plays particles and sound, animates and applies physics to a model, increases gravity after a short delay, saves player info, and begins loading the next scene after a configurable delay.

File AccessNetworking
using Sandbox;
using static Sandbox.Resources.ResourceGenerator;

public sealed class TriggerWin : Component, Component.ITriggerListener

{
	[Property] public SkinnedModelRenderer model { get; set; }
	[Property] public Rigidbody rb { get; set; }
	[Property] public SoundEvent win { 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; }
	


	async void ITriggerListener.OnTriggerEnter( Collider other )
	{
		
		ScoreManager.CurrentScore = chicken.cornpoints;
		winparticles.Enabled = true;
		model.Set( "AnimPar", 6 );
		rb.ApplyForce( Vector3.Backward * 50000 );
		GameObject.PlaySound( win );
		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 );
		
	}
	void LoadNextLevel()
	{
		DelayedMethod();
		
	}
	private void SavePlayerInfo()
	{
		var PlayerInfo = new PlayerSaveData()
		{
			timesave = chicken.timesave,
			cornsave = ScoreManager.CurrentScore,
			currentScene = chicken.currentScene,
			w1 = ScoreManager.AllWM,
			t1 = ScoreManager.AllTofu,
			highscore = chicken.highscore,
			besttime = chicken.besttime
		};

		SaveLoadSystem.SaveGame( PlayerInfo );
	}

}