diff --git a/battle_srv/models/room.go b/battle_srv/models/room.go
index f9d79da..723941c 100644
--- a/battle_srv/models/room.go
+++ b/battle_srv/models/room.go
@@ -1152,17 +1152,19 @@ func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRende
baseChange := player.Speed * pR.RollbackEstimatedDt * decodedInputSpeedFactor
dx := baseChange * float64(decodedInput[0])
dy := baseChange * float64(decodedInput[1])
+ dyInResolv := -dy
collisionPlayerIndex := COLLISION_PLAYER_INDEX_PREFIX + joinIndex
playerCollider := pR.CollisionSysMap[collisionPlayerIndex]
- if collision := playerCollider.Check(dx, dy, "Barrier"); collision != nil {
+ if collision := playerCollider.Check(dx, dyInResolv, "Barrier"); collision != nil {
changeWithCollision := collision.ContactWithObject(collision.Objects[0])
Logger.Info(fmt.Sprintf("Collided: roomId=%v, playerId=%v, orig dx=%v, orig dy=%v, new dx =%v, new dy=%v", pR.Id, player.Id, dx, dy, changeWithCollision.X(), changeWithCollision.Y()))
dx = changeWithCollision.X()
- dy = changeWithCollision.Y()
+ dyInResolv = changeWithCollision.Y()
+ dy = -dyInResolv
}
playerCollider.X += dx
- playerCollider.Y += dy
+ playerCollider.Y += dyInResolv
// Update in "collision space"
playerCollider.Update()
@@ -1198,7 +1200,7 @@ func (pR *Room) refreshColliders() {
space := resolv.NewSpace(int(spaceW), int(spaceH), int(pR.StageTileW), int(pR.StageTileH)) // allocate a new collision space everytime after a battle is settled
for _, player := range pR.Players {
- playerCollider := resolv.NewObject(player.X+spaceOffsetX, player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2)
+ playerCollider := resolv.NewObject(player.X+spaceOffsetX, -player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2)
playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
playerCollider.SetShape(playerColliderShape)
space.Add(playerCollider)
@@ -1231,10 +1233,9 @@ func (pR *Room) refreshColliders() {
barrierColliderShape.AddPoints(p.X, p.Y)
}
- barrierCollider := resolv.NewObject(barrier.Boundary.Anchor.X+spaceOffsetX, barrier.Boundary.Anchor.Y+spaceOffsetY, w, h, "Barrier")
+ barrierCollider := resolv.NewObject(barrier.Boundary.Anchor.X+spaceOffsetX, -barrier.Boundary.Anchor.Y+spaceOffsetY, w, h, "Barrier")
barrierCollider.SetShape(barrierColliderShape)
space.Add(barrierCollider)
- pR.printBarrier(barrierCollider)
}
}
diff --git a/collider_visualizer/main.go b/collider_visualizer/main.go
index af424bd..9f5f0af 100644
--- a/collider_visualizer/main.go
+++ b/collider_visualizer/main.go
@@ -85,7 +85,9 @@ type Game struct {
func NewGame() *Game {
- stageDiscreteW, stageDiscreteH, stageTileW, stageTileH, playerPosMap, barrierMap, err := parseStage("richsoil")
+ stageName := "simple" // Use this for calibration
+ // stageName := "richsoil"
+ stageDiscreteW, stageDiscreteH, stageTileW, stageTileH, playerPosMap, barrierMap, err := parseStage(stageName)
if nil != err {
panic(err)
}
diff --git a/collider_visualizer/worldColliderDisplay.go b/collider_visualizer/worldColliderDisplay.go
index f57db80..899252f 100644
--- a/collider_visualizer/worldColliderDisplay.go
+++ b/collider_visualizer/worldColliderDisplay.go
@@ -35,17 +35,17 @@ func NewWorldColliderDisplay(game *Game, stageDiscreteW, stageDiscreteH, stageTi
spaceOffsetX := float64(spaceW) * 0.5
spaceOffsetY := float64(spaceH) * 0.5
+ // TODO: Move collider y-axis transformation to a "dnmshared"
playerColliderRadius := float64(12) // hardcoded
space := resolv.NewSpace(int(spaceW), int(spaceH), int(stageTileW), int(stageTileH))
for _, player := range playerList {
- playerCollider := resolv.NewObject(player.X+spaceOffsetX, player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2, "Player")
+ playerCollider := resolv.NewObject(player.X+spaceOffsetX, -player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2, "Player")
playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
playerCollider.SetShape(playerColliderShape)
Logger.Info("player shape added:", zap.Any("shape", playerColliderShape))
space.Add(playerCollider)
}
-
barrierLocalId := 0
for _, barrier := range barrierList {
var w float64 = 0
@@ -66,12 +66,12 @@ func NewWorldColliderDisplay(game *Game, stageDiscreteW, stageDiscreteH, stageTi
}
barrierColliderShape := resolv.NewConvexPolygon()
- for i := len(barrier.Points)-1; i >= 0; i-- {
+ for i := 0; i < len(barrier.Points); i++ {
p := barrier.Points[i]
barrierColliderShape.AddPoints(p.X, p.Y)
}
- barrierCollider := resolv.NewObject(barrier.Anchor.X+spaceOffsetX, barrier.Anchor.Y+spaceOffsetY, w, h, "Barrier")
+ barrierCollider := resolv.NewObject(barrier.Anchor.X+spaceOffsetX, -barrier.Anchor.Y+spaceOffsetY, w, h, "Barrier")
barrierCollider.SetShape(barrierColliderShape)
Logger.Info("barrier shape added:", zap.Any("barrierLocalId", barrierLocalId), zap.Any("shape", barrierColliderShape))
@@ -98,7 +98,7 @@ func (world *WorldColliderDisplay) Draw(screen *ebiten.Image) {
ebitenutil.DrawRect(screen, o.X, o.Y, o.W, o.H, drawColor)
}
- world.Game.DebugDraw(screen, world.Space)
+ // world.Game.DebugDraw(screen, world.Space)
if world.Game.ShowHelpText {
diff --git a/collider_visualizer/worldLineOfSight.go b/collider_visualizer/worldLineOfSight.go
deleted file mode 100644
index 4429603..0000000
--- a/collider_visualizer/worldLineOfSight.go
+++ /dev/null
@@ -1,170 +0,0 @@
-package main
-
-import (
- "fmt"
- "image/color"
- "strconv"
-
- "github.com/hajimehoshi/ebiten/v2"
- "github.com/hajimehoshi/ebiten/v2/ebitenutil"
- "github.com/solarlune/resolv"
-)
-
-type WorldLineTest struct {
- Game *Game
- Space *resolv.Space
- Player *resolv.Object
-}
-
-func NewWorldLineTest(game *Game) *WorldLineTest {
- w := &WorldLineTest{Game: game}
- w.Init()
- return w
-}
-
-func (world *WorldLineTest) Init() {
-
- gw := float64(world.Game.Width)
- gh := float64(world.Game.Height)
-
- cellSize := 8
-
- world.Space = resolv.NewSpace(int(gw), int(gh), cellSize, cellSize)
-
- // Construct geometry
- geometry := []*resolv.Object{
-
- resolv.NewObject(0, 0, 16, gh),
- resolv.NewObject(gw-16, 0, 16, gh),
- resolv.NewObject(0, 0, gw, 16),
- resolv.NewObject(0, gh-24, gw, 32),
- resolv.NewObject(0, gh-24, gw, 32),
-
- resolv.NewObject(200, -160, 16, gh),
- }
-
- world.Space.Add(geometry...)
-
- for _, o := range world.Space.Objects() {
- o.AddTags("solid")
- }
-
- world.Player = resolv.NewObject(160, 160, 16, 16)
- world.Player.AddTags("player")
- world.Space.Add(world.Player)
-
-}
-
-func (world *WorldLineTest) Update() {
-
- dx, dy := 0.0, 0.0
- moveSpd := 2.0
-
- if ebiten.IsKeyPressed(ebiten.KeyW) {
- dy = -moveSpd
- }
-
- if ebiten.IsKeyPressed(ebiten.KeyS) {
- dy += moveSpd
- }
-
- if ebiten.IsKeyPressed(ebiten.KeyA) {
- dx = -moveSpd
- }
-
- if ebiten.IsKeyPressed(ebiten.KeyD) {
- dx += moveSpd
- }
-
- if col := world.Player.Check(dx, 0, "solid"); col != nil {
- dx = col.ContactWithObject(col.Objects[0]).X()
- }
-
- world.Player.X += dx
-
- if col := world.Player.Check(0, dy, "solid"); col != nil {
- dy = col.ContactWithObject(col.Objects[0]).Y()
- }
-
- world.Player.Y += dy
-
- world.Player.Update()
-
-}
-
-func (world *WorldLineTest) Draw(screen *ebiten.Image) {
-
- for _, o := range world.Space.Objects() {
- drawColor := color.RGBA{60, 60, 60, 255}
- if o.HasTags("player") {
- drawColor = color.RGBA{0, 255, 0, 255}
- }
- ebitenutil.DrawRect(screen, o.X, o.Y, o.W, o.H, drawColor)
- }
-
- mouseX, mouseY := ebiten.CursorPosition()
-
- mx, my := world.Space.WorldToSpace(float64(mouseX), float64(mouseY))
-
- cx, cy := world.Player.CellPosition()
-
- sightLine := world.Space.CellsInLine(cx, cy, mx, my)
-
- interrupted := false
-
- for i, cell := range sightLine {
-
- if i == 0 { // Skip the beginning because that's the player
- continue
- }
-
- drawColor := color.RGBA{255, 255, 0, 255}
-
- // if interrupted {
- // drawColor = color.RGBA{0, 0, 255, 255}
- // }
-
- if !interrupted && cell.ContainsTags("solid") {
- drawColor = color.RGBA{255, 0, 0, 255}
- interrupted = true
- }
-
- ebitenutil.DrawRect(screen,
- float64(cell.X*world.Space.CellWidth),
- float64(cell.Y*world.Space.CellHeight),
- float64(world.Space.CellWidth),
- float64(world.Space.CellHeight),
- drawColor)
-
- if interrupted {
- break
- }
-
- }
-
- if world.Game.Debug {
- world.Game.DebugDraw(screen, world.Space)
- }
-
- if world.Game.ShowHelpText {
-
- world.Game.DrawText(screen, 16, 16,
- "~ Line of sight test ~",
- "WASD keys: Move player",
- "Mouse: Hover over impassible objects",
- "to get the closest wall to the player.",
- fmt.Sprintf("Mouse X: %d, Mouse Y: %d", mouseX, mouseY),
- "Clear line of sight: "+strconv.FormatBool(!interrupted),
- "",
- "F1: Toggle Debug View",
- "F2: Show / Hide help text",
- "R: Restart world",
- "E: Next world",
- "Q: Previous world",
- fmt.Sprintf("%d FPS (frames per second)", int(ebiten.CurrentFPS())),
- fmt.Sprintf("%d TPS (ticks per second)", int(ebiten.CurrentTPS())),
- )
-
- }
-
-}
diff --git a/frontend/assets/resources/map/simple/BackgroundMap.meta b/frontend/assets/resources/map/simple/BackgroundMap.meta
new file mode 100644
index 0000000..803aefb
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap.meta
@@ -0,0 +1,7 @@
+{
+ "ver": "1.0.1",
+ "uuid": "2f0bdedd-7215-4462-ae54-b71c054cffbe",
+ "isSubpackage": false,
+ "subpackageName": "",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png
new file mode 100644
index 0000000..b651445
Binary files /dev/null and b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png differ
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png.meta
new file mode 100644
index 0000000..2b8a57f
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.png.meta
@@ -0,0 +1,34 @@
+{
+ "ver": "2.3.3",
+ "uuid": "c71de11b-4efc-4b7a-bbc7-eb926d08baf6",
+ "type": "sprite",
+ "wrapMode": "clamp",
+ "filterMode": "bilinear",
+ "premultiplyAlpha": false,
+ "genMipmaps": false,
+ "packable": true,
+ "platformSettings": {},
+ "subMetas": {
+ "Tile_W256_H128_S01": {
+ "ver": "1.0.4",
+ "uuid": "b4fba8f6-ffc7-468b-9086-ec855c73388a",
+ "rawTextureUuid": "c71de11b-4efc-4b7a-bbc7-eb926d08baf6",
+ "trimType": "auto",
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 831,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 2048,
+ "height": 386,
+ "rawWidth": 2048,
+ "rawHeight": 2048,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "subMetas": {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx
new file mode 100644
index 0000000..2d6b910
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx.meta
new file mode 100644
index 0000000..57602b0
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H128_S01.tsx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.0",
+ "uuid": "356c1165-6c15-40fe-95d0-baf11b053ada",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png
new file mode 100644
index 0000000..45aa8ef
Binary files /dev/null and b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png differ
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png.meta
new file mode 100644
index 0000000..5a0efc8
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.png.meta
@@ -0,0 +1,34 @@
+{
+ "ver": "2.3.3",
+ "uuid": "ad433d85-5c88-4067-b4b7-129be0f54d57",
+ "type": "sprite",
+ "wrapMode": "clamp",
+ "filterMode": "bilinear",
+ "premultiplyAlpha": false,
+ "genMipmaps": false,
+ "packable": true,
+ "platformSettings": {},
+ "subMetas": {
+ "Tile_W256_H256_S01": {
+ "ver": "1.0.4",
+ "uuid": "6c14c41c-4946-4992-b75d-8b580de43c83",
+ "rawTextureUuid": "ad433d85-5c88-4067-b4b7-129be0f54d57",
+ "trimType": "auto",
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 64,
+ "width": 1280,
+ "height": 896,
+ "rawWidth": 1280,
+ "rawHeight": 1024,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "subMetas": {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx
new file mode 100644
index 0000000..b57d090
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx.meta
new file mode 100644
index 0000000..6641c22
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S01.tsx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.0",
+ "uuid": "e76fd642-3e97-4917-b6c7-0fc679a17644",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png
new file mode 100644
index 0000000..8ddf7ff
Binary files /dev/null and b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png differ
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png.meta
new file mode 100644
index 0000000..b6214bf
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.png.meta
@@ -0,0 +1,34 @@
+{
+ "ver": "2.3.3",
+ "uuid": "2a91275b-bb80-44b8-9932-0913c465e4ea",
+ "type": "sprite",
+ "wrapMode": "clamp",
+ "filterMode": "bilinear",
+ "premultiplyAlpha": false,
+ "genMipmaps": false,
+ "packable": true,
+ "platformSettings": {},
+ "subMetas": {
+ "Tile_W256_H256_S02": {
+ "ver": "1.0.4",
+ "uuid": "55ca9649-0476-4fdb-9faa-3721ec0a0d5a",
+ "rawTextureUuid": "2a91275b-bb80-44b8-9932-0913c465e4ea",
+ "trimType": "auto",
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 19.5,
+ "offsetY": 3.5,
+ "trimX": 89,
+ "trimY": 0,
+ "width": 1409,
+ "height": 251,
+ "rawWidth": 1548,
+ "rawHeight": 258,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "subMetas": {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx
new file mode 100644
index 0000000..0f34291
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx.meta b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx.meta
new file mode 100644
index 0000000..a9a32f1
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/Tile_W256_H256_S02.tsx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.0",
+ "uuid": "0f6bb2a2-d39f-4055-a636-4e6dc3472a18",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/map.tmx b/frontend/assets/resources/map/simple/BackgroundMap/map.tmx
new file mode 100644
index 0000000..4b1c9cf
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/map.tmx
@@ -0,0 +1,129 @@
+
+
diff --git a/frontend/assets/resources/map/simple/BackgroundMap/map.tmx.meta b/frontend/assets/resources/map/simple/BackgroundMap/map.tmx.meta
new file mode 100644
index 0000000..31fac2c
--- /dev/null
+++ b/frontend/assets/resources/map/simple/BackgroundMap/map.tmx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.2",
+ "uuid": "e310a2ad-1d44-41ed-858a-380474175aed",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png
new file mode 100644
index 0000000..3200517
Binary files /dev/null and b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png differ
diff --git a/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png.meta b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png.meta
new file mode 100644
index 0000000..360d33c
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.png.meta
@@ -0,0 +1,34 @@
+{
+ "ver": "2.3.3",
+ "uuid": "b6b4c575-6690-4f1d-8165-a0098509066c",
+ "type": "sprite",
+ "wrapMode": "clamp",
+ "filterMode": "bilinear",
+ "premultiplyAlpha": false,
+ "genMipmaps": false,
+ "packable": true,
+ "platformSettings": {},
+ "subMetas": {
+ "Tile_W300_H300_S01": {
+ "ver": "1.0.4",
+ "uuid": "8844352b-c6ac-4f30-8c8a-83955b2241b1",
+ "rawTextureUuid": "b6b4c575-6690-4f1d-8165-a0098509066c",
+ "trimType": "auto",
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 4,
+ "offsetY": -24.5,
+ "trimX": 97,
+ "trimY": 85,
+ "width": 114,
+ "height": 179,
+ "rawWidth": 300,
+ "rawHeight": 300,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "subMetas": {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx
new file mode 100644
index 0000000..d958003
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx.meta b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx.meta
new file mode 100644
index 0000000..2e5add5
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W300_H300_S01.tsx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.0",
+ "uuid": "e8f0b0b6-6274-4931-bf88-af35ca68c4cc",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png
new file mode 100644
index 0000000..1b7cb9d
Binary files /dev/null and b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png differ
diff --git a/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png.meta b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png.meta
new file mode 100644
index 0000000..c9d78ad
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.png.meta
@@ -0,0 +1,34 @@
+{
+ "ver": "2.3.3",
+ "uuid": "a6ef7a2f-0696-49d7-8e62-d2e495a2d032",
+ "type": "sprite",
+ "wrapMode": "clamp",
+ "filterMode": "bilinear",
+ "premultiplyAlpha": false,
+ "genMipmaps": false,
+ "packable": true,
+ "platformSettings": {},
+ "subMetas": {
+ "Tile_W64_H64_S01": {
+ "ver": "1.0.4",
+ "uuid": "f6779fb1-4117-459a-a175-ff9f3abf1545",
+ "rawTextureUuid": "a6ef7a2f-0696-49d7-8e62-d2e495a2d032",
+ "trimType": "auto",
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 256,
+ "height": 256,
+ "rawWidth": 256,
+ "rawHeight": 256,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "subMetas": {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx
new file mode 100644
index 0000000..319467a
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx.meta b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx.meta
new file mode 100644
index 0000000..b685e20
--- /dev/null
+++ b/frontend/assets/resources/map/simple/Tile_W64_H64_S01.tsx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.0",
+ "uuid": "04f5911f-c460-41ee-8a6c-c1fec92fdcfe",
+ "subMetas": {}
+}
\ No newline at end of file
diff --git a/frontend/assets/resources/map/simple/map.tmx b/frontend/assets/resources/map/simple/map.tmx
new file mode 100644
index 0000000..2c2b987
--- /dev/null
+++ b/frontend/assets/resources/map/simple/map.tmx
@@ -0,0 +1,88 @@
+
+
diff --git a/frontend/assets/resources/map/simple/map.tmx.meta b/frontend/assets/resources/map/simple/map.tmx.meta
new file mode 100644
index 0000000..062b61a
--- /dev/null
+++ b/frontend/assets/resources/map/simple/map.tmx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.2",
+ "uuid": "0fe4d0fd-d537-4440-93f7-fffda8897ab1",
+ "subMetas": {}
+}
\ No newline at end of file