Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All package updates & migration steps will be listed in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [4.5.1] - 2025-04-29
### Fixes
- Fix support for multiple parameter managers initalized at once.

## [4.5.0] - 2025-03-18
### Added
- `InfoExists` and `HasAssignedValue` getters added to the `ParameterReference<T>`
Expand Down
1 change: 1 addition & 0 deletions Editor/CodeGeneration/Util/CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ public static string GenerateFlatBufferClassFile(IParameterInterface parameterIn
{ "interfaceName", parameterInterface.InterfaceName },
{ "flatBufferStructName", parameterInterface.FlatBufferStructName(false) },
{ "propertyTypeDicts", propertyTypeDicts },
{ "parameterManagerType", nameof(IParameterManager) },
};
var fileName = parameterInterface.FlatBufferClassName(true);
var filePath = Path.Combine(outputDirectory, fileName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,18 @@ public override string FlatBufferPropertyImplementationCode()
$" if ({OverrideFieldName} != null)\n" +
$" return new ReadOnlyListContainer<ParameterReference<{_genericType.Name}>>(\n" +
$" () => {OverrideFieldName}.Length,\n" +
$" i => new ParameterReference<{_genericType.Name}>({OverrideFieldName}[i], true));\n" +
$" i => new ParameterReference<{_genericType.Name}>(_parameterManager, {OverrideFieldName}[i], true));\n" +
$" return new ReadOnlyListContainer<ParameterReference<{_genericType.Name}>>(\n" +
$" () => _fb.{FlatBufferStructPropertyName}Length,\n" +
$" i => new ParameterReference<{_genericType.Name}>(_fb.{FlatBufferStructPropertyName}(i)));\n" +
$" i => new ParameterReference<{_genericType.Name}>(_parameterManager, _fb.{FlatBufferStructPropertyName}(i)));\n" +
$" }}\n" +
$"}}";
}

public override string CSVBridgeColumnTypeText => $"{_genericType.Name}[]";

public override string CSVBridgeReadFromCSVCode(string variableName) =>
$"data.{FieldName} = {nameof(CSVValueConverter)}.ParameterReferenceArray.FromString<{_genericType.Name}>({variableName});";
$"data.{FieldName} = {nameof(CSVValueConverter)}.ParameterReferenceArray.FromString<{_genericType.Name}>(parameterManager, {variableName});";

public override string CSVBridgeUpdateCSVRowCode(string variableName) =>
$"{variableName} = {nameof(CSVValueConverter)}.ParameterReferenceArray.ToString<{_genericType.Name}>(data.{FieldName});";
Expand Down
4 changes: 2 additions & 2 deletions Editor/Common/PropertyTypes/ParameterReferencePropertyType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public override string FlatBufferPropertyImplementationCode()
{
var referenceClassName = SanitizedPropertyTypeName();
return
$"public {referenceClassName}<{_genericType.Name}> {PropertyName} => {OverrideFieldName} ?? new {referenceClassName}<{_genericType.Name}>(_fb.{FlatBufferStructPropertyName});";
$"public {referenceClassName}<{_genericType.Name}> {PropertyName} => {OverrideFieldName} ?? new {referenceClassName}<{_genericType.Name}>(_parameterManager, _fb.{FlatBufferStructPropertyName});";
}

public override string FlatBufferEditPropertyCode(string variableName) =>
Expand Down Expand Up @@ -74,6 +74,6 @@ void IPropertyType.DefineFlatBufferSchema(SchemaBuilder schemaBuilder, string ta
}

