Skip to content

Commit f40a415

Browse files
remake the value system for the 4th time
1 parent 1652019 commit f40a415

File tree

92 files changed

+817
-995
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+817
-995
lines changed

ArgumentSystem/Arguments/AnyValueArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public DynamicTryGet<Value> GetConvertSolution(BaseToken token)
1616
{
1717
if (token is IValueToken valToken)
1818
{
19-
return new(() => valToken.BaseValue);
19+
return new(valToken.Value);
2020
}
2121

2222
return $"Value '{token.RawRep}' does not represent any kind of value";
Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using JetBrains.Annotations;
22
using SER.ArgumentSystem.BaseArguments;
3+
using SER.Helpers.Extensions;
34
using SER.Helpers.ResultSystem;
45
using SER.TokenSystem.Tokens;
56
using SER.TokenSystem.Tokens.Interfaces;
@@ -26,30 +27,14 @@ private static TryGet<bool> ParseAsLiteral(BaseToken token)
2627
[UsedImplicitly]
2728
public DynamicTryGet<bool> GetConvertSolution(BaseToken token)
2829
{
29-
if (ParseAsLiteral(token).WasSuccessful(out var value))
30+
Result error = $"Value '{token.RawRep}' cannot be interpreted as a boolean value or condition.";
31+
if (token is not IValueToken valueToken || !valueToken.CanReturn<BoolValue>(out var get))
3032
{
31-
if (IsFunction) return new(() => ParseAsLiteral(token));
32-
return value;
33+
return error;
3334
}
34-
35-
if (token is IValueCapableToken<LiteralValue> literalValueToken)
36-
{
37-
return new(() =>
38-
{
39-
if (literalValueToken.ExactValue.HasErrored(out var error, out var valueTheGreat))
40-
{
41-
return error;
42-
}
4335

44-
if (valueTheGreat.BaseValue is not bool @bool)
45-
{
46-
return $"Value '{valueTheGreat}' retreived from {token.RawRep} is not a boolean.";
47-
}
48-
49-
return @bool;
50-
});
51-
}
52-
53-
return $"Value '{token.RawRep}' cannot be interpreted as a boolean value or condition.";
36+
return valueToken.IsConstant
37+
? new(get().OnSuccess(v => v.ExactValue))
38+
: new(() => get().OnSuccess(v => v.ExactValue));
5439
}
5540
}

ArgumentSystem/Arguments/CollectionArgument.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using JetBrains.Annotations;
22
using SER.ArgumentSystem.BaseArguments;
3+
using SER.Helpers.Extensions;
34
using SER.Helpers.ResultSystem;
45
using SER.TokenSystem.Tokens;
56
using SER.TokenSystem.Tokens.Interfaces;
6-
using SER.TokenSystem.Tokens.Variables;
7+
using SER.TokenSystem.Tokens.VariableTokens;
78
using SER.ValueSystem;
89

910
namespace SER.ArgumentSystem.Arguments;
@@ -15,11 +16,11 @@ public class CollectionArgument(string name) : Argument(name)
1516
[UsedImplicitly]
1617
public DynamicTryGet<CollectionValue> GetConvertSolution(BaseToken token)
1718
{
18-
if (token is not IValueCapableToken<CollectionValue> valueCapableToken)
19+
if (token is not IValueToken valToken || !valToken.CanReturn<CollectionValue>(out var func))
1920
{
2021
return $"Value '{token.RawRep}' does not represent a collection";
2122
}
2223

23-
return new(() => valueCapableToken.ExactValue);
24+
return new(() => func());
2425
}
2526
}

