No edit summary Tag: Source edit |
No edit summary Tag: Source edit |
||
Line 8: | Line 8: | ||
using UnityEngine.AddressableAssets; |
using UnityEngine.AddressableAssets; |
||
#endif |
#endif |
||
+ | |||
namespace AC |
namespace AC |
||
{ |
{ |
||
+ | |||
[AddComponentMenu ("Adventure Creator/Save system/Remember Portrait")] |
[AddComponentMenu ("Adventure Creator/Save system/Remember Portrait")] |
||
public class RememberPortrait : Remember |
public class RememberPortrait : Remember |
||
{ |
{ |
||
+ | |||
private Char character; |
private Char character; |
||
+ | |||
public override string SaveData () |
public override string SaveData () |
||
{ |
{ |
||
Line 25: | Line 29: | ||
return Serializer.SaveScriptData<NameData> (portraitData); |
return Serializer.SaveScriptData<NameData> (portraitData); |
||
} |
} |
||
+ | |||
public override void LoadData (string stringData) |
public override void LoadData (string stringData) |
||
{ |
{ |
||
Line 44: | Line 49: | ||
} |
} |
||
} |
} |
||
+ | |||
#if AddressableIsPresent |
#if AddressableIsPresent |
||
+ | |||
private IEnumerator LoadDataFromAddressables (PortraitData data) |
private IEnumerator LoadDataFromAddressables (PortraitData data) |
||
{ |
{ |
||
Line 55: | Line 62: | ||
Addressables.Release (textureHandle); |
Addressables.Release (textureHandle); |
||
} |
} |
||
+ | |||
#endif |
#endif |
||
+ | |||
private Char Character |
private Char Character |
||
{ |
{ |
||
Line 64: | Line 73: | ||
} |
} |
||
} |
} |
||
+ | |||
} |
} |
||
+ | |||
[System.Serializable] |
[System.Serializable] |
||
public class PortraitData : RememberData |
public class PortraitData : RememberData |
||
Line 71: | Line 82: | ||
public PortraitData () { } |
public PortraitData () { } |
||
} |
} |
||
+ | |||
}</code> |
}</code> |
||
[[Category:General]] |
[[Category:General]] |
Revision as of 12:35, 10 February 2021
As of AC v1.73.0, changes made to character portrait textures (using the "Character: Change portrait" Action) are no longer saved automatically. To save such changes, attach the RememberPortrait script to the character:
using UnityEngine;
#if AddressableIsPresent
using System.Collections;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.AddressableAssets;
#endif
namespace AC
{
[AddComponentMenu ("Adventure Creator/Save system/Remember Portrait")]
public class RememberPortrait : Remember
{
private Char character;
public override string SaveData ()
{
PortraitData portraitData = new PortraitData ();
portraitData.objectID = constantID;
portraitData.savePrevented = savePrevented;
if (Character)
{
portraitData.portraitGraphic = AssetLoader.GetAssetInstanceID (Character.portraitIcon.texture);
}
return Serializer.SaveScriptData<NameData> (portraitData);
}
public override void LoadData (string stringData)
{
PortraitData data = Serializer.LoadScriptData<PortraitData> (stringData);
if (data == null) return;
SavePrevented = data.savePrevented; if (savePrevented) return;
if (Character && !string.IsNullOrEmpty (data.portraitGraphic))
{
#if AddressableIsPresent
if (KickStarter.settingsManager.saveAssetReferencesWithAddressables)
{
StartCoroutine (LoadDataFromAddressables (data));
}
else
#endif
{
Character.portraitIcon.ReplaceTexture (AssetLoader.RetrieveAsset (Character.portraitIcon.texture, data.portraitGraphic));
}
}
}
#if AddressableIsPresent
private IEnumerator LoadDataFromAddressables (PortraitData data)
{
AsyncOperationHandle<Texture> textureHandle = Addressables.LoadAssetAsync<Texture> (data.portraitGraphic);
yield return textureHandle;
if (textureHandle.Status == AsyncOperationStatus.Succeeded)
{
Character.portraitIcon.ReplaceTexture (textureHandle.Result);
}
Addressables.Release (textureHandle);
}
#endif
private Char Character
{
get
{
if (character == null) character = GetComponent <Char>();
return character;
}
}
}
[System.Serializable]
public class PortraitData : RememberData
{
public string portraitGraphic;
public PortraitData () { }
}
}