-
Notifications
You must be signed in to change notification settings - Fork 0
/
BridgeProperty.cs
114 lines (77 loc) · 2.18 KB
/
BridgeProperty.cs
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
using SILF.Script;
using SILF.Script.Elements;
using SILF.Script.Elements.Functions;
using SILF.Script.Interfaces;
using SILF.Script.Objects;
namespace SILF.Framework;
internal class BridgeProperty : IProperty
{
public string Name { get; set; }
public Tipo? Tipo { get; set; }
public SILFObjectBase Value { get; set; }
public SILFObjectBase Parent { get; set; }
public IFunction Get { get; set; }
public IFunction Set { get; set; }
public BridgeProperty(string name, Tipo? tipo)
{
this.Name = name;
this.Tipo = tipo;
Get = new BridgeFunction((e) =>
{
return new FuncContext()
{
IsReturning = true,
Value = Value,
WaitType = Tipo,
};
})
{
Name = "get",
Parameters =
[
new Parameter("value", Tipo.Value)
]
};
Set = new BridgeFunction((e) =>
{
var value = e.LastOrDefault(t => t.Name == "value");
if (value.Objeto is SILFObjectBase obj)
Value = obj;
return new FuncContext()
{
IsReturning = true,
WaitType = new(),
};
})
{
Name = "set",
Parameters =
[
new Parameter("value", Tipo.Value)
]
};
}
public SILFObjectBase GetValue(Instance instance)
{
var result = Get.Run(instance,
[
new ParameterValue("context", Value),
new ParameterValue("parent", Parent)
], SILF.Script.Runtime.ObjectContext.GenerateContext(Parent));
return result.Value;
}
public void SetValue(Instance instance, SILFObjectBase @base)
{
Set.Run(instance, [
new ParameterValue("value", @base),
new ParameterValue("parent", Parent)
], SILF.Script.Runtime.ObjectContext.GenerateContext(Parent));
}
public IProperty Clone()
{
return new BridgeProperty(Name, Tipo);
}
public void Establish(SILFObjectBase obj)
{
}
}