Adventure Creator Wikia
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 () { }
	}

}