-
Notifications
You must be signed in to change notification settings - Fork 4
/
GameCore.java
120 lines (94 loc) · 4.65 KB
/
GameCore.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package miniventure.game;
import java.util.HashMap;
import miniventure.game.texture.TextureAtlasHolder;
import miniventure.game.texture.TextureHolder;
import miniventure.game.util.Version;
import miniventure.game.util.VersionInfo;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglFiles;
import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData.Region;
import com.badlogic.gdx.math.MathUtils;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.jetbrains.annotations.NotNull;
/** @noinspection StaticNonFinalField*/
public class GameCore {
public static final Version VERSION = new Version("1.5.7");
public static final float MAX_DELTA = 0.25f; // the maximum time that the game will clamp getDeltaTime to, to prevent huge jumps after a lag spike.
public static boolean debug = false;
private static final long START_TIME = System.nanoTime();
public static final float SOUND_RADIUS = 10; // 10 tiles
public static final Color DEFAULT_CHAT_COLOR = Color.WHITE;
public static TextureAtlasHolder entityAtlas, tileAtlas;
public static TextureAtlas tileConnectionAtlas = new TextureAtlas(); // tile overlap atlas not needed b/c the overlap sprite layout is simple enough to code; it goes in binary. However, the tile connection sprite layout is more complicated, so a map is needed to compare against.
private static TextureAtlas iconAtlas;
public static final HashMap<String, TextureHolder> icons = new HashMap<>();
private static boolean initialized = false;
public static void initGdxTextures() {
if(initialized) return;
initialized = true;
entityAtlas = new TextureAtlasHolder(new TextureAtlas("sprites/entities.txt"));
tileAtlas = new TextureAtlasHolder(new TextureAtlas("sprites/tiles.txt"));
tileConnectionAtlas = new TextureAtlas("sprites/tileconnectmap.txt");
iconAtlas = new TextureAtlas("sprites/icons.txt");
//noinspection ConstantConditions
for(AtlasRegion region: iconAtlas.getRegions())
icons.put(region.name, new TextureHolder(region));
}
public static void initNonGdxTextures() {
if(initialized) return;
initialized = true;
// initialize entity atlas and icon atlas, b/c that's what the server needs to determine entity sizes (icons b/c of item entities)
LwjglNativesLoader.load();
Gdx.files = new LwjglFiles();
// maybe if I manually created a TextureAtlasData?
FileHandle spriteFolder = Gdx.files.internal("sprites");
TextureAtlasData entityData = new TextureAtlasData(spriteFolder.child("entities.txt"), spriteFolder, false);
TextureAtlasData iconData = new TextureAtlasData(spriteFolder.child("icons.txt"), spriteFolder, false);
TextureAtlasData tileData = new TextureAtlasData(spriteFolder.child("tiles.txt"), spriteFolder, false);
entityAtlas = new TextureAtlasHolder(entityData);
tileAtlas = new TextureAtlasHolder(tileData);
for(Region region: iconData.getRegions()) {
TextureHolder tex = new TextureHolder(region);
icons.put(tex.name, tex);
}
}
public static void dispose () {
entityAtlas.dispose();
tileAtlas.dispose();
tileConnectionAtlas.dispose();
iconAtlas.dispose();
}
public static float getDeltaTime() { return MathUtils.clamp(Gdx.graphics.getDeltaTime(), 0, MAX_DELTA); }
public static float getElapsedProgramTime() { return (System.nanoTime() - START_TIME)/1E9f; }
private static VersionInfo latestVersion = null;
public static boolean determinedLatestVersion() { return latestVersion != null; }
@NotNull
public static VersionInfo getLatestVersion() {
if(latestVersion != null)
return latestVersion;
// fetch the latest version from github
try {
HttpResponse<JsonNode> response = Unirest.get("https://api.github.com/repos/chrisj42/miniventure/releases").asJson();
if(response.getStatus() != 200) {
System.err.println("version request returned status code "+response.getStatus()+": "+response.getStatusText());
System.err.println("response body: "+response.getBody());
return latestVersion = new VersionInfo(VERSION, "", "");
}
else {
return latestVersion = new VersionInfo(response.getBody().getArray().getJSONObject(0));
}
} catch(UnirestException e) {
e.printStackTrace();
return latestVersion = new VersionInfo(VERSION, "", "");
}
}
}