Items/Pumpkin.cs
using Clover.Interactable;
using Clover.Player;
using Clover.Ui;
namespace Clover.Items;
public class Pumpkin : DecalItem, IInteract
{
[RequireComponent] public WorldItem WorldItem { get; private set; }
[Property] public ModelRenderer ModelRenderer { get; set; }
[Property] public Material PumpkinMaterial { get; set; }
[Property, ImageAssetPath] public string PumpkinColor { get; set; }
[Property] public SpotLight SpotLight { get; set; }
public override void OnMaterialUpdate( Material material )
{
base.OnMaterialUpdate( material );
Log.Info( $"Pumpkin material updated: {TexturePath}" );
if ( !ModelRenderer.IsValid() )
{
Log.Error( "ModelRenderer is not valid" );
return;
}
if ( DecalTexture == null )
{
Log.Error( "DecalTexture is null" );
return;
}
var pumpkinMaterial = Material.Create( $"pumpkin_{TexturePath}.vmat", "shaders/pumpkin.shader" );
pumpkinMaterial.Set( "Color",
Texture.Load( FileSystem.Mounted, "items/seasonal/halloween/pumpkin_01/pumpkin_body.png" ) );
pumpkinMaterial.Set( "Emission", DecalTexture );
pumpkinMaterial.Attributes.Set( "paint", 1 );
ModelRenderer.SetMaterialOverride( pumpkinMaterial, "paint" );
if ( SpotLight.IsValid() )
{
SpotLight.Cookie = DecalTexture;
}
Log.Info( $"Pumpkin material updated, mat: {pumpkinMaterial.ResourcePath}" );
}
public void StartInteract( PlayerCharacter player )
{
// MainUi.Instance.Components.Get<PaintUi>( true ).OpenPaint( PaintUi.PaintType.Pumpkin, 128, 64, true );
if ( string.IsNullOrEmpty( TexturePath ) )
{
MainUi.Instance.Components.Get<PaintUi>( true ).OpenPaint( PaintUi.PaintType.Pumpkin, 128, 64, true );
}
else
{
MainUi.Instance.Components.Get<PaintUi>( true ).Open( TexturePath );
}
}
public string GetInteractName()
{
return "Paint";
}
}