private string FromStringCode(string variableName) =>
$"{nameof(CSVValueConverter)}.{TypeString()}.FromString<{_genericType.Name}>({variableName})";
$"{nameof(CSVValueConverter)}.{TypeString()}.FromString<{_genericType.Name}>(parameterManager, {variableName})";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ public override string FlatBufferPropertyImplementationCode()
$" if ({OverrideFieldName} != null)\n" +
$" return new ReadOnlyListContainer<ParameterStructReference<{_genericType.Name}>>(\n" +
$" () => {OverrideFieldName}.Length,\n" +
$" i => new ParameterStructReferenceRuntime<{_genericType.Name}>({OverrideFieldName}[i]));\n" +
$" i => new ParameterStructReferenceRuntime<{_genericType.Name}>(_parameterManager, {OverrideFieldName}[i]));\n" +
$" return new ReadOnlyListContainer<ParameterStructReference<{_genericType.Name}>>(\n" +
$" () => _fb.{FlatBufferStructPropertyName}Length,\n" +
$" i => new ParameterStructReferenceRuntime<{_genericType.Name}>(_fb.{FlatBufferStructPropertyName}(i)));\n" +
$" i => new ParameterStructReferenceRuntime<{_genericType.Name}>(_parameterManager, _fb.{FlatBufferStructPropertyName}(i)));\n" +
$" }}\n" +
$"}}";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public override string FlatBufferPropertyImplementationCode()
{
var referenceClassName = SanitizedPropertyTypeName();
return
$"public {referenceClassName}<{_genericType.Name}> {PropertyName} => new ParameterStructReferenceRuntime<{_genericType.Name}>(_fb.{FlatBufferStructPropertyName});";
$"public {referenceClassName}<{_genericType.Name}> {PropertyName} => new ParameterStructReferenceRuntime<{_genericType.Name}>(_parameterManager, _fb.{FlatBufferStructPropertyName});";
}

