Skip to content

Commit a61c960

Browse files
fix: Properly calculate rotation in xyz_to_quaternion
1 parent 5867e17 commit a61c960

File tree

7 files changed

+65
-30
lines changed

7 files changed

+65
-30
lines changed

data/mcanim/functions/load.mcfunction

100644100755
File mode changed.
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
1-
scoreboard players set .w mcanim.maths.xyz_to_quaternion 100
1+
scoreboard players set $w mcanim.maths.xyz_to_quaternion 1000000
22

3-
execute store result score .in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.x 100
3+
execute store result score $in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.x 0.5
44

5-
function mcanim:maths/xyz_to_quaternion/calculation/transform
5+
function mcanim:utils/sin
66

7-
scoreboard players operation .x mcanim.maths.xyz_to_quaternion = .out mcanim.utils.maths
7+
scoreboard players operation $x mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
8+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
9+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion *= $out mcanim.utils.maths
10+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion -= $temp mcanim.maths.xyz_to_quaternion
811

912

10-
execute store result score .in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.y 100
13+
execute store result score $in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.y 0.5
1114

12-
function mcanim:maths/xyz_to_quaternion/calculation/transform
15+
function mcanim:utils/sin
1316

14-
scoreboard players operation .y mcanim.maths.xyz_to_quaternion = .out mcanim.utils.maths
17+
scoreboard players operation $y mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
18+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
19+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion *= $out mcanim.utils.maths
20+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion -= $temp mcanim.maths.xyz_to_quaternion
1521

1622

17-
execute store result score .in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.z 100
23+
execute store result score $in mcanim.utils.maths run data get storage mcanim:maths/xyz_to_quaternion target.z 0.5
1824

19-
function mcanim:maths/xyz_to_quaternion/calculation/transform
25+
function mcanim:utils/sin
2026

21-
scoreboard players operation .z mcanim.maths.xyz_to_quaternion = .out mcanim.utils.maths
27+
scoreboard players operation $z mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
28+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion = $out mcanim.utils.maths
29+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion *= $out mcanim.utils.maths
30+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion -= $temp mcanim.maths.xyz_to_quaternion
2231

2332
function mcanim:maths/xyz_to_quaternion/calculation/set_w
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
scoreboard players operation .in mcanim.utils.maths = .w mcanim.maths.xyz_to_quaternion
2-
scoreboard players set .is_negative mcanim.maths.xyz_to_quaternion 0
3-
execute if score .in mcanim.utils.maths matches ..-1 run scoreboard players set .is_negative mcanim.maths.xyz_to_quaternion 1
4-
execute if score .is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .in mcanim.utils.maths *= #-1 mcanim.utils.constants
1+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion /= #100 mcanim.utils.constants
2+
scoreboard players operation .in mcanim.utils.maths = $w mcanim.maths.xyz_to_quaternion
3+
scoreboard players set $is_negative mcanim.maths.xyz_to_quaternion 0
4+
execute if score .in mcanim.utils.maths matches ..-1 run scoreboard players set $is_negative mcanim.maths.xyz_to_quaternion 1
5+
execute if score $is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .in mcanim.utils.maths *= #-1 mcanim.utils.constants
56
function mcanim:utils/sqrt
6-
execute if score .is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .out mcanim.utils.maths *= #-1 mcanim.utils.constants
7-
scoreboard players operation .w mcanim.maths.xyz_to_quaternion = .out mcanim.utils.maths
7+
execute if score $is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .out mcanim.utils.maths *= #-1 mcanim.utils.constants
8+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion = .out mcanim.utils.maths
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
scoreboard players operation .in mcanim.utils.maths /= #180 mcanim.utils.constants
1+
scoreboard players operation $temp mcanim.maths.xyz_to_quaternion = $in mcanim.utils.maths
2+
execute if score $temp mcanim.maths.xyz_to_quaternion matches ..-1 run scoreboard players operation $temp mcanim.maths.xyz_to_quaternion *= #-1 mcanim.utils.constants
3+
scoreboard players operation $w mcanim.maths.xyz_to_quaternion -= $temp mcanim.maths.xyz_to_quaternion
24