ArgumentSystem/Arguments/DoorArgument.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,19 @@ public DynamicTryGet<Door> GetConvertSolution(BaseToken token)
5050
{
5151
Result rs = $"Value '{token.RawRep}' cannot be interpreted as {InputDescription}.";
5252

53-
if (token is not IValueCapableToken<ReferenceValue> refToken)
53+
if (token is not IValueToken val || !val.CanReturn<ReferenceValue>(out var func))
5454
{
5555
return rs;
5656
}
5757

5858
return new(() =>
5959
{
60-
if (ReferenceArgument<Door>.TryParse(refToken).WasSuccessful(out var door))
60+
if (func().HasErrored(out var error, out var refVal))
61+
{
62+
return error;
63+
}
64+
65+
if (ReferenceArgument<Door>.TryParse(refVal).WasSuccessful(out var door))
6166
{
6267
return door;
6368
}

ArgumentSystem/Arguments/DoorsArgument.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using LabApi.Features.Wrappers;
55
using MapGeneration;
66
using SER.ArgumentSystem.BaseArguments;
7+
using SER.Helpers.Extensions;
78
using SER.Helpers.ResultSystem;
89
using SER.TokenSystem.Tokens;
910
using SER.TokenSystem.Tokens.Interfaces;
@@ -41,13 +42,18 @@ public DynamicTryGet<Door[]> GetConvertSolution(BaseToken token)
4142
return Door.List.Where(d => d is not ElevatorDoor).ToArray();
4243
}
4344

44-
if (token is not IValueCapableToken<ReferenceValue> refToken)
45+
if (token is not IValueToken valToken || !valToken.CanReturn<ReferenceValue>(out var get))
4546
{
4647
return rs;
4748
}
4849

4950
return new(() =>
5051
{
52+
if (get().HasErrored(out var error, out var refToken))
53+
{
54+
return error;
55+
}
56+
5157
if (ReferenceArgument<Door>.TryParse(refToken).WasSuccessful(out var door))
5258
{
5359
return new[] { door };
Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using JetBrains.Annotations;
33
using SER.ArgumentSystem.BaseArguments;
4+
using SER.Helpers.Extensions;
45
using SER.Helpers.ResultSystem;
56
using SER.TokenSystem.Tokens;
67
using SER.TokenSystem.Tokens.Interfaces;
@@ -15,25 +16,16 @@ public class DurationArgument(string name) : Argument(name)
1516
[UsedImplicitly]
1617
public DynamicTryGet<TimeSpan> GetConvertSolution(BaseToken token)
1718
{
18-
return token switch
19+
if (token is not IValueToken valueToken || valueToken.CanReturn<DurationValue>(out var get))
1920
{
20-
DurationToken durToken => durToken.Value.ExactValue,
21-
IValueCapableToken<DurationValue> capable => new(() => capable.ExactValue.OnSuccess(v => v.ExactValue)),
22-
IValueCapableToken<LiteralValue> litCapable => new(() =>
23-
{
24-
if (litCapable.ExactValue.HasErrored(out var litValError, out var literalValue))
25-
{
26-
return litValError;
27-
}
21+
return $"Value '{token.RawRep}' is not a duration.";
22+
}
2823

29-
if (literalValue.TryGetValue<DurationValue>().HasErrored(out var durValError, out var durationValue))
30-
{
31-
return durValError;
32-
}
33-
34-
return durationValue.ExactValue;
35-
}),
36-
_ => $"Value '{token.RawRep}' is not a duration."
37-
};
24+
if (valueToken.IsConstant)
25+
{
26+
return get().OnSuccess(v => v.ExactValue);
27+
}
28+
29+
return new(() => get().OnSuccess(v => v.ExactValue));
3830
}
3931
}

ArgumentSystem/Arguments/EnumArgument.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ public DynamicTryGet<object> GetConvertSolution(BaseToken token)
3838
});
3939
}
4040

41-
public static TryGet<T> Convert<T>(BaseToken token, Script script) where T : struct, Enum
41+
public static TryGet<TEnum> Convert(BaseToken token, Script script)
4242
{
43-
if (Convert(token, script, typeof(T)).HasErrored(out var error, out var value))
43+
if (Convert(token, script, typeof(TEnum)).HasErrored(out var error, out var value))
4444
{
4545
return error;
4646
}
4747

48-
return (T)value;
48+
return (TEnum)value;
4949
}
5050

5151
public static TryGet<object> Convert(BaseToken token, Script script, Type enumType)
@@ -65,6 +65,6 @@ public static TryGet<object> Convert(BaseToken token, Script script, Type enumTy
6565

6666
private TryGet<TEnum> InternalConvert(BaseToken token)
6767
{
68-
return Convert<TEnum>(token, Script);
68+
return Convert(token, Script);
6969
}
7070
}

ArgumentSystem/Arguments/ItemsArgument.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using JetBrains.Annotations;
33
using LabApi.Features.Wrappers;
44
using SER.ArgumentSystem.BaseArguments;
5+
using SER.Helpers.Extensions;
56
using SER.Helpers.ResultSystem;
67
using SER.TokenSystem.Tokens;
78
using SER.TokenSystem.Tokens.Interfaces;
@@ -31,14 +32,19 @@ public DynamicTryGet<Item[]> GetConvertSolution(BaseToken token)
3132
return Item.List.ToArray();
3233
}
3334

34-
if (token is not IValueCapableToken<ReferenceValue> refToken)
35+
if (token is not IValueToken valToken || !valToken.CanReturn<ReferenceValue>(out var get))
3536
{
3637
return rs;
3738
}
3839

3940
return new(() =>
4041
{
41-
if (ReferenceArgument<Item>.TryParse(refToken).WasSuccessful(out var item))
42+
if (get().HasErrored(out var error, out var refValue))
43+
{
44+
return error;
45+
}
46+
47+
if (ReferenceArgument<Item>.TryParse(refValue).WasSuccessful(out var item))
4248
{
4349
return new[] { item };
4450
}

ArgumentSystem/Arguments/LiteralVariableArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using SER.ArgumentSystem.BaseArguments;
33
using SER.Helpers.ResultSystem;
44
using SER.TokenSystem.Tokens;
5-
using SER.TokenSystem.Tokens.Variables;
5+
using SER.TokenSystem.Tokens.VariableTokens;
66

77
namespace SER.ArgumentSystem.Arguments;
88

ArgumentSystem/Arguments/PlayerArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using SER.Helpers.Extensions;
66
using SER.Helpers.ResultSystem;
77
using SER.TokenSystem.Tokens;
8-
using SER.TokenSystem.Tokens.Variables;
8+
using SER.TokenSystem.Tokens.VariableTokens;
99
using SER.VariableSystem.Variables;
1010

1111
namespace SER.ArgumentSystem.Arguments;

0 commit comments

Comments
 (0)