public override string FlatBufferEditPropertyCode(string variableName) =>
Expand Down
4 changes: 4 additions & 0 deletions Editor/Common/Templates/CSVBridge_Info.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using PocketGems.Parameters;
using PocketGems.Parameters.Common.DataTypes.Editor;
using PocketGems.Parameters.DataGeneration.LocalCSV.Editor;
using PocketGems.Parameters.DataGeneration.Util.Editor;
Expand Down Expand Up @@ -57,6 +58,9 @@ namespace {{namespace}}
{
if (_scriptableObjectMetadatas == null)
return;
// parameter manager is used for the Info/Struct references but doesn't need to be
// assigned since we're only reading for serialization, not runtime
IParameterManager parameterManager = null;
var keyPathBuilder = new StructKeyPathBuilder();
var csvFile = _infoCSVFileCache.Load<{{interface.InterfaceName}}>();
_currentCSVFile = csvFile;
Expand Down
4 changes: 4 additions & 0 deletions Editor/Common/Templates/CSVBridge_Struct.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using PocketGems.Parameters;
using PocketGems.Parameters.Common.DataTypes.Editor;
using PocketGems.Parameters.DataGeneration.LocalCSV.Editor;
using PocketGems.Parameters.DataGeneration.Util.Editor;
Expand Down Expand Up @@ -58,6 +59,9 @@ namespace {{namespace}}
{
try
{
// parameter manager is used for the Info/Struct references but doesn't need to be
// assigned since we're only reading for serialization, not runtime
IParameterManager parameterManager = null;
var keyPath = keyPathBuilder.KeyPath();
_currentStructPath = keyPath;
var csvRow = _structCSVFileCache.LoadRow<{{interface.InterfaceName}}>(keyPath);
Expand Down
4 changes: 2 additions & 2 deletions Editor/Common/Templates/DataLoader.template
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ namespace {{namespace}}
for (int i = 0; i < infoLength; i++)
{
var parameter = collection.{{interface.FlatBufferStructName}}(i).Value;
var wrapper = new {{interface.FlatBufferClassName}}(parameter);
var wrapper = new {{interface.FlatBufferClassName}}(parameterManager, parameter);
var identifier = wrapper.Identifier; // use the Identifier from the wrapper to pre-cache the field
var guid = parameter.GUID;
{{~for baseInterface in interface.BaseInterfaceNames~}}
Expand All @@ -55,7 +55,7 @@ namespace {{namespace}}
for (int i = 0; i < structLength; i++)
{
var parameter = collection.{{interface.FlatBufferStructName}}(i).Value;
var wrapper = new {{interface.FlatBufferClassName}}(parameter);
var wrapper = new {{interface.FlatBufferClassName}}(parameterManager, parameter);
parameterManager.Load<{{interface.InterfaceName}}, {{interface.FlatBufferClassName}}>(wrapper, parameter.GUID);
}
{{~end~}}
Expand Down
6 changes: 4 additions & 2 deletions Editor/Common/Templates/FlatBufferClass.template
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ namespace {{namespace}}
{
#region private fields

private {{parameterManagerType}} _parameterManager;
private {{flatBufferStructName}} _fb;
{{~
for propertyTypeDict in propertyTypeDicts
Expand All @@ -38,9 +39,10 @@ end

#endregion

public {{className}}({{flatBufferStructName}} fb)
public {{className}}({{parameterManagerType}} parameterManager, {{flatBufferStructName}} fb)
{
_fb = fb;
_parameterManager = parameterManager;
}

{{~if isInfo~}}
Expand All @@ -60,7 +62,7 @@ end

#region mutation

public bool EditProperty(string propertyName, string value, out string error)
public bool EditProperty(IParameterManager parameterManager, string propertyName, string value, out string error)
{
error = null;
try
Expand Down
2 changes: 1 addition & 1 deletion Runtime/Interface/IMutableParameter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace PocketGems.Parameters.Interface
{
public interface IMutableParameter
{
bool EditProperty(string propertyName, string value, out string error);
bool EditProperty(IParameterManager parameterManager, string propertyName, string value, out string error);
void RemoveAllEdits();
}
}
12 changes: 6 additions & 6 deletions Runtime/LocalCSV/CSVValueConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,11 @@ public static string ToString<T>(ParameterReference<T> value)
}
#endif

public static ParameterReference<T> FromString<T>(string value)
public static ParameterReference<T> FromString<T>(IParameterManager parameterManager, string value)
where T : class, IBaseInfo
{
if (string.IsNullOrWhiteSpace(value))
return new ParameterReference<T>();
return new ParameterReference<T>(parameterManager);
#if UNITY_EDITOR
if (ScriptableObjectLookupCache.Enabled)
{
Expand All @@ -254,7 +254,7 @@ public static ParameterReference<T> FromString<T>(string value)
var asset = AssetDatabase.LoadAssetAtPath<ScriptableObject>(path);
if (asset != null && asset.name == value && asset is T)
{
return new ParameterReference<T>(data[i].Item1);
return new ParameterReference<T>(parameterManager, data[i].Item1);
}
}
}
Expand All @@ -268,7 +268,7 @@ public static ParameterReference<T> FromString<T>(string value)
var asset = AssetDatabase.LoadAssetAtPath<ScriptableObject>(path);
if (asset != null && asset.name == value && asset is T)
{
return new ParameterReference<T>(guids[i]);
return new ParameterReference<T>(parameterManager, guids[i]);
}
}
}
Expand Down Expand Up @@ -352,7 +352,7 @@ public static string ToString<T>(ParameterReference<T>[] value)
}
#endif

public static ParameterReference<T>[] FromString<T>(string value)
public static ParameterReference<T>[] FromString<T>(IParameterManager parameterManager, string value)
where T : class, IBaseInfo
{
// must return a non null value so we can detect overriding of properties by checking non null
Expand All @@ -361,7 +361,7 @@ public static ParameterReference<T>[] FromString<T>(string value)
var strings = value.Split(ListDelimiter);
var assetRefs = new ParameterReference<T>[strings.Length];
for (int i = 0; i < strings.Length; i++)
assetRefs[i] = ParameterReference.FromString<T>(strings[i]);
assetRefs[i] = ParameterReference.FromString<T>(parameterManager, strings[i]);
return assetRefs;
}
}
Expand Down
2 changes: 1 addition & 1 deletion Runtime/ParameterManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void Error(string error)
}

_overriddenParameters.Add(mutableParameter);
if (!mutableParameter.EditProperty(propertyName, value, out string error))
if (!mutableParameter.EditProperty(this, propertyName, value, out string error))
Error(
$"Error editing ({interfaceType})[{identifierOrGuid}] property [{propertyName}] with value [{value}]: {error}");
}
Expand Down
52 changes: 31 additions & 21 deletions Runtime/ParameterReference.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,29 +41,28 @@ protected ParameterReference(string value, bool isIdentifier)
[Serializable]
public class ParameterReference<T> : ParameterReference, IComparable<ParameterReference<T>> where T : class, IBaseInfo
{
public ParameterReference(string value = null, bool isIdentifier = false) : base(value, isIdentifier)
private readonly IParameterManager _parameterManager;
private readonly bool _createdWithConstructor;

public ParameterReference(IParameterManager parameterManager, string value = null, bool isIdentifier = false) : base(value, isIdentifier)
{
_parameterManager = parameterManager;
_createdWithConstructor = true;
}

[Obsolete("Use other ParameterReference() constructor.")]
public ParameterReference(string value = null, bool isIdentifier = false) : this(Params.ParameterManager, value, isIdentifier) { }

public override string ToString()
{
string description;
if (string.IsNullOrWhiteSpace(guid) && string.IsNullOrWhiteSpace(_identifier))
{
description = "not assigned";
}
else if (Info == null)
{
if (!string.IsNullOrWhiteSpace(_identifier))
description = $"missing asset for identifier {_identifier}";
else
description = $"missing asset for GUID {guid}";
}
string description = null;
if (!string.IsNullOrWhiteSpace(guid) && string.IsNullOrWhiteSpace(_identifier))
description = $"guid: {guid}";
else if (!string.IsNullOrWhiteSpace(_identifier))
description = $"identifier: {_identifier}";
else
{
description = $"{Info.Identifier}({guid})";
}
return $"{GetType().Name}<{typeof(T).Name}>: {description}";
description = "not assigned";
return $"{GetType().Name}<{typeof(T).Name}> {description}";
}

public int CompareTo(ParameterReference<T> other)
Expand Down Expand Up @@ -100,13 +99,24 @@ public T Info
return GetInfo(EditorParams.ParameterManager);
}
#endif
if (Params.ParameterManager == null)

var parameterManager = _parameterManager;
if (parameterManager == null)
{
Debug.LogError("Fetching Info before ParamsSetup.Setup() has been called.");
return null;
if (_createdWithConstructor)
{
Debug.LogError($"No {nameof(_parameterManager)} set in {nameof(ParameterReference)}<{typeof(T).Name}>");
return null;
}
if (Params.ParameterManager == null)
{
Debug.LogError("Fetching Info before ParamsSetup.Setup() has been called.");
return null;
}
parameterManager = Params.ParameterManager;
}

return GetInfo(Params.ParameterManager);
return GetInfo(parameterManager);
}
}