3-
scoreboard players operation #temp mcanim.maths.xyz_to_quaternion = .in mcanim.utils.maths
4-
execute if score #temp mcanim.maths.xyz_to_quaternion matches ..-1 run scoreboard players operation #temp mcanim.maths.xyz_to_quaternion *= #-1 mcanim.utils.constants
5-
scoreboard players operation .w mcanim.maths.xyz_to_quaternion -= #temp mcanim.maths.xyz_to_quaternion
6-
7-
scoreboard players set .is_negative mcanim.maths.xyz_to_quaternion 0
8-
execute if score .in mcanim.utils.maths matches ..-1 run scoreboard players set .is_negative mcanim.maths.xyz_to_quaternion 1
9-
execute if score .is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .in mcanim.utils.maths *= #-1 mcanim.utils.constants
5+
scoreboard players set $is_negative mcanim.maths.xyz_to_quaternion 0
6+
execute if score $in mcanim.utils.maths matches ..-1 run scoreboard players set $is_negative mcanim.maths.xyz_to_quaternion 1
7+
execute if score $is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation $in mcanim.utils.maths *= #-1 mcanim.utils.constants
108
function mcanim:utils/sqrt
11-
execute if score .is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation .out mcanim.utils.maths *= #-1 mcanim.utils.constants
9+
execute if score $is_negative mcanim.maths.xyz_to_quaternion matches 1 run scoreboard players operation $out mcanim.utils.maths *= #-1 mcanim.utils.constants
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
data modify storage mcanim:api/maths/xyz_to_quaternion output set value [0f,0f,0f,0f]
22

3-
execute store result storage mcanim:api/maths/xyz_to_quaternion output[0] float 0.001 run scoreboard players get .x mcanim.maths.xyz_to_quaternion
4-
execute store result storage mcanim:api/maths/xyz_to_quaternion output[1] float 0.001 run scoreboard players get .y mcanim.maths.xyz_to_quaternion
5-
execute store result storage mcanim:api/maths/xyz_to_quaternion output[2] float 0.001 run scoreboard players get .z mcanim.maths.xyz_to_quaternion
6-
execute store result storage mcanim:api/maths/xyz_to_quaternion output[3] float 0.001 run scoreboard players get .w mcanim.maths.xyz_to_quaternion
3+
execute store result storage mcanim:api/maths/xyz_to_quaternion output[0] float 0.001 run scoreboard players get $x mcanim.maths.xyz_to_quaternion
4+
execute store result storage mcanim:api/maths/xyz_to_quaternion output[1] float 0.0001 run scoreboard players get $y mcanim.maths.xyz_to_quaternion
5+
execute store result storage mcanim:api/maths/xyz_to_quaternion output[2] float 0.0001 run scoreboard players get $z mcanim.maths.xyz_to_quaternion
6+
execute store result storage mcanim:api/maths/xyz_to_quaternion output[3] float 0.0001 run scoreboard players get $w mcanim.maths.xyz_to_quaternion

data/mcanim/functions/objectives.mcfunction

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@ scoreboard objectives add mcanim.maths.quaternion_to_xyz dummy
66

77
scoreboard players set #-1 mcanim.utils.constants -1
88
scoreboard players set #2 mcanim.utils.constants 2
9-
scoreboard players set #10000 mcanim.utils.constants 10000
109
scoreboard players set #180 mcanim.utils.constants 180
10+
scoreboard players set #360 mcanim.utils.constants 360
11+
scoreboard players set #10000 mcanim.utils.constants 10000
12+
scoreboard players set #10 mcanim.utils.constants 10
13+
scoreboard players set #100 mcanim.utils.constants 100
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# format input
2+
scoreboard players operation $x mcanim.utils.maths = $in mcanim.utils.maths
3+
scoreboard players operation $p mcanim.utils.maths = $x mcanim.utils.maths
4+
scoreboard players operation $p mcanim.utils.maths %= #360 mcanim.utils.constants
5+
scoreboard players operation $x mcanim.utils.maths %= #180 mcanim.utils.constants
6+
7+
# term_0 = x(180-x)
8+
scoreboard players set $term_0 mcanim.utils.maths 180
9+
scoreboard players operation $term_0 mcanim.utils.maths -= $x mcanim.utils.maths
10+
scoreboard players operation $term_0 mcanim.utils.maths *= $x mcanim.utils.maths
11+
12+
# term_1 = 4000*term_0
13+
scoreboard players set $term_1 mcanim.utils.maths 4000
14+
scoreboard players operation $term_1 mcanim.utils.maths *= $term_0 mcanim.utils.maths
15+
execute if score $p mcanim.utils.maths matches 181.. run scoreboard players operation $term_1 mcanim.utils.maths *= #-1 mcanim.utils.constants
16+
17+
# term_2 = 40500-term_0
18+
scoreboard players set $term_2 mcanim.utils.maths 40500
19+
scoreboard players operation $term_2 mcanim.utils.maths -= $term_0 mcanim.utils.maths
20+
21+
# out = term_1/term_2
22+
scoreboard players operation $out mcanim.utils.maths = $term_1 mcanim.utils.maths
23+
scoreboard players operation $out mcanim.utils.maths /= $term_2 mcanim.utils.maths
24+
scoreboard players operation $out mcanim.utils.maths /= $10 mcanim.utils.constants

0 commit comments

Comments
 (0)