Main.hx 982 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #if macro
  2. import haxe.macro.Expr;
  3. #end
  4. @:forward(x)
  5. abstract Vec2(Vec2Data) to Vec2Data from Vec2Data {
  6. public inline function new(x: Float) {
  7. this = new Vec2Data(x);
  8. }
  9. @:op(a.b) macro function swizzleRead(self, name: String): ExprOf<Vec2> {
  10. return macro {
  11. var self = $self;
  12. new Vec2(self.x);
  13. }
  14. }
  15. @:op(a.b) macro function swizzleWrite(self, name: String, value: Expr): ExprOf<Vec2> {
  16. return macro ({
  17. var self = $self;
  18. var value: Vec2 = $value;
  19. self.x = value.x;
  20. value;
  21. }: Vec2);
  22. }
  23. @:op(a * b) @:commutative
  24. static inline function mulScalar(a: Vec2, b: Float): Vec2
  25. return new Vec2(a.x * b);
  26. }
  27. private class Vec2Data {
  28. public var x: Float;
  29. public inline function new(x: Float) {
  30. this.x = x;
  31. }
  32. }
  33. class Main {
  34. static function main() {
  35. var color = new Vec2(1.0);
  36. color.xy *= 0.5;
  37. }
  38. }