Expand Down
29 changes: 17 additions & 12 deletions Runtime/ParameterStructReference.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using PocketGems.Parameters.Interface;
using UnityEngine;
#if UNITY_EDITOR
Expand All @@ -19,8 +20,11 @@ protected ParameterStructReference(string guid)

public abstract class ParameterStructReference<T> : ParameterStructReference where T : class, IBaseStruct
{
protected ParameterStructReference(string guid) : base(guid)
private readonly IParameterManager _parameterManager;

protected ParameterStructReference(IParameterManager parameterManager, string guid) : base(guid)
{
_parameterManager = parameterManager;
}

public T Struct
Expand All @@ -35,13 +39,7 @@ public T Struct
return GetStruct(EditorParams.ParameterManager);
}
#endif
if (Params.ParameterManager == null)
{
Debug.LogError("Fetching Struct before ParamsSetup.Setup() has been called.");
return null;
}

return GetStruct(Params.ParameterManager);
return GetStruct(_parameterManager);
}
}

Expand All @@ -51,9 +49,9 @@ public T Struct
#if UNITY_EDITOR
public class ParameterStructReferenceEditor<T> : ParameterStructReference<T> where T : class, IBaseStruct
{
private T _struct;
private readonly T _struct;

public ParameterStructReferenceEditor(T @struct) : base(null)
public ParameterStructReferenceEditor(T @struct) : base(null, null)
{
_struct = @struct;
}
Expand All @@ -64,10 +62,17 @@ public ParameterStructReferenceEditor(T @struct) : base(null)

public class ParameterStructReferenceRuntime<T> : ParameterStructReference<T> where T : class, IBaseStruct
{
public ParameterStructReferenceRuntime(string guid) : base(guid)
public ParameterStructReferenceRuntime(IParameterManager parameterManager, string guid) : base(parameterManager, guid)
{
if (parameterManager == null)
{
Debug.LogError($"Must provide {nameof(IParameterManager)} when constructing {nameof(ParameterStructReference)}.");
}
}

[Obsolete("Use other ParameterStructReferenceRuntime() constructor.")]
public ParameterStructReferenceRuntime(string guid) : this(Params.ParameterManager, guid) { }

public override string ToString()
{
string description = _guid;
Expand All @@ -84,6 +89,6 @@ public override string ToString()
}


internal override T GetStruct(IParameterManager parameterManager) => parameterManager.GetStructWithGuid<T>(_guid);
internal override T GetStruct(IParameterManager parameterManager) => parameterManager?.GetStructWithGuid<T>(_guid);
}
}
Loading
Loading