Coverage Summary for Class: Utilities (com.mygdx.utils)
Class |
Class, %
|
Method, %
|
Line, %
|
Utilities |
100%
(1/1)
|
93.8%
(15/16)
|
97%
(32/33)
|
1 package com.mygdx.utils;
2
3 import com.badlogic.gdx.math.MathUtils;
4 import com.badlogic.gdx.math.Vector2;
5
6 import java.util.ArrayList;
7 import java.util.Random;
8
9 import static com.mygdx.utils.Constants.TILE_SIZE;
10
11 /**
12 * Helper functions
13 */
14 public final class Utilities {
15 public static float vectorToAngle(Vector2 v) {
16 return (float) Math.atan2(-v.x, v.y);
17 }
18
19 public static Vector2 angleToVector(Vector2 out, float angle) {
20 out.x = -(float) Math.sin(angle);
21 out.y = (float) Math.cos(angle);
22 return out;
23 }
24
25 public static float tilesToDistance(float tiles) {
26 return TILE_SIZE * tiles;
27 }
28
29 public static Vector2 tilesToDistance(Vector2 tiles) {
30 return tiles.cpy().scl(TILE_SIZE);
31 }
32
33 public static int distanceToTiles(float dist) {
34 return (int) (dist / TILE_SIZE);
35 }
36
37 public static Vector2 distanceToTiles(Vector2 dist) {
38 return dist.cpy().scl(1.0f / TILE_SIZE);
39 }
40
41 /**
42 * checks the proximity of point a to point b
43 *
44 * @param a first point
45 * @param b second point
46 * @param radius min dist to be considered close
47 * @return |dist(a, b)| < radius
48 */
49 public static boolean checkProximity(Vector2 a, Vector2 b, float radius) {
50 final float d2 = radius * radius;
51 final float d = Math.abs(a.dst2(b));
52 return d <= d2;
53 }
54
55 public static double angleBetween(Vector2 a, Vector2 b) {
56 if(a.equals(new Vector2(0,0)) || b.equals(new Vector2(0,0))){
57 return 0;
58 }
59 float dot = Vector2.dot(a.x,a.y,b.x,b.y);
60 double absA = Math.sqrt( Math.pow(a.x,2) + Math.pow(a.y,2) );
61 double absB = Math.sqrt( Math.pow(b.x,2) + Math.pow(b.y,2) );
62
63 return Math.acos(dot/(absA*absB));
64 }
65
66 public static float scale(float min0, float max0, float min1, float max1) {
67 return (max1 - min1) * ((1 - min0) / (max0 - min0)) + min1;
68 }
69
70 public static float scale(Vector2 a, Vector2 b) {
71 return (b.y - b.x) * ((1 - a.x) / (a.y - a.x)) + b.x;
72 }
73
74 /**
75 * @param x the vector to round
76 * @return x modified for chaining
77 */
78 public static Vector2 round(Vector2 x) {
79 x.x = Math.round(x.x);
80 x.y = Math.round(x.y);
81 return x;
82 }
83
84 /**
85 * Random Vec2 in range
86 *
87 * @param min inclusive
88 * @param max exclusive
89 * @return rand Vector2
90 */
91 public static Vector2 randomPos(float min, float max) {
92 Random r = new Random();
93 return new Vector2(min + r.nextFloat() * (max - min), min + r.nextFloat() * (max - min));
94 }
95
96 /**
97 * Chooses a random element
98 *
99 * @param list source
100 * @param <T> type of element to return
101 * @return the random element
102 */
103 public static <T> T randomChoice(ArrayList<T> list) {
104 int choice = new Random().nextInt(list.size());
105 return list.get(choice);
106 }
107
108 /**
109 * floors the vector
110 *
111 * @param a given vector
112 * @return new vector floored
113 */
114 public static Vector2 floor(final Vector2 a) {
115 return new Vector2(MathUtils.floor(a.x), MathUtils.floor(a.y));
116 }
117
118 /**
119 * does array contain a
120 *
121 * @param array source
122 * @param a desired
123 * @param <T> type of element looking for
124 * @return true if contained otherwise false
125 */
126 public static <T> boolean contains(ArrayList<T> array, T a) {
127 for (T b : array) {
128 if (b == a) {
129 return true;
130 }
131 }
132 return false;
133 }
134
135 //public static void print(String v, String eol) {
136 // System.out.print(v + eol);
137 // }
138
139 //public static void print(String v) {
140 // System.out.println(v);
141 // }
142 }