diff --git a/README.md b/README.md index 3950f57..c42e6e4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ The language is currently **very debuggable**. It can produce readable C code wi ## Using Windows API example -* More examples can be found in /examples and /modules +* More examples can be found in /examples and /modules, especially checkout: + * examples/raymarcher.core + * examples/drawing_to_screen_using_windows_api.core ``` odin #import "KERNEL32.core" @@ -56,12 +58,19 @@ Release :: (m: *Memory) ``` -## Operator overload example +## Simple math library example (operator overloading!) ``` odin -Vec3 :: struct ;; x: F32; y: F32; z: F32 -"-" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x-b.x, a.y-b.y, a.z-b.z} -"-" :: (a: Vec3): Vec3 ;; return {-a.x, -a.y, -a.z } +Vec3 :: struct ;; x: F32; y: F32; z: F32 +Length :: (a: Vec3): F32 ;; return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z) +Negate :: (a: Vec3): Vec3 ;; return {-a.x, -a.y, -a.z} +Dot :: (a: Vec3, b: Vec3): F32 ;; return a.x*b.x + a.y*b.y + a.z*b.z +"*" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x*b.x, a.y*b.y, a.z*b.z} +"*" :: (a: Vec3, b: F32) : Vec3 ;; return {a.x*b, a.y*b, a.z*b} +"+" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x+b.x, a.y+b.y, a.z+b.z} +"/" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x/b.x, a.y/b.y, a.z/b.z} +"/" :: (a: Vec3, b: F32) : Vec3 ;; return {a.x/b, a.y/b, a.z/b} +"-" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x-b.x, a.y-b.y, a.z-b.z} ``` ## Unicode conversion example @@ -156,11 +165,7 @@ Utf8ToUtf32 :: (c: *U8, max_advance: S64): U32, S64 - [ ] Unix based - [ ] Language constructs - - [x] If - - [x] For loops - - [x] Functions - - [x] Structures - - [x] Switch (but maybe needs redesign?) + - [x] Standard constructs like if, for loop etc. - [ ] Jai like using statement - [ ] Defer statement - [ ] Unions (or something like unions) diff --git a/examples/drawing_to_screen_using_windows_api.core b/examples/drawing_to_screen_using_windows_api.core index 23e938a..184e89d 100644 --- a/examples/drawing_to_screen_using_windows_api.core +++ b/examples/drawing_to_screen_using_windows_api.core @@ -7,10 +7,8 @@ #import "WINMM.core" Vec2I :: struct;; x: S64; y: S64 -Vec2 :: struct;; x: F32; y: F32 AppIsRunning := true - Windows_Bitmap :: struct size: Vec2I data: *U32 diff --git a/modules/MathVec3.core b/modules/MathVec3.core index 5667540..c51ed7c 100644 --- a/modules/MathVec3.core +++ b/modules/MathVec3.core @@ -1,6 +1,15 @@ #import "Math.core" -Vec3 :: struct;; x: F32; y: F32; z: F32 +Vec3 :: struct ;; x: F32; y: F32; z: F32 +Length :: (a: Vec3): F32 ;; return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z) +Negate :: (a: Vec3): Vec3 ;; return {-a.x, -a.y, -a.z} +Dot :: (a: Vec3, b: Vec3): F32 ;; return a.x*b.x + a.y*b.y + a.z*b.z +"*" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x*b.x, a.y*b.y, a.z*b.z} +"*" :: (a: Vec3, b: F32) : Vec3 ;; return {a.x*b, a.y*b, a.z*b} +"+" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x+b.x, a.y+b.y, a.z+b.z} +"/" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x/b.x, a.y/b.y, a.z/b.z} +"/" :: (a: Vec3, b: F32) : Vec3 ;; return {a.x/b, a.y/b, a.z/b} +"-" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x-b.x, a.y-b.y, a.z-b.z} Cross :: (a: Vec3, b: Vec3): Vec3 result := Vec3{ @@ -29,13 +38,3 @@ ConvertToARGB :: (a: Vec3): U32 b := (a.z * 255)->U32 << 0 result := r | g | b return result - -Length :: (a: Vec3): F32 ;; return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z) -Negate :: (a: Vec3): Vec3 ;; return Vec3{-a.x, -a.y, -a.z} -Dot :: (a: Vec3, b: Vec3): F32 ;; return a.x*b.x + a.y*b.y + a.z*b.z -"*" :: (a: Vec3, b: Vec3): Vec3 ;; return Vec3{a.x*b.x, a.y*b.y, a.z*b.z} -"*" :: (a: Vec3, b: F32) : Vec3 ;; return Vec3{a.x*b, a.y*b, a.z*b} -"+" :: (a: Vec3, b: Vec3): Vec3 ;; return Vec3{a.x+b.x, a.y+b.y, a.z+b.z} -"/" :: (a: Vec3, b: Vec3): Vec3 ;; return Vec3{a.x/b.x, a.y/b.y, a.z/b.z} -"/" :: (a: Vec3, b: F32): Vec3 ;; return Vec3{a.x/b, a.y/b, a.z/b} -"-" :: (a: Vec3, b: Vec3): Vec3 ;; return Vec3{a.x-b.x, a.y-b.y, a.z-b.z}