| 1 | module main |
| 2 | |
| 3 | type Mat4 = [16]f32 |
| 4 | type Mat14 = [1][16]f32 |
| 5 | |
| 6 | @[heap] |
| 7 | struct GameObject { |
| 8 | mut: |
| 9 | transform Mat4 |
| 10 | transform2 Mat14 |
| 11 | } |
| 12 | |
| 13 | @[heap] |
| 14 | struct Ship { |
| 15 | GameObject |
| 16 | } |
| 17 | |
| 18 | fn Ship.new() &Ship { |
| 19 | mut ship := &Ship{} |
| 20 | return ship |
| 21 | } |
| 22 | |
| 23 | fn (mut ship Ship) clone() &Ship { |
| 24 | return &Ship{ |
| 25 | ...ship |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | fn test_main() { |
| 30 | mut v1 := Ship.new() |
| 31 | v1.transform[0] = 1.0 |
| 32 | v1.transform[15] = 2.0 |
| 33 | v1.transform2[0][0] = 1.0 |
| 34 | v1.transform2[0][15] = 2.0 |
| 35 | mut v2 := v1.clone() |
| 36 | eprintln('v1=${v1.transform}\nv2=${v2.transform}') |
| 37 | assert v1.transform == v2.transform |
| 38 | assert v1.transform2 == v2.transform2 |
| 39 | assert v1.transform[0] == 1.0 |
| 40 | assert v2.transform[0] == 1.0 |
| 41 | assert v1.transform[15] == 2.0 |
| 42 | assert v2.transform[15] == 2.0 |
| 43 | |
| 44 | assert v1.transform2[0][0] == 1.0 |
| 45 | assert v2.transform2[0][0] == 1.0 |
| 46 | assert v1.transform2[0][15] == 2.0 |
| 47 | assert v2.transform2[0][15] == 2.0 |
| 48 | } |
| 49 | |