File size: 2,479 Bytes
00437a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using Photon.Deterministic;
using System;
using System.Collections.Generic;

namespace Quantum
{
	public partial class AIConfig : AssetObject
	{
		public enum EValueType
		{
			None,
			Int,
			Bool,
			Byte,
			FP,
			FPVector2,
			FPVector3,
			String,
			EntityRef,
		}

		[Serializable]
		public class KeyValuePair
		{
			public string Key;
			public EValueType Type;
			public Value Value;
		}

		[Serializable]
		public struct Value
		{
			public Int32 Integer;
			public Boolean Boolean;
			public Byte Byte;
			public FP FP;
			public FPVector2 FPVector2;
			public FPVector3 FPVector3;
			public string String;
			public EntityRef EntityRef;
		}

		public int Count { get { return KeyValuePairs.Count; } }

		public AssetRefAIConfig DefaultConfig;
		public List<KeyValuePair> KeyValuePairs = new List<KeyValuePair>(32);

		public KeyValuePair Get(string key)
		{
			for (int i = 0; i < KeyValuePairs.Count; i++)
			{
				if (KeyValuePairs[i].Key == key)
					return KeyValuePairs[i];
			}

			return null;
		}

		public void Set<T>(string key, T value)
		{
			if (string.IsNullOrEmpty(key) == true)
				return;

			KeyValuePair pair = Get(key);

			if (pair == null)
			{
				pair = new KeyValuePair();
				pair.Key = key;
				KeyValuePairs.Add(pair);
			}

			Set(pair, value);
		}

		private void Set<T>(KeyValuePair pair, T value)
		{
			if (value is int intValue)
			{
				pair.Type = EValueType.Int;
				pair.Value.Integer = intValue;
			}
			else if (value is bool boolValue)
			{
				pair.Type = EValueType.Bool;
				pair.Value.Boolean = boolValue;
			}
			else if (value is Byte byteValue)
			{
				pair.Type = EValueType.Byte;
				pair.Value.Byte = byteValue;
			}
			else if (value is FP fpValue)
			{
				pair.Type = EValueType.FP;
				pair.Value.FP = fpValue;
			}
			else if (value is FPVector2 fpVector2Value)
			{
				pair.Type = EValueType.FPVector2;
				pair.Value.FPVector2 = fpVector2Value;
			}
			else if (value is FPVector3 fpVector3Value)
			{
				pair.Type = EValueType.FPVector3;
				pair.Value.FPVector3 = fpVector3Value;
			}
			else if (value is string stringValue)
			{
				pair.Type = EValueType.String;
				pair.Value.String = stringValue;
			}
			else if (value is EntityRef entityRefValue)
			{
				pair.Type = EValueType.EntityRef;
				pair.Value.EntityRef = entityRefValue;
			}
			else
			{
				throw new NotSupportedException(string.Format("AIConfig - Type not supported. Type: {0} Key: {1}", typeof(T), pair.Key));
			}
		}
	}
}