diff --git a/battle_srv/models/room.go b/battle_srv/models/room.go
index 723941c..40ea901 100644
--- a/battle_srv/models/room.go
+++ b/battle_srv/models/room.go
@@ -1152,19 +1152,17 @@ 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, dyInResolv, "Barrier"); collision != nil {
+ if collision := playerCollider.Check(dx, dy, "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()
- dyInResolv = changeWithCollision.Y()
- dy = -dyInResolv
+ dy = changeWithCollision.Y()
}
playerCollider.X += dx
- playerCollider.Y += dyInResolv
+ playerCollider.Y += dy
// Update in "collision space"
playerCollider.Update()
@@ -1200,7 +1198,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)
@@ -1233,7 +1231,7 @@ 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)
}
diff --git a/collider_visualizer/common.go b/collider_visualizer/common.go
index f3b7693..feab531 100644
--- a/collider_visualizer/common.go
+++ b/collider_visualizer/common.go
@@ -1,66 +1,52 @@
package main
import (
- "image/color"
- "math"
-
"github.com/hajimehoshi/ebiten/v2"
- "github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/solarlune/resolv"
+ "image/color"
)
-var circleBuffer map[resolv.Shape]*ebiten.Image = map[resolv.Shape]*ebiten.Image{}
-
-func DrawPolygon(screen *ebiten.Image, shape *resolv.ConvexPolygon, color color.Color) {
-
- verts := shape.Transformed()
- for i := 0; i < len(verts); i++ {
- vert := verts[i]
- next := verts[0]
-
- if i < len(verts)-1 {
- next = verts[i+1]
- }
- ebitenutil.DrawLine(screen, vert.X(), vert.Y(), next.X(), next.Y(), color)
+var (
+ PolygonFillerImage = ebiten.NewImage(1, 1)
+)
+func DrawPolygon(screen *ebiten.Image, shape *resolv.ConvexPolygon, clr color.Color) {
+ PolygonFillerImage.Fill(clr)
+ indices := []uint16{}
+ vs := []ebiten.Vertex{}
+ coors := shape.Transformed()
+ centerX := float64(0)
+ centerY := float64(0)
+ n := uint16(len(coors))
+ for i, coor := range coors {
+ centerX += coor.X()
+ centerY += coor.Y()
+ vs = append(vs, ebiten.Vertex{
+ DstX: float32(coor.X()),
+ DstY: float32(coor.Y()),
+ SrcX: 0,
+ SrcY: 0,
+ ColorR: 1,
+ ColorG: 1,
+ ColorB: 1,
+ ColorA: 1,
+ })
+ indices = append(indices, uint16(i), uint16(i+1)%n, n)
}
-}
-
-func DrawCircle(screen *ebiten.Image, circle *resolv.Circle, drawColor color.Color) {
-
- // Actually drawing the circles live is too inefficient, so we will simply draw them to an image and then draw that instead
- // when necessary.
-
- if _, exists := circleBuffer[circle]; !exists {
- newImg := ebiten.NewImage(int(circle.Radius)*2, int(circle.Radius)*2)
-
- newImg.Set(int(circle.X), int(circle.Y), color.White)
-
- stepCount := float64(32)
-
- // Half image width and height.
- hw := circle.Radius
- hh := circle.Radius
-
- for i := 0; i < int(stepCount); i++ {
-
- x := (math.Sin(math.Pi*2*float64(i)/stepCount) * (circle.Radius - 2)) + hw
- y := (math.Cos(math.Pi*2*float64(i)/stepCount) * (circle.Radius - 2)) + hh
-
- x2 := (math.Sin(math.Pi*2*float64(i+1)/stepCount) * (circle.Radius - 2)) + hw
- y2 := (math.Cos(math.Pi*2*float64(i+1)/stepCount) * (circle.Radius - 2)) + hh
-
- ebitenutil.DrawLine(newImg, x, y, x2, y2, color.White)
-
- }
- circleBuffer[circle] = newImg
- }
-
- drawOpt := &ebiten.DrawImageOptions{}
- r, g, b, _ := drawColor.RGBA()
- drawOpt.ColorM.Scale(float64(r)/65535, float64(g)/65535, float64(b)/65535, 1)
- drawOpt.GeoM.Translate(circle.X-circle.Radius, circle.Y-circle.Radius)
- screen.DrawImage(circleBuffer[circle], drawOpt)
-
+ centerX = centerX / float64(n)
+ centerY = centerY / float64(n)
+
+ vs = append(vs, ebiten.Vertex{
+ DstX: float32(centerX),
+ DstY: float32(centerY),
+ SrcX: 0,
+ SrcY: 0,
+ ColorR: 1,
+ ColorG: 1,
+ ColorB: 1,
+ ColorA: 1,
+ })
+
+ screen.DrawTriangles(vs, indices, PolygonFillerImage, nil)
}
diff --git a/collider_visualizer/main.go b/collider_visualizer/main.go
index 9f5f0af..0cdeba8 100644
--- a/collider_visualizer/main.go
+++ b/collider_visualizer/main.go
@@ -85,12 +85,13 @@ type Game struct {
func NewGame() *Game {
- stageName := "simple" // Use this for calibration
- // stageName := "richsoil"
+ // stageName := "simple" // Use this for calibration
+ stageName := "simple2"
stageDiscreteW, stageDiscreteH, stageTileW, stageTileH, playerPosMap, barrierMap, err := parseStage(stageName)
if nil != err {
panic(err)
}
+ PolygonFillerImage.Fill(color.RGBA{60, 60, 60, 255}) // Required to init color of the polygons!
spaceW := stageDiscreteW * stageTileW
spaceH := stageDiscreteH * stageTileH
diff --git a/collider_visualizer/worldColliderDisplay.go b/collider_visualizer/worldColliderDisplay.go
index 899252f..b81db11 100644
--- a/collider_visualizer/worldColliderDisplay.go
+++ b/collider_visualizer/worldColliderDisplay.go
@@ -1,20 +1,20 @@
package main
import (
+ . "dnmshared"
"fmt"
- "image/color"
- "go.uber.org/zap"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/solarlune/resolv"
- . "dnmshared"
+ "go.uber.org/zap"
+ "image/color"
- "math"
+ "math"
)
type WorldColliderDisplay struct {
- Game *Game
- Space *resolv.Space
+ Game *Game
+ Space *resolv.Space
}
func (world *WorldColliderDisplay) Init() {
@@ -22,7 +22,7 @@ func (world *WorldColliderDisplay) Init() {
func NewWorldColliderDisplay(game *Game, stageDiscreteW, stageDiscreteH, stageTileW, stageTileH int32, playerPosMap StrToVec2DListMap, barrierMap StrToPolygon2DListMap) *WorldColliderDisplay {
- playerList := *(playerPosMap["PlayerStartingPos"])
+ playerList := *(playerPosMap["PlayerStartingPos"])
barrierList := *(barrierMap["Barrier"])
world := &WorldColliderDisplay{Game: game}
@@ -35,53 +35,51 @@ 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"
+ // 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")
- playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
- playerCollider.SetShape(playerColliderShape)
- Logger.Info("player shape added:", zap.Any("shape", playerColliderShape))
- space.Add(playerCollider)
- }
+ space := resolv.NewSpace(int(spaceW), int(spaceH), 16, 16)
+ for _, player := range playerList {
+ playerCollider := resolv.NewObject(player.X+spaceOffsetX, player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2, "Player")
+ playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
+ playerCollider.SetShape(playerColliderShape)
+ space.Add(playerCollider)
+ }
- barrierLocalId := 0
- for _, barrier := range barrierList {
- var w float64 = 0
- var h float64 = 0
+ barrierLocalId := 0
+ for _, barrier := range barrierList {
+ var w float64 = 0
+ var h float64 = 0
- for i, pi := range barrier.Points {
- for j, pj := range barrier.Points {
- if i == j {
- continue
- }
- if math.Abs(pj.X-pi.X) > w {
- w = math.Abs(pj.X - pi.X)
- }
- if math.Abs(pj.Y-pi.Y) > h {
- h = math.Abs(pj.Y - pi.Y)
- }
- }
- }
+ for i, pi := range barrier.Points {
+ for j, pj := range barrier.Points {
+ if i == j {
+ continue
+ }
+ if math.Abs(pj.X-pi.X) > w {
+ w = math.Abs(pj.X - pi.X)
+ }
+ if math.Abs(pj.Y-pi.Y) > h {
+ h = math.Abs(pj.Y - pi.Y)
+ }
+ }
+ }
- barrierColliderShape := resolv.NewConvexPolygon()
- for i := 0; i < len(barrier.Points); i++ {
- p := barrier.Points[i]
- barrierColliderShape.AddPoints(p.X, p.Y)
- }
+ barrierColliderShape := resolv.NewConvexPolygon()
+ 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.SetShape(barrierColliderShape)
+ 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))
- space.Add(barrierCollider)
+ space.Add(barrierCollider)
- barrierLocalId++
- }
+ barrierLocalId++
+ }
world.Space = space
- return world
+ return world
}
func (world *WorldColliderDisplay) Update() {
@@ -91,14 +89,17 @@ func (world *WorldColliderDisplay) Update() {
func (world *WorldColliderDisplay) 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}
+ circle := o.Shape.(*resolv.Circle)
+ drawColor := color.RGBA{0, 255, 0, 255}
+ ebitenutil.DrawCircle(screen, circle.X, circle.Y, circle.Radius, drawColor)
+ } else {
+ drawColor := color.RGBA{60, 60, 60, 255}
+ DrawPolygon(screen, o.Shape.(*resolv.ConvexPolygon), drawColor)
}
- 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/dnmshared/parser.go b/dnmshared/tmx_parser.go
similarity index 100%
rename from dnmshared/parser.go
rename to dnmshared/tmx_parser.go
diff --git a/frontend/assets/resources/map/simple/map.tmx b/frontend/assets/resources/map/simple/map.tmx
index 2c2b987..acd6779 100644
--- a/frontend/assets/resources/map/simple/map.tmx
+++ b/frontend/assets/resources/map/simple/map.tmx
@@ -8,81 +8,33 @@
-
- eJztmd0OwiAMRheNv/P9n9eY2BtCgVJbvs6em8WauJ64wQdsW5L4cq7ULu5d6Ni/11vlu1oNkb34HNGldCDugzUETkydc0OmfF4iOhDkEtmBuK5uIAk3x7VAnxckHMnF+j2P+AzX8uaHSP97K2+26kiM5M1WHQEuC0Ry6eUZLicjufQcImS2dMDgCA7cGpKI4EBw40wkByLXw5iM5GS0rKvpx3rulvam6cfaRfr7/+DyMriXFK2LZNx6CO8lZdYFceyVujxNuvgNSGscLStduD2XWVa49PZcZvF0Gd1zmcXDRXLGp8HSxfuMz9LFe03j4eI1r1rmijzjSxIdb64rAxM=
+ eJztwQENAAAAwqD3T20ON6AAAAAAAAAAAADg3wAnEAAB
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap.meta b/frontend/assets/resources/map/simple2/BackgroundMap.meta
new file mode 100644
index 0000000..803aefb
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H128_S01.png b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.png
new file mode 100644
index 0000000..b651445
Binary files /dev/null and b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.png differ
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.png.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.png.meta
new file mode 100644
index 0000000..2b8a57f
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H128_S01.tsx b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.tsx
new file mode 100644
index 0000000..2d6b910
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.tsx.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H128_S01.tsx.meta
new file mode 100644
index 0000000..57602b0
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H256_S01.png b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.png
new file mode 100644
index 0000000..45aa8ef
Binary files /dev/null and b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.png differ
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.png.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.png.meta
new file mode 100644
index 0000000..5a0efc8
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H256_S01.tsx b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.tsx
new file mode 100644
index 0000000..b57d090
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.tsx
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.tsx.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S01.tsx.meta
new file mode 100644
index 0000000..6641c22
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H256_S02.png b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.png
new file mode 100644
index 0000000..8ddf7ff
Binary files /dev/null and b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.png differ
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.png.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.png.meta
new file mode 100644
index 0000000..b6214bf
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/Tile_W256_H256_S02.tsx b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.tsx
new file mode 100644
index 0000000..0f34291
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.tsx
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.tsx.meta b/frontend/assets/resources/map/simple2/BackgroundMap/Tile_W256_H256_S02.tsx.meta
new file mode 100644
index 0000000..a9a32f1
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/BackgroundMap/map.tmx b/frontend/assets/resources/map/simple2/BackgroundMap/map.tmx
new file mode 100644
index 0000000..4b1c9cf
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/BackgroundMap/map.tmx
@@ -0,0 +1,129 @@
+
+
diff --git a/frontend/assets/resources/map/simple2/BackgroundMap/map.tmx.meta b/frontend/assets/resources/map/simple2/BackgroundMap/map.tmx.meta
new file mode 100644
index 0000000..31fac2c
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/Tile_W300_H300_S01.png b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.png
new file mode 100644
index 0000000..3200517
Binary files /dev/null and b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.png differ
diff --git a/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.png.meta b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.png.meta
new file mode 100644
index 0000000..360d33c
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/Tile_W300_H300_S01.tsx b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.tsx
new file mode 100644
index 0000000..d958003
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.tsx
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.tsx.meta b/frontend/assets/resources/map/simple2/Tile_W300_H300_S01.tsx.meta
new file mode 100644
index 0000000..2e5add5
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/Tile_W64_H64_S01.png b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.png
new file mode 100644
index 0000000..1b7cb9d
Binary files /dev/null and b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.png differ
diff --git a/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.png.meta b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.png.meta
new file mode 100644
index 0000000..c9d78ad
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/Tile_W64_H64_S01.tsx b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.tsx
new file mode 100644
index 0000000..319467a
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.tsx
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.tsx.meta b/frontend/assets/resources/map/simple2/Tile_W64_H64_S01.tsx.meta
new file mode 100644
index 0000000..b685e20
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/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/simple2/map.tmx b/frontend/assets/resources/map/simple2/map.tmx
new file mode 100644
index 0000000..9bddc2f
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/map.tmx
@@ -0,0 +1,310 @@
+
+
diff --git a/frontend/assets/resources/map/simple2/map.tmx.meta b/frontend/assets/resources/map/simple2/map.tmx.meta
new file mode 100644
index 0000000..062b61a
--- /dev/null
+++ b/frontend/assets/resources/map/simple2/map.tmx.meta
@@ -0,0 +1,5 @@
+{
+ "ver": "2.0.2",
+ "uuid": "0fe4d0fd-d537-4440-93f7-fffda8897ab1",
+ "subMetas": {}
+}
\ No newline at end of file