diff --git a/game/src/world/2_town_square/component/perspective.lua b/game/src/world/2_town_square/component/perspective.lua index 90812a8..822bf08 100644 --- a/game/src/world/2_town_square/component/perspective.lua +++ b/game/src/world/2_town_square/component/perspective.lua @@ -14,8 +14,6 @@ components.dict = { segment_count = "perspective.segment_count", rumble_length = "perspective.rumble_length", - scroll = "perspective.scroll", - segment_path = "perspective.segment_path", segment_sprite_map_path = "perspective.segment_sprite_map_path" } @@ -60,10 +58,6 @@ function components.rumble_length (c, x) c.data = x end -function components.scroll (c, x) - c.data = x -end - function components.segment_path (c, x) c.data = x end diff --git a/game/src/world/2_town_square/component/pos3d.lua b/game/src/world/2_town_square/component/pos3d.lua new file mode 100644 index 0000000..4ea4347 --- /dev/null +++ b/game/src/world/2_town_square/component/pos3d.lua @@ -0,0 +1,13 @@ +local vm = require("lib.vornmath") + +local components = {} + +components.dict = { + pos = "pos3d.pos" +} + +function components.pos (c, x, y, z) + c.data = vm.vec3({x, y, z}) +end + +return components diff --git a/game/src/world/2_town_square/system/perspective.lua b/game/src/world/2_town_square/system/perspective.lua index eeb7b7f..da9d8b5 100644 --- a/game/src/world/2_town_square/system/perspective.lua +++ b/game/src/world/2_town_square/system/perspective.lua @@ -1,7 +1,10 @@ local system_constructor = require("wrapper.Concord.system") local roadsegment = require("src.world.2_town_square.pseudo3d.roadsegment") + local perspective = require("src.world.2_town_square.component.perspective") +local pos3d = require("src.world.2_town_square.component.pos3d") + local projection = require("lib.choro.projection") local ease = require("src.world.2_town_square.pseudo3d.ease") local vm = require("lib.vornmath") @@ -21,11 +24,12 @@ system.pool = { perspective.dict.resolution, perspective.dict.road_width, perspective.dict.rumble_length, - perspective.dict.scroll, perspective.dict.segment_count, perspective.dict.segment_length, perspective.dict.segment_path, - perspective.dict.segment_sprite_map_path + perspective.dict.segment_sprite_map_path, + + pos3d.dict.pos, } } @@ -38,11 +42,12 @@ system.components = { [perspective.dict.resolution] = perspective.resolution, [perspective.dict.road_width] = perspective.road_width, [perspective.dict.rumble_length] = perspective.rumble_length, - [perspective.dict.scroll] = perspective.scroll, [perspective.dict.segment_count] = perspective.segment_count, [perspective.dict.segment_length] = perspective.segment_length, [perspective.dict.segment_path] = perspective.segment_path, - [perspective.dict.segment_sprite_map_path] = perspective.segment_sprite_map_path + [perspective.dict.segment_sprite_map_path] = perspective.segment_sprite_map_path, + + [pos3d.dict.pos] = pos3d.pos, } function system.new() local new_system = system_constructor.new("perspective", system.pool) @@ -62,7 +67,8 @@ function system:load() local segment_sprite_map_path = e[perspective.dict.segment_sprite_map_path].data local segment_length = e[perspective.dict.segment_length].data local rumble_length = e[perspective.dict.rumble_length].data - local scroll = e[perspective.dict.scroll].data + + local player_y = e[pos3d.dict.pos].data local segments, track_length = roadsegment.resetRoad(segment_path, segment_sprite_map_path, segment_length, rumble_length, scroll) -- entityBuilder.setComponent(e, "segments", segments) @@ -73,39 +79,31 @@ function system:load() local camera_depth = projection.distanceCamToProjection(field_of_view) local player_z = camera_depth * camera_height - e.player = {} - e.player.pos = {0, scroll, player_z} + e[pos3d.dict.pos].data[3] = player_z e.segments = segments e.track_length = track_length e.camera_depth = camera_depth - - -- entityBuilder.setComponent(e, "camera_depth", projection.distanceCamToProjection(field_of_view)) - - -- local camera_depth = e.camera_depth.data - -- entityBuilder.setComponent(e, "player_z", projection.getPlayerZ(camera_height, camera_depth)) - - -- entityBuilder.setComponent(e, "prev_frame", 0) end end function system:update(dt) for _, e in ipairs(self.pool) do if love.keyboard.isDown("up") then - e.player.pos[3] = e.player.pos[3] + 1000 * dt + e[pos3d.dict.pos].data[3] = e[pos3d.dict.pos].data[3] + 1000 * dt elseif love.keyboard.isDown("down") then - e.player.pos[3] = e.player.pos[3] - 1000 * dt + e[pos3d.dict.pos].data[3] = e[pos3d.dict.pos].data[3] - 1000 * dt end if love.keyboard.isDown("left") then - e.player.pos[1] = e.player.pos[1] + 1 * dt + e[pos3d.dict.pos].data[1] = e[pos3d.dict.pos].data[1] - 1 * dt elseif love.keyboard.isDown("right") then - e.player.pos[1] = e.player.pos[1] - 1 * dt + e[pos3d.dict.pos].data[1] = e[pos3d.dict.pos].data[1] + 1 * dt end if love.keyboard.isDown("w") then - e.player.pos[2] = e.player.pos[2] + 1000 * dt + e[pos3d.dict.pos].data[2] = e[pos3d.dict.pos].data[2] + 1000 * dt elseif love.keyboard.isDown("s") then - e.player.pos[2] = e.player.pos[2] - 1000 * dt + e[pos3d.dict.pos].data[2] = e[pos3d.dict.pos].data[2] - 1000 * dt end end @@ -222,7 +220,7 @@ end function system:draw() for _, e in ipairs(self.pool) do - local scroll = e.player.pos[2] -- pos[2] + local player_y = e[pos3d.dict.pos].data[2] -- pos[2] local draw_distance = e[perspective.dict.draw_distance].data local camera_height = e[perspective.dict.camera_height].data local resolution = e[perspective.dict.resolution].data @@ -231,14 +229,14 @@ function system:draw() local fogDensity = e[perspective.dict.fog_density].data local segments = e.segments - local player_x = e.player.pos[1] -- pos[1] + local player_x = e[pos3d.dict.pos].data[1] -- pos[1] local camera_depth = e.camera_depth local track_length = e.track_length - local player_z = e.player.pos[3] -- pos[3] + local player_z = e[pos3d.dict.pos].data[3] -- pos[3] love.graphics.push() drawRoad( - scroll, draw_distance, + player_y, draw_distance, segments, segment_length, track_length, player_x, camera_height, camera_depth, @@ -247,7 +245,7 @@ function system:draw() fogDensity ) love.graphics.pop() - love.graphics.print(string.format("%s,%s,%s",player_x, scroll, player_z), 20, 20) + love.graphics.print(string.format("%s,%s,%s",player_x, player_y, player_z), 20, 20) end end diff --git a/game/src/world/2_town_square/template/road.lua b/game/src/world/2_town_square/template/road.lua index fd219dc..0779080 100644 --- a/game/src/world/2_town_square/template/road.lua +++ b/game/src/world/2_town_square/template/road.lua @@ -1,4 +1,5 @@ local perspective = require("src.world.2_town_square.component.perspective") +local pos3d = require("src.world.2_town_square.component.pos3d") local template = {} @@ -11,7 +12,7 @@ template.default_data = { fog_density = 0, -- player - player_x = 0, + pos = {0, 1, 0}, player_width = 50, centrifugal = 0.3, player_speed = 0, @@ -27,7 +28,6 @@ template.default_data = { segment_count = 500, rumble_length = 3, - scroll = 1, segment_path = "data/map/segment.json", segment_sprite_map_path = "data/map/sprites.json", @@ -42,11 +42,12 @@ function template.assemble(e, data) e:give(perspective.dict.resolution, data.resolution.x, data.resolution.y) e:give(perspective.dict.road_width, data.road_width) e:give(perspective.dict.rumble_length, data.rumble_length) - e:give(perspective.dict.scroll, data.scroll) e:give(perspective.dict.segment_count, data.segment_count) e:give(perspective.dict.segment_length, data.segment_length) e:give(perspective.dict.segment_path, data.segment_path) e:give(perspective.dict.segment_sprite_map_path, data.segment_sprite_map_path) + + e:give(pos3d.dict.pos, data.pos[1], data.pos[2], data.pos[3]) end return template