finally fix deserialization of the new format

This commit is contained in:
minenice55 2022-08-21 21:57:32 -04:00
parent 9de0e1734e
commit 22335a7df7
6 changed files with 47 additions and 39 deletions

View file

@ -4,6 +4,7 @@ using System.ComponentModel;
using UnityEngine; using UnityEngine;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using HeavenStudio.Util; using HeavenStudio.Util;
@ -95,7 +96,38 @@ namespace HeavenStudio
{ {
get get
{ {
return DynamicData[propertyName]; Minigames.Minigame game = EventCaller.instance.GetMinigame(datamodel.Split(0));
Minigames.GameAction action = EventCaller.instance.GetGameAction(game, datamodel.Split(1));
Minigames.Param param = EventCaller.instance.GetGameParam(game, datamodel.Split(1), propertyName);
var type = param.parameter.GetType();
if (DynamicData.ContainsKey(propertyName))
{
var pType = DynamicData[propertyName].GetType();
if (pType == type)
{
return DynamicData[propertyName];
}
else
{
if (type == typeof(EntityTypes.Integer))
return (int) DynamicData[propertyName];
else if (type == typeof(EntityTypes.Float))
return (float) DynamicData[propertyName];
else if (type.IsEnum)
return (int) DynamicData[propertyName];
else if (pType == typeof(Newtonsoft.Json.Linq.JObject))
{
DynamicData[propertyName] = DynamicData[propertyName].ToObject(type);
return DynamicData[propertyName];
}
else
return Convert.ChangeType(DynamicData[propertyName], type);
}
}
else
{
return param.parameter;
}
} }
set set
{ {
@ -200,12 +232,12 @@ namespace HeavenStudio
{ "ease", (int) entity.ease }, { "ease", (int) entity.ease },
{ "colorA", (EntityTypes.SerializableColor) entity.colorA }, { "colorA", (Color) entity.colorA },
{ "colorB", (EntityTypes.SerializableColor) entity.colorB }, { "colorB", (Color) entity.colorB },
{ "colorC", (EntityTypes.SerializableColor) entity.colorC }, { "colorC", (Color) entity.colorC },
{ "colorD", (EntityTypes.SerializableColor) entity.colorD }, { "colorD", (Color) entity.colorD },
{ "colorE", (EntityTypes.SerializableColor) entity.colorE }, { "colorE", (Color) entity.colorE },
{ "colorF", (EntityTypes.SerializableColor) entity.colorF }, { "colorF", (Color) entity.colorF },
{ "text1", entity.text1 }, { "text1", entity.text1 },
{ "text2", entity.text2 }, { "text2", entity.text2 },

View file

@ -28,6 +28,11 @@ namespace HeavenStudio
return game.actions.Find(c => c.actionName == action); return game.actions.Find(c => c.actionName == action);
} }
public Minigames.Param GetGameParam(Minigames.Minigame game, string action, string param)
{
return GetGameAction(game, action).parameters.Find(c => c.propertyName == param);
}
public void Init() public void Init()
{ {
instance = this; instance = this;

View file

@ -118,7 +118,7 @@ namespace HeavenStudio.Editor
{ {
prefab = DropdownP; prefab = DropdownP;
} }
else if (objType == typeof(Color) || objType == typeof(EntityTypes.SerializableColor)) else if (objType == typeof(Color))
{ {
prefab = ColorP; prefab = ColorP;
} }

View file

@ -120,10 +120,10 @@ namespace HeavenStudio.Editor
); );
break; break;
case EntityTypes.SerializableColor _: // case EntityTypes.SerializableColor _:
case Color _: case Color _:
colorPreview.colorPicker.onColorChanged += _ => colorPreview.colorPicker.onColorChanged += _ =>
parameterManager.entity[propertyName] = new EntityTypes.SerializableColor { Color = colorPreview.colorPicker.color }; parameterManager.entity[propertyName] = colorPreview.colorPicker.color;
Color paramCol = parameterManager.entity[propertyName]; Color paramCol = parameterManager.entity[propertyName];

View file

@ -592,10 +592,6 @@ namespace HeavenStudio.Editor.Track
{ {
returnVal = ((EntityTypes.Float)ep[i].parameter).val; returnVal = ((EntityTypes.Float)ep[i].parameter).val;
} }
else if (propertyType == typeof(Color))
{
returnVal = new EntityTypes.SerializableColor { Color = (UnityEngine.Color) ep[i].parameter };
}
else if (propertyType.IsEnum) else if (propertyType.IsEnum)
{ {
returnVal = (int) ep[i].parameter; returnVal = (int) ep[i].parameter;

View file

@ -36,30 +36,5 @@ namespace HeavenStudio
this.max = max; this.max = max;
} }
} }
// https://answers.unity.com/questions/772235/cannot-serialize-color.html
// i am crying
[System.Serializable]
public class SerializableColor
{
public float[] colorStore = new float[4] { 1F, 1F, 1F, 1F };
public UnityEngine.Color Color
{
get { return new Color(colorStore[0], colorStore[1], colorStore[2], colorStore[3]); }
set { colorStore = new float[4] { value.r, value.g, value.b, value.a }; }
}
//makes this class usable as Color, Color normalColor = mySerializableColor;
public static implicit operator UnityEngine.Color(SerializableColor instance)
{
return instance.Color;
}
//makes this class assignable by Color, SerializableColor myColor = Color.white;
public static implicit operator SerializableColor(UnityEngine.Color color)
{
return new SerializableColor { Color = color };
}
}
} }
} }