提交 6a8e4898 编写于 作者: V Viktor Lidholt

Fixes formatting and abstraction in GameMath

上级 8bf434a0
......@@ -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';
......
......@@ -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()];
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册