2023-02-18 04:34:40 +01:00
|
|
|
export module kym;
|
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
import coral;
|
|
|
|
import coral.math;
|
2023-02-18 04:34:40 +01:00
|
|
|
|
|
|
|
export namespace kym {
|
|
|
|
enum class value_type {
|
|
|
|
nil,
|
|
|
|
boolean,
|
|
|
|
integer,
|
|
|
|
scalar,
|
|
|
|
vector2,
|
|
|
|
vector3,
|
|
|
|
object,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct value {
|
|
|
|
value_type type;
|
|
|
|
|
|
|
|
union {
|
|
|
|
bool boolean;
|
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
coral::i64 integer;
|
2023-02-18 04:34:40 +01:00
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
coral::f64 scalar;
|
2023-02-18 04:34:40 +01:00
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
coral::vector2 vector2;
|
2023-02-18 04:34:40 +01:00
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
coral::vector3 vector3;
|
2023-02-18 04:34:40 +01:00
|
|
|
|
|
|
|
void * object;
|
|
|
|
} as;
|
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
coral::optional<coral::u16> as_u16() const {
|
2023-02-18 04:34:40 +01:00
|
|
|
if ((this->type == value_type::integer) &&
|
2023-02-19 17:50:29 +01:00
|
|
|
(this->as.integer >= 0) && (this->as.integer <= coral::u16_max)) {
|
2023-02-18 04:34:40 +01:00
|
|
|
|
2023-02-19 17:50:29 +01:00
|
|
|
return static_cast<coral::u16>(this->as.integer);
|
2023-02-18 04:34:40 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
value nil = {
|
|
|
|
.type = value_type::nil,
|
|
|
|
.as = {.object = nullptr},
|
|
|
|
};
|
|
|
|
};
|