From 6a8e4898757d0b3382ab445ec3475672c2b37d22 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Fri, 24 Jul 2015 12:59:08 -0700 Subject: [PATCH] Fixes formatting and abstraction in GameMath --- sky/sdk/example/game/lib/sprites.dart | 1 + sky/sdk/example/game/lib/util.dart | 75 +++++++++++++-------------- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/sky/sdk/example/game/lib/sprites.dart b/sky/sdk/example/game/lib/sprites.dart index 12a1d993d..1da06b789 100644 --- a/sky/sdk/example/game/lib/sprites.dart +++ b/sky/sdk/example/game/lib/sprites.dart @@ -7,6 +7,7 @@ library sprites; import 'dart:async'; import 'dart:convert'; import 'dart:math' as math; +import 'dart:typed_data'; import 'dart:sky'; import 'package:sky/animation/curves.dart'; diff --git a/sky/sdk/example/game/lib/util.dart b/sky/sdk/example/game/lib/util.dart index 31f79ca17..431a70162 100644 --- a/sky/sdk/example/game/lib/util.dart +++ b/sky/sdk/example/game/lib/util.dart @@ -19,67 +19,64 @@ int randomInt(int max) { // atan2 -class GameMath { - static bool _inited = false; - - static final int size = 1024; - static final double stretch = math.PI; - - static final int ezis = -size; - - static Float64List atan2_table_ppy = new Float64List(size + 1); - static Float64List atan2_table_ppx = new Float64List(size + 1); - static Float64List atan2_table_pny = new Float64List(size + 1); - static Float64List atan2_table_pnx = new Float64List(size + 1); - static Float64List atan2_table_npy = new Float64List(size + 1); - static Float64List atan2_table_npx = new Float64List(size + 1); - static Float64List atan2_table_nny = new Float64List(size + 1); - static Float64List atan2_table_nnx = new Float64List(size + 1); - - static void init() { - if (_inited) return; +class _Atan2Constants { + _Atan2Constants() { for (int i = 0; i <= size; i++) { double f = i.toDouble() / size.toDouble(); - atan2_table_ppy[i] = math.atan(f) * stretch / math.PI; - atan2_table_ppx[i] = stretch * 0.5 - atan2_table_ppy[i]; - atan2_table_pny[i] = -atan2_table_ppy[i]; - atan2_table_pnx[i] = atan2_table_ppy[i] - stretch * 0.5; - atan2_table_npy[i] = stretch - atan2_table_ppy[i]; - atan2_table_npx[i] = atan2_table_ppy[i] + stretch * 0.5; - atan2_table_nny[i] = atan2_table_ppy[i] - stretch; - atan2_table_nnx[i] = -stretch * 0.5 - atan2_table_ppy[i]; + ppy[i] = math.atan(f) * stretch / math.PI; + ppx[i] = stretch * 0.5 - ppy[i]; + pny[i] = -ppy[i]; + pnx[i] = ppy[i] - stretch * 0.5; + npy[i] = stretch - ppy[i]; + npx[i] = ppy[i] + stretch * 0.5; + nny[i] = ppy[i] - stretch; + nnx[i] = -stretch * 0.5 - ppy[i]; } - _inited = true; } - static double atan2(double y, double x) { - if (!_inited) - init(); + static const int size = 1024; + static const double stretch = math.PI; + static const int ezis = -size; + + final Float64List ppy = new Float64List(size + 1); + final Float64List ppx = new Float64List(size + 1); + final Float64List pny = new Float64List(size + 1); + final Float64List pnx = new Float64List(size + 1); + final Float64List npy = new Float64List(size + 1); + final Float64List npx = new Float64List(size + 1); + final Float64List nny = new Float64List(size + 1); + final Float64List nnx = new Float64List(size + 1); +} + +class GameMath { + static final _Atan2Constants _atan2 = new _Atan2Constants(); + + static double atan2(double y, double x) { if (x >= 0) { if (y >= 0) { if (x >= y) - return atan2_table_ppy[(size * y / x + 0.5).toInt()]; + return _atan2.ppy[(_Atan2Constants.size * y / x + 0.5).floor()]; else - return atan2_table_ppx[(size * x / y + 0.5).toInt()]; + return _atan2.ppx[(_Atan2Constants.size * x / y + 0.5).floor()]; } else { if (x >= -y) - return atan2_table_pny[(ezis * y / x + 0.5).toInt()]; + return _atan2.pny[(_Atan2Constants.ezis * y / x + 0.5).floor()]; else - return atan2_table_pnx[(ezis * x / y + 0.5).toInt()]; + return _atan2.pnx[(_Atan2Constants.ezis * x / y + 0.5).floor()]; } } else { if (y >= 0) { if (-x >= y) - return atan2_table_npy[(ezis * y / x + 0.5).toInt()]; + return _atan2.npy[(_Atan2Constants.ezis * y / x + 0.5).floor()]; else - return atan2_table_npx[(ezis * x / y + 0.5).toInt()]; + return _atan2.npx[(_Atan2Constants.ezis * x / y + 0.5).floor()]; } else { if (x <= y) - return atan2_table_nny[(size * y / x + 0.5).toInt()]; + return _atan2.nny[(_Atan2Constants.size * y / x + 0.5).floor()]; else - return atan2_table_nnx[(size * x / y + 0.5).toInt()]; + return _atan2.nnx[(_Atan2Constants.size * x / y + 0.5).floor()]; } } } -- GitLab