add camera system and optimize y sorting for rendering
This commit is contained in:
@@ -6,357 +6,357 @@ filter: Nearest, Nearest
|
||||
repeat: none
|
||||
chest/chest
|
||||
rotate: false
|
||||
xy: 2, 2
|
||||
xy: 482, 237
|
||||
size: 16, 16
|
||||
orig: 16, 16
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
house/house
|
||||
rotate: false
|
||||
xy: 2, 142
|
||||
xy: 2, 141
|
||||
size: 80, 112
|
||||
orig: 80, 112
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
oak_tree/oak_tree
|
||||
rotate: false
|
||||
xy: 2, 58
|
||||
size: 64, 80
|
||||
orig: 64, 80
|
||||
xy: 2, 74
|
||||
size: 41, 63
|
||||
orig: 41, 63
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 86, 222
|
||||
xy: 86, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 2, 22
|
||||
xy: 2, 38
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 86, 186
|
||||
xy: 47, 105
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 122, 222
|
||||
xy: 86, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 86, 150
|
||||
xy: 122, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/idle_down
|
||||
rotate: false
|
||||
xy: 122, 186
|
||||
xy: 2, 2
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 158, 222
|
||||
xy: 86, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 122, 150
|
||||
xy: 122, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 158, 186
|
||||
xy: 158, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 194, 222
|
||||
xy: 122, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 158, 150
|
||||
xy: 158, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/idle_left
|
||||
rotate: false
|
||||
xy: 194, 186
|
||||
xy: 194, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 230, 222
|
||||
xy: 158, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 194, 150
|
||||
xy: 194, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 230, 186
|
||||
xy: 230, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 266, 222
|
||||
xy: 194, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 230, 150
|
||||
xy: 230, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/idle_right
|
||||
rotate: false
|
||||
xy: 266, 186
|
||||
xy: 266, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 302, 222
|
||||
xy: 230, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 266, 150
|
||||
xy: 266, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 302, 186
|
||||
xy: 302, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 338, 222
|
||||
xy: 266, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 302, 150
|
||||
xy: 302, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/idle_up
|
||||
rotate: false
|
||||
xy: 338, 186
|
||||
xy: 338, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 374, 222
|
||||
xy: 302, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 338, 150
|
||||
xy: 338, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 374, 186
|
||||
xy: 374, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 410, 222
|
||||
xy: 338, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 374, 150
|
||||
xy: 374, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/walk_down
|
||||
rotate: false
|
||||
xy: 410, 186
|
||||
xy: 410, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 446, 222
|
||||
xy: 374, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 410, 150
|
||||
xy: 410, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 446, 186
|
||||
xy: 446, 221
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 446, 150
|
||||
xy: 410, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 38, 22
|
||||
xy: 446, 185
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/walk_left
|
||||
rotate: false
|
||||
xy: 70, 106
|
||||
xy: 446, 149
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 70, 70
|
||||
xy: 47, 69
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 106, 114
|
||||
xy: 38, 33
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 106, 78
|
||||
xy: 74, 33
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 142, 114
|
||||
xy: 86, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 142, 78
|
||||
xy: 122, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/walk_right
|
||||
rotate: false
|
||||
xy: 178, 114
|
||||
xy: 158, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 5
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 178, 78
|
||||
xy: 194, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 0
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 214, 114
|
||||
xy: 230, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 1
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 214, 78
|
||||
xy: 266, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 2
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 250, 114
|
||||
xy: 302, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 3
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 250, 78
|
||||
xy: 338, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
index: 4
|
||||
player/walk_up
|
||||
rotate: false
|
||||
xy: 286, 114
|
||||
xy: 374, 113
|
||||
size: 32, 32
|
||||
orig: 32, 32
|
||||
offset: 0, 0
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.11" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="18" height="16" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="11">
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="18" height="16" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="11">
|
||||
<tileset firstgid="1" source="objects.tsx"/>
|
||||
<tileset firstgid="6" source="tileset.tsx"/>
|
||||
<layer id="1" name="ground" width="18" height="16">
|
||||
@@ -31,6 +31,7 @@
|
||||
<object id="9" gid="5" x="32" y="32" width="16" height="16"/>
|
||||
<object id="10" gid="2" x="25" y="214" width="32" height="32">
|
||||
<properties>
|
||||
<property name="camFollow" type="bool" value="true"/>
|
||||
<property name="controller" type="bool" value="true"/>
|
||||
</properties>
|
||||
</object>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<tile id="1" type="Object">
|
||||
<properties>
|
||||
<property name="animation" value="IDLE"/>
|
||||
<property name="speed" type="float" value="2"/>
|
||||
<property name="speed" type="float" value="3.5"/>
|
||||
</properties>
|
||||
<image source="objects/player.png" width="32" height="32"/>
|
||||
<objectgroup draworder="index" id="2">
|
||||
@@ -20,6 +20,9 @@
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="3" type="Prop">
|
||||
<properties>
|
||||
<property name="sortOffsetY" type="int" value="8"/>
|
||||
</properties>
|
||||
<image source="objects/oak_tree.png" width="64" height="80"/>
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="2" x="24" y="63">
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.1-99-gec89c545" orientation="orthogonal" renderorder="right-down" width="18" height="16" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="3">
|
||||
<tileset firstgid="1" source="tileset.tsx"/>
|
||||
<tileset firstgid="99" source="objects.tsx"/>
|
||||
<layer id="1" name="ground" width="18" height="16">
|
||||
<data encoding="base64" compression="zlib">
|
||||
eJx9k1EOgDAMQnuC0fufVj9c0jyhH426RmiBdVXpq/NWf89b7DXe3XfjHwHvGL5e+hfD9RR4Jyfx545acLjf1INcqr8W3CdhzRkFbrc3+elb0oN7J4+pjfNl027z12XM4au8rvOcZw6bnnBWzpw0Tr47zxKu67m7xDwkz1MuqWnCp5bprqQMu5mYGZfl2X8AE4YQ2w==
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="3" name="water" width="18" height="16">
|
||||
<data encoding="base64" compression="zlib">
|
||||
eJxjYBgFo2AUjIKBAQAEgAAB
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="4" name="water2" width="18" height="16">
|
||||
<data encoding="base64" compression="zlib">
|
||||
eJxjYBgFo2AUjIKBAQAEgAAB
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="2" name="props" width="18" height="16">
|
||||
<data encoding="base64" compression="zlib">
|
||||
eJxjYBgFo2AUjIKBAQAEgAAB
|
||||
</data>
|
||||
</layer>
|
||||
<objectgroup id="5" name="objects">
|
||||
<object id="2" gid="99" x="67.2153" y="411.713" width="64" height="64"/>
|
||||
</objectgroup>
|
||||
</map>
|
||||
@@ -1,6 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tileset version="1.10" tiledversion="1.11.0" name="tileset" tilewidth="16" tileheight="16" spacing="16" margin="8" tilecount="128" columns="8">
|
||||
<image source="tileset.png" width="256" height="512"/>
|
||||
<tile id="0">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="8" y="9" width="8" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="1">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="7" width="16" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="2">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="9" width="8" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="3">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="9" y="9" width="7" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="4">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="7" width="16" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="5">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="9" width="8" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="8">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="8" y="0" width="4" height="16"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="10">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="4" y="0" width="5" height="16"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="11">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="7" y="0" width="5" height="16"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="13">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="4" y="0" width="5" height="16"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="16">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="9" y="0" width="7" height="8"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="17">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="4" width="16" height="4"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="18">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="0" width="7" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="19">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="8" y="0" width="8" height="6"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="20">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="6" width="16" height="4"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="21">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="0" width="8" height="7"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="24">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="4" y="5" width="12" height="11"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="25">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="5" width="12" height="11"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="32">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="4" y="0" width="12" height="14"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<tile id="33">
|
||||
<objectgroup draworder="index" id="2">
|
||||
<object id="1" x="0" y="0" width="12" height="14"/>
|
||||
</objectgroup>
|
||||
</tile>
|
||||
<wangsets>
|
||||
<wangset name="Unnamed Set" type="corner" tile="-1">
|
||||
<wangcolor name="gras" color="#ff0000" tile="-1" probability="1"/>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 5.3 KiB |
@@ -20,8 +20,8 @@ import io.github.com.quillraven.screen.LoadingScreen;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class GdxGame extends Game {
|
||||
public static final float WORLD_HEIGHT = 11f;
|
||||
public static final float WORLD_WIDTH = 6f;
|
||||
public static final float WORLD_HEIGHT = 9f;
|
||||
public static final float WORLD_WIDTH = 16f;
|
||||
public static final float UNIT_SCALE = 1f / 16f;
|
||||
|
||||
private Batch batch;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package io.github.com.quillraven.asset;
|
||||
|
||||
public enum MapAsset {
|
||||
MAIN("mainmap.tmx"),
|
||||
SECOND("secondmap.tmx");
|
||||
MAIN("mainmap.tmx");
|
||||
|
||||
private final String path;
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package io.github.com.quillraven.component;
|
||||
|
||||
import com.badlogic.ashley.core.Component;
|
||||
|
||||
public class CameraFollow implements Component {
|
||||
}
|
||||
@@ -11,20 +11,23 @@ public class Transform implements Component, Comparable<Transform> {
|
||||
private final int z;
|
||||
private final Vector2 size;
|
||||
private final Vector2 scaling;
|
||||
private final float rotationDeg;
|
||||
private float rotationDeg;
|
||||
private float sortOffsetY;
|
||||
|
||||
public Transform(
|
||||
Vector2 position,
|
||||
int z,
|
||||
Vector2 size,
|
||||
Vector2 scaling,
|
||||
float rotationDeg
|
||||
float rotationDeg,
|
||||
float sortOffsetY
|
||||
) {
|
||||
this.position = position;
|
||||
this.z = z;
|
||||
this.size = size;
|
||||
this.scaling = scaling;
|
||||
this.rotationDeg = rotationDeg;
|
||||
this.sortOffsetY = sortOffsetY;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,8 +35,8 @@ public class Transform implements Component, Comparable<Transform> {
|
||||
if (this.z != other.z) {
|
||||
return Float.compare(this.z, other.z);
|
||||
}
|
||||
if (this.position.y != other.position.y) {
|
||||
return Float.compare(other.position.y, this.position.y);
|
||||
if (this.position.y + this.sortOffsetY != other.position.y + other.sortOffsetY) {
|
||||
return Float.compare(other.position.y + other.sortOffsetY, this.position.y + this.sortOffsetY);
|
||||
}
|
||||
return Float.compare(this.position.x, other.position.x);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import io.github.com.quillraven.component.Controller;
|
||||
import io.github.com.quillraven.input.GameControllerState;
|
||||
import io.github.com.quillraven.input.KeyboardController;
|
||||
import io.github.com.quillraven.system.AnimationSystem;
|
||||
import io.github.com.quillraven.system.CameraSystem;
|
||||
import io.github.com.quillraven.system.FacingSystem;
|
||||
import io.github.com.quillraven.system.FsmSystem;
|
||||
import io.github.com.quillraven.system.PhysicDebugRenderSystem;
|
||||
@@ -48,6 +49,7 @@ public class GameScreen extends ScreenAdapter {
|
||||
this.engine.addSystem(new FacingSystem());
|
||||
this.engine.addSystem(new FsmSystem());
|
||||
this.engine.addSystem(new AnimationSystem(game.getAssetService()));
|
||||
this.engine.addSystem(new CameraSystem(game.getCamera()));
|
||||
this.engine.addSystem(new RenderSystem(game.getBatch(), game.getViewport(), game.getCamera()));
|
||||
this.engine.addSystem(new PhysicDebugRenderSystem(this.physicWorld, game.getCamera()));
|
||||
}
|
||||
@@ -61,7 +63,8 @@ public class GameScreen extends ScreenAdapter {
|
||||
|
||||
Consumer<TiledMap> renderConsumer = this.engine.getSystem(RenderSystem.class)::setMap;
|
||||
Consumer<TiledMap> ashleySpawnerConsumer = this.tiledAshleySpawner::loadMapObjects;
|
||||
this.tiledService.setMapChangeConsumer(renderConsumer.andThen(ashleySpawnerConsumer));
|
||||
Consumer<TiledMap> cameraConsumer = this.engine.getSystem(CameraSystem.class)::setMap;
|
||||
this.tiledService.setMapChangeConsumer(renderConsumer.andThen(ashleySpawnerConsumer).andThen(cameraConsumer));
|
||||
|
||||
TiledMap startMap = this.tiledService.loadMap(MapAsset.MAIN);
|
||||
this.tiledService.setMap(startMap);
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package io.github.com.quillraven.system;
|
||||
|
||||
import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.ashley.core.Family;
|
||||
import com.badlogic.ashley.systems.IteratingSystem;
|
||||
import com.badlogic.gdx.graphics.Camera;
|
||||
import com.badlogic.gdx.maps.tiled.TiledMap;
|
||||
import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import io.github.com.quillraven.GdxGame;
|
||||
import io.github.com.quillraven.component.CameraFollow;
|
||||
import io.github.com.quillraven.component.Transform;
|
||||
|
||||
public class CameraSystem extends IteratingSystem {
|
||||
private static final float CAM_OFFSET_Y = 1f; // make the camera look up 'X' additional tiles
|
||||
|
||||
private final Camera camera;
|
||||
private final float smoothingFactor;
|
||||
private final Vector2 targetPosition;
|
||||
private float mapW;
|
||||
private float mapH;
|
||||
|
||||
public CameraSystem(Camera camera) {
|
||||
super(Family.all(CameraFollow.class, Transform.class).get());
|
||||
this.camera = camera;
|
||||
this.smoothingFactor = 4f; // lower value = slower camera follow
|
||||
this.targetPosition = new Vector2();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processEntity(Entity entity, float deltaTime) {
|
||||
Transform transform = Transform.MAPPER.get(entity);
|
||||
calcTargetPosition(transform.getPosition());
|
||||
|
||||
// Apply smoothing using linear interpolation (LERP)
|
||||
float progress = smoothingFactor * deltaTime;
|
||||
float smoothedX = MathUtils.lerp(camera.position.x, this.targetPosition.x, progress);
|
||||
float smoothedY = MathUtils.lerp(camera.position.y, this.targetPosition.y, progress);
|
||||
camera.position.set(smoothedX, smoothedY, camera.position.z);
|
||||
}
|
||||
|
||||
private void calcTargetPosition(Vector2 entityPosition) {
|
||||
// Keep the target position within map boundaries
|
||||
float targetX = entityPosition.x;
|
||||
float targetY = entityPosition.y + CAM_OFFSET_Y;
|
||||
float camHalfW = camera.viewportWidth * 0.5f;
|
||||
if (mapW > camHalfW) {
|
||||
float min = Math.min(camHalfW, mapW - camHalfW);
|
||||
float max = Math.max(camHalfW, mapW - camHalfW);
|
||||
targetX = MathUtils.clamp(targetX, min, max);
|
||||
}
|
||||
float camHalfH = camera.viewportHeight * 0.5f;
|
||||
if (mapH > camHalfH) {
|
||||
float min = Math.min(camHalfH, mapH - camHalfH);
|
||||
float max = Math.max(camHalfH, mapH - camHalfH);
|
||||
targetY = MathUtils.clamp(targetY, min, max);
|
||||
}
|
||||
this.targetPosition.set(targetX, targetY);
|
||||
}
|
||||
|
||||
public void setMap(TiledMap tiledMap) {
|
||||
int width = tiledMap.getProperties().get("width", 0, Integer.class);
|
||||
int tileW = tiledMap.getProperties().get("tilewidth", 0, Integer.class);
|
||||
int height = tiledMap.getProperties().get("height", 0, Integer.class);
|
||||
int tileH = tiledMap.getProperties().get("tileheight", 0, Integer.class);
|
||||
mapW = width * tileW * GdxGame.UNIT_SCALE;
|
||||
mapH = height * tileH * GdxGame.UNIT_SCALE;
|
||||
|
||||
Entity camEntity = getEntities().first();
|
||||
if (camEntity == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Transform transform = Transform.MAPPER.get(camEntity);
|
||||
calcTargetPosition(transform.getPosition());
|
||||
camera.position.set(this.targetPosition.x, this.targetPosition.y, camera.position.z);
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ import io.github.com.quillraven.GdxGame;
|
||||
import io.github.com.quillraven.asset.AtlasAsset;
|
||||
import io.github.com.quillraven.component.Animation2D;
|
||||
import io.github.com.quillraven.component.Animation2D.AnimationType;
|
||||
import io.github.com.quillraven.component.CameraFollow;
|
||||
import io.github.com.quillraven.component.Controller;
|
||||
import io.github.com.quillraven.component.Facing;
|
||||
import io.github.com.quillraven.component.Facing.FacingDirection;
|
||||
@@ -88,6 +89,7 @@ public class TiledAshleySpawner {
|
||||
rect.getX(), rect.getY(),
|
||||
rect.getWidth(), rect.getHeight(),
|
||||
1f, 1f,
|
||||
0,
|
||||
entity);
|
||||
addEntityPhysic(
|
||||
rectMapObj,
|
||||
@@ -116,11 +118,14 @@ public class TiledAshleySpawner {
|
||||
TiledMapTile tile = tileMapObject.getTile();
|
||||
TextureRegion textureRegion = tile.getTextureRegion();
|
||||
String classType = tile.getProperties().get("type", "", String.class);
|
||||
float sortOffsetY = tile.getProperties().get("sortOffsetY", 0, Integer.class);
|
||||
sortOffsetY *= GdxGame.UNIT_SCALE;
|
||||
|
||||
addEntityTransform(
|
||||
tileMapObject.getX(), tileMapObject.getY(),
|
||||
textureRegion.getRegionWidth(), textureRegion.getRegionHeight(),
|
||||
tileMapObject.getScaleX(), tileMapObject.getScaleY(),
|
||||
sortOffsetY,
|
||||
entity);
|
||||
addEntityPhysic(
|
||||
tile.getObjects(),
|
||||
@@ -130,6 +135,7 @@ public class TiledAshleySpawner {
|
||||
addEntityAnimation(tile, entity);
|
||||
addEntityMove(tile, entity);
|
||||
addEntityController(tileMapObject, entity);
|
||||
addEntityCameraFollow(tileMapObject, entity);
|
||||
entity.add(new Facing(FacingDirection.DOWN));
|
||||
entity.add(new Fsm(entity));
|
||||
entity.add(new Graphic(textureRegion, Color.WHITE.cpy()));
|
||||
@@ -137,6 +143,13 @@ public class TiledAshleySpawner {
|
||||
this.engine.addEntity(entity);
|
||||
}
|
||||
|
||||
private void addEntityCameraFollow(TiledMapTileMapObject tileMapObject, Entity entity) {
|
||||
boolean cameraFollow = tileMapObject.getProperties().get("camFollow", false, Boolean.class);
|
||||
if (!cameraFollow) return;
|
||||
|
||||
entity.add(new CameraFollow());
|
||||
}
|
||||
|
||||
private void addEntityController(TiledMapTileMapObject tileMapObject, Entity entity) {
|
||||
boolean controller = tileMapObject.getProperties().get("controller", false, Boolean.class);
|
||||
if (!controller) return;
|
||||
@@ -212,6 +225,7 @@ public class TiledAshleySpawner {
|
||||
float x, float y,
|
||||
float w, float h,
|
||||
float scaleX, float scaleY,
|
||||
float sortOffsetY,
|
||||
Entity entity
|
||||
) {
|
||||
Vector2 position = new Vector2(x, y);
|
||||
@@ -221,7 +235,7 @@ public class TiledAshleySpawner {
|
||||
position.scl(GdxGame.UNIT_SCALE);
|
||||
size.scl(GdxGame.UNIT_SCALE);
|
||||
|
||||
entity.add(new Transform(position, 0, size, scaling, 0f));
|
||||
entity.add(new Transform(position, 0, size, scaling, 0f, sortOffsetY));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user