Add changed item for meta manipulations to effective changes.

This commit is contained in:
Ottermandias 2022-12-20 21:18:37 +01:00
parent 6a3d214e15
commit 347e4b2023
2 changed files with 22 additions and 7 deletions

View file

@ -474,25 +474,40 @@ public partial class ModCollection
// Skip IMCs because they would result in far too many false-positive items,
// since they are per set instead of per item-slot/item/variant.
var identifier = Penumbra.Identifier;
foreach( var (resolved, modPath) in ResolvedFiles.Where( file => !file.Key.Path.EndsWith( "imc"u8 ) ) )
var items = new SortedList< string, object? >(512);
void AddItems( IMod mod )
{
foreach( var (name, obj) in identifier.Identify( resolved.ToString() ) )
foreach( var (name, obj) in items )
{
if( !_changedItems.TryGetValue( name, out var data ) )
{
_changedItems.Add( name, ( new SingleArray< IMod >( modPath.Mod ), obj ) );
_changedItems.Add( name, ( new SingleArray< IMod >( mod ), obj ) );
}
else if( !data.Item1.Contains( modPath.Mod ) )
else if( !data.Item1.Contains( mod ) )
{
_changedItems[ name ] = ( data.Item1.Append( modPath.Mod ), obj is int x && data.Item2 is int y ? x + y : obj );
_changedItems[ name ] = ( data.Item1.Append( mod ), obj is int x && data.Item2 is int y ? x + y : obj );
}
else if( obj is int x && data.Item2 is int y )
{
_changedItems[ name ] = ( data.Item1, x + y );
}
}
items.Clear();
}
foreach( var (resolved, modPath) in ResolvedFiles.Where( file => !file.Key.Path.EndsWith( "imc"u8 ) ) )
{
identifier.Identify( items, resolved.ToString() );
AddItems( modPath.Mod );
}
foreach( var (manip, mod) in MetaManipulations )
{
Mod.ComputeChangedItems( items, manip );
AddItems( mod );
}
// TODO: Meta Manipulations
}
catch( Exception e )
{

View file

@ -397,7 +397,7 @@ public class CommandHandler : IDisposable
return false;
}
var settings = collection.Settings[ mod.Index ];
var settings = collection!.Settings[ mod.Index ];
switch( state )
{
case 0: