73 lines
1.6 KiB
C#
73 lines
1.6 KiB
C#
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using Godot;
|
||
|
using System;
|
||
|
|
||
|
|
||
|
|
||
|
namespace Rokojori
|
||
|
{
|
||
|
[Tool]
|
||
|
[GlobalClass]
|
||
|
public partial class SetBakingMaterials:RJAction
|
||
|
{
|
||
|
[Export]
|
||
|
public Node targetContainer;
|
||
|
|
||
|
public enum BakingMaterialMode
|
||
|
{
|
||
|
Albedo,
|
||
|
Normals,
|
||
|
ORM,
|
||
|
Depth
|
||
|
}
|
||
|
|
||
|
[Export]
|
||
|
public BakingMaterialMode mode;
|
||
|
|
||
|
public override void _OnTrigger()
|
||
|
{
|
||
|
var baseMaterial = GetBaseMaterial();
|
||
|
|
||
|
Nodes.ForEach<VisualInstance3D>( targetContainer,
|
||
|
( v )=>
|
||
|
{
|
||
|
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
public static readonly string materialsPath = "res://addons/rokojori_action_library/External/Imposter/materials/";
|
||
|
static Dictionary<string,Material> _cachedMaterials = new Dictionary<string, Material>();
|
||
|
|
||
|
public static Material LoadMaterial( string materialName )
|
||
|
{
|
||
|
if ( _cachedMaterials.ContainsKey( materialName ) )
|
||
|
{
|
||
|
return _cachedMaterials[ materialName ];
|
||
|
}
|
||
|
|
||
|
var loadedMaterial = ResourceLoader.Load( materialsPath + materialName ) as Material;
|
||
|
_cachedMaterials[ materialName ] = loadedMaterial;
|
||
|
|
||
|
return loadedMaterial;
|
||
|
}
|
||
|
|
||
|
public Material GetBaseMaterial()
|
||
|
{
|
||
|
switch ( mode )
|
||
|
{
|
||
|
case BakingMaterialMode.Albedo: return LoadMaterial( "albedo_material.material" );
|
||
|
case BakingMaterialMode.Normals: return LoadMaterial( "normal_baker.material" );
|
||
|
case BakingMaterialMode.ORM: return LoadMaterial( "orm_baker.material" );
|
||
|
case BakingMaterialMode.Depth: return LoadMaterial( "depth_baker.material" );
|
||
|
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|