diff options
| author | Alexander M Pickering <alex@cogarr.net> | 2025-01-26 15:21:55 -0600 |
|---|---|---|
| committer | Alexander M Pickering <alex@cogarr.net> | 2025-01-26 15:21:55 -0600 |
| commit | f7a6cb3573957ae617bf88a05f72cb22bb912abd (patch) | |
| tree | 9bd8dabfcbd5808a74d995c93dc6f3f611da13f8 | |
| parent | 5846a4fea8d6a993466a792977128d21a18587bc (diff) | |
| download | ggj25-f7a6cb3573957ae617bf88a05f72cb22bb912abd.tar.gz ggj25-f7a6cb3573957ae617bf88a05f72cb22bb912abd.tar.bz2 ggj25-f7a6cb3573957ae617bf88a05f72cb22bb912abd.zip | |
Revert "final commit"
This reverts commit c39ff632b46c179709101c5b50a061ebd723689f.
| -rw-r--r-- | AUTHORS | 2 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | README.md | 6 | ||||
| -rw-r--r-- | data_src/world/rocks_normal.png | bin | 138929 -> 1899810 bytes | |||
| -rw-r--r-- | data_src/world/sea_normal.png | bin | 121381 -> 1785825 bytes | |||
| -rw-r--r-- | data_src/world/wall_inside_normal.png | bin | 65577 -> 468560 bytes | |||
| -rw-r--r-- | data_src/world/wall_outside_normal.png | bin | 89596 -> 613496 bytes | |||
| -rw-r--r-- | src/bobber.moon | 39 | ||||
| -rw-r--r-- | src/controllers/fish.moon | 33 | ||||
| -rw-r--r-- | src/controllers/mouse_keyboard.moon | 86 | ||||
| -rw-r--r-- | src/islandgen.moon | 57 | ||||
| -rw-r--r-- | src/main.lua | 6 | ||||
| -rw-r--r-- | src/menu/main.moon | 6 | ||||
| -rw-r--r-- | src/player.moon | 7 | ||||
| -rw-r--r-- | src/prefab/cabin.moon | 28 | ||||
| -rw-r--r-- | src/settings.moon | 2 | ||||
| -rw-r--r-- | src/shader_shim.moon | 24 | ||||
| -rw-r--r-- | src/shaders/land.frag | 16 | ||||
| -rw-r--r-- | src/shaders/stars.lua | 2 | ||||
| -rw-r--r-- | src/spawn_fish.moon | 141 | ||||
| -rw-r--r-- | src/ui.moon | 12 | ||||
| -rw-r--r-- | src/ui/textbox.moon | 1 | ||||
| -rw-r--r-- | src/world.moon | 5 | ||||
| -rw-r--r-- | src/worldgen.moon | 6 |
24 files changed, 160 insertions, 321 deletions
@@ -1,8 +1,6 @@ Art - opengameart.org user Buch - ui sprites (CC-BY) opengameart.org user Yughues - textures (CC0) -opengameart.org user Admurin - ui sprites (GPL3) -opengameart.org user JStatz - textures (CC0) Software - Matthias Richter (github.com user vrld) - hc.lua (MIT) @@ -33,7 +33,7 @@ include data_src/world/Makefile assets=$(assets_ui_built) $(assets_world_built) data/favicon.ico built=$(built_moon) $(built_tl) $(built_lua) $(built_lua_hc) $(built_js) $(assets) $(built_shaders) -built_dbg=$(built) #$(dbg_moon) +built_dbg=$(built) $(dbg_moon) all: ggj25/amulet.js ggj25/amulet.wasm ggj25/data.pak ggj25/index.html diff --git a/README.md b/README.md deleted file mode 100644 index e07d473..0000000 --- a/README.md +++ /dev/null @@ -1,6 +0,0 @@ - -# Night fishing - -A short game made for global game jam 2025 -Go fishing by lamplight, look for disturbences in the water -WASD + left click diff --git a/data_src/world/rocks_normal.png b/data_src/world/rocks_normal.png Binary files differindex 6d25ad5..b03e87c 100644 --- a/data_src/world/rocks_normal.png +++ b/data_src/world/rocks_normal.png diff --git a/data_src/world/sea_normal.png b/data_src/world/sea_normal.png Binary files differindex a8abdda..8298bf6 100644 --- a/data_src/world/sea_normal.png +++ b/data_src/world/sea_normal.png diff --git a/data_src/world/wall_inside_normal.png b/data_src/world/wall_inside_normal.png Binary files differindex 6a8b1a0..8d38da3 100644 --- a/data_src/world/wall_inside_normal.png +++ b/data_src/world/wall_inside_normal.png diff --git a/data_src/world/wall_outside_normal.png b/data_src/world/wall_outside_normal.png Binary files differindex 0b47790..097bfc1 100644 --- a/data_src/world/wall_outside_normal.png +++ b/data_src/world/wall_outside_normal.png diff --git a/src/bobber.moon b/src/bobber.moon index cee0f14..6f52c6b 100644 --- a/src/bobber.moon +++ b/src/bobber.moon @@ -1,8 +1,6 @@ world = require("world") sprites = require("world.sprites") ecs = require("ecs") -win = require("window") -colors = require("color") class BobberGraphicsComponent extends world.GraphicsComponent @loctbl = { @@ -18,7 +16,7 @@ class BobberGraphicsComponent extends world.GraphicsComponent populate_buf: (geom_view, normal_view, offset) => @buf = geom_view h = 0.1 - uv = sprites.bobber_normal + uv = sprites.player_normal utbl = { [-1]: {uv.s1, uv.t1} [1]: {uv.s2, uv.t2} @@ -29,22 +27,6 @@ class BobberGraphicsComponent extends world.GraphicsComponent loctbl = @@loctbl[i] geom_view[i] = vec3(@@loctbl[i][1] * h, @@loctbl[i][2] * h, z) + vec3(@properties.pos.x, @properties.pos.y, z) normal_view[i] = vec2(utbl[@@loctbl[i][1]][1], utbl[@@loctbl[i][2]][2]) - join: (entity) => - super(entity) - aspect = win.width / win.height - program = @.node("use_program") - graphic = entity\get("bobber") - @node\remove(program) - @node\append(am.blend("alpha")\append(program)) - bind = @.node("bind") - [[ - for name, color in pairs(colors.am_lake_color) - bind[name] = color - ]] - bind.water = 1 - @ent = entity - @last_bubble = am.current_time! - comp = @ class BobberPhysicsComponent extends world.PhysicsComponent new: (name, properties, shape, args) => @@ -73,5 +55,24 @@ class Bobber extends ecs.Entity return false +class BubblesGraphicsComponent extends world.GraphicsComponent + buf_size: () => + 6 + populate_buf: (geom_view, normal_view, offset) => + h = 1 + geom_view[1] = vec3(-h,-h,1) + geom_view[2] = vec3(-h,h,1) + geom_view[3] = vec3(-h,-h,1) + geom_view[4] = vec3(h,h,1) + geom_view[5] = vec3(h,-h,1) + geom_view[6] = vec3(-h,-h,1) + uv = sprites.player_normal + normal_view[1] = vec2(uv.s1,uv.t1) + normal_view[2] = vec2(uv.s1,uv.t2) + normal_view[3] = vec2(uv.s2,uv.t2) + normal_view[4] = vec2(uv.s2,uv.t2) + normal_view[5] = vec2(uv.s2,uv.t1) + normal_view[6] = vec2(uv.s1,uv.t1) + bind = @.node("bind") {:BobberGraphicsComponent, :BobberPhysicsComponent, :Bobber} diff --git a/src/controllers/fish.moon b/src/controllers/fish.moon index dc3b1e9..9ba2d83 100644 --- a/src/controllers/fish.moon +++ b/src/controllers/fish.moon @@ -2,16 +2,12 @@ ecs = require("ecs") world = require("world") controller = {} - - - class FishControllerComponent extends ecs.Component new: () => --print("Fish controller started") @node = am.group! join: (entity) => super(entity) - @ent = entity graphic = entity\get("graphic") assert(graphic, "Fish controller must have a graphic") pred_component = entity\get("pred") @@ -31,7 +27,7 @@ class FishControllerComponent extends ecs.Component while comp.state == "swimming" comp.state = "waiting" start_wait = world.sync_time! - while world.sync_time! - start_wait < 8 + while world.sync_time! - start_wait < 4 --TODO: look for nearby hooks and get caught coroutine.yield! if comp.state == "waiting" @@ -45,33 +41,12 @@ class FishControllerComponent extends ecs.Component pick_next_location: () => -- Pick somewhere to swim based on where we are? -- This can only be done on the host. - --TODO: spawn fish on all sides. - -- everything has to be floats so math.random returns a float. if @net.properties.pos.x > 10 -- pick somewhere to the right @net.properties.next_loc = vec2( - math.random(11.1,15), - math.random(-10.1,10) - ) - elseif @net.properties.pos.x < -10 - @net.properties.next_loc = vec2( - math.random(-15.1,-11) - math.random(-10.1,10) + math.random(10.3,12), + math.random(-10,10) ) - elseif @net.properties.pos.y > 10 - @net.properties.next_loc = vec2( - math.random(-10.1,10) - math.random(11.1,15) - ) - elseif @net.properties.pos.y < -10 - @net.properties.next_loc = vec2( - math.random(-10.1,10) - math.random(-15.1,-11) - ) - else - --If none of these apply, we're stuck on land somehow, delete ourselves - @entity\destroy! - - @net.properties.next_loc_time = world.sync_time! + @net.properties.next_loc_time = world.sync_time! --@net.properties.next_loc = @net.properties.pos + vec2(0,1) --@net.properties.next_loc_time = world.sync_time! --print("Picking next location, it was ", @net.properties.next_loc) diff --git a/src/controllers/mouse_keyboard.moon b/src/controllers/mouse_keyboard.moon index cc33a72..28c4f58 100644 --- a/src/controllers/mouse_keyboard.moon +++ b/src/controllers/mouse_keyboard.moon @@ -5,7 +5,6 @@ fish = require("spawn_fish") rng = require("rng") us = require("ui.sprites") ui = require("ui") -minigame = require("minigame") assert(fish.Fish, "Failed to find fish from spawn_fish") controller = {} @@ -69,7 +68,6 @@ class MouseKeyboardControllerComponent extends ecs.Component f = ent.bobber.which f.state = "catching" comp\start_minigame(f) - -- TODO: make net destory the fish, not the controller f\destroy! elseif net_component.properties.reeling > 0 print("Reeling in fish!") @@ -90,9 +88,87 @@ class MouseKeyboardControllerComponent extends ecs.Component ) start_minigame: (fish) => @minigame_started = true - pull = () -> - win\mouse_pressed("left") - minigame.run(@net, @bobber, fish, pull) + node = am.group! + hook_location = 0 -- 0 -> 1? + hook_width = 5 + hook_gravity = 5 -- how quickly do we fall + hook_force = 80 -- how quickly do we accelerate + hook_vel = 0 + hook_length = 1 + hook_bounce_damp = 0.2 --how elastic is the bottom and top? + fish_width = fish.width + fish_force = 100 + fish_gravity = 0 + fish_activity = 0.1 + fish_vel = 0 + fish_bounce_damp = 1 -- perfectly elsastic bounce + reel_progress = 0 + escape_progress = 0 + reel_speed = 0.1 + escape_speed = 0.01 + reel_cutoff = 10 + escape_cutoff = 10 + fish_location = math.random(-256,256) + bar_sprite = require("ui.button")(40,-256,64,512,"").node + node\append(bar_sprite) + hook_sprite = am.translate(0,0)\append(am.scale(1)\append(am.sprite(us.hook))) + node\append(hook_sprite) + fish_g_sprite = am.sprite(us.fish_purple) + fish_b_sprite = am.sprite(us.fish_blue) + fish_sprite = am.translate(0,0)\append(am.scale(1)\append(am.group(fish_g_sprite, fish_b_sprite))) + node\append(fish_sprite) + ui.node\append(node) + net = @net + bobber = @bobber + assert(bobber, "Failed to find bobber") + node\action(() => + if win\mouse_pressed("left") + hook_vel += hook_force + else + hook_vel -= hook_gravity + hook_location += hook_vel * am.delta_time + if hook_location < -256 + 16 -- bounce + hook_vel = -hook_vel * hook_bounce_damp + hook_location = -256 + 16 + elseif hook_location > 256 - 16 + hook_vel = -hook_vel * hook_bounce_damp + hook_location = 256 - 16 + if math.random! < fish_activity + fish_vel = fish_force * math.random(-1,1) + fish_location += fish_vel * am.delta_time + if fish_location < -256 + 16 -- bounce + fish_vel = -fish_vel * fish_bounce_damp + fish_location = -256 + 16 + elseif fish_location > 256 - 16 + fish_vel = -fish_vel * fish_bounce_damp + fish_location = 256 - 16 + + if hook_location - hook_width > fish_location - fish_width and hook_location + hook_width < fish_location + fish_width + fish_b_sprite.hidden = true + fish_g_sprite.hidden = false + reel_progress += reel_speed + else + escape_progress += escape_speed + fish_g_sprite.hidden = true + fish_b_sprite.hidden = false + if reel_progress > reel_cutoff + net.properties.fish_caught += 1 + net.properties.casted = false + net.properties.reeling = 0 + ui.node\remove(node) + bobber.which = nil + elseif escape_progress > escape_cutoff + net.properties.casted = false + net.properties.reeling = 0 + ui.node\remove(node) + bobber.which = nil + --print("reel:", reel_progress, "escape:", escape_progress) + -- Updates all sprites at the end? + hook_sprite("translate").y = hook_location + fish_sprite("translate").y = fish_location + + ) + --error("Starting fishing minigame") controller.text_size = 1 controller.Controller = MouseKeyboardControllerComponent diff --git a/src/islandgen.moon b/src/islandgen.moon index dd9473b..df9aa14 100644 --- a/src/islandgen.moon +++ b/src/islandgen.moon @@ -82,45 +82,23 @@ class IslandGraphicsComponent extends world.GraphicsComponent --bind.lamp1 = vec4(world.world_x + (0.5 * 4 * aspect) - 0.3, world.world_y + (0.5 * 4 * (aspect_inv)) + 0.7, 0, 2.2) --no idea why these magic numbers --bind.lamp2 = vec4(0,0,0,3) buf_size: () => - squares = 16 - triangles_per_square = 2 - vertexes_per_triangle = 3 - floats_per_vertex = 3 - squares * triangles_per_square * vertexes_per_triangle - --6 + 6 populate_buf: (geom_view, normal_view, offset) => z = 0 size = 10 - --@lamp = world.level.add_lamp(vec4(0,0,10,2)) - fuv = sprites.rocks_normal - floor = (geom, uv, offset, start, finish) -> - geom[offset + 0] = vec3(start.x,start.y,z) - geom[offset + 1] = vec3(start.x,finish.y,z) - geom[offset + 2] = vec3(finish.x,finish.y,z) - geom[offset + 3] = vec3(finish.x,finish.y,z) - geom[offset + 4] = vec3(finish.x,start.y,z) - geom[offset + 5] = vec3(start.x,start.y,z) - normal_view[offset + 0] = vec2(fuv.s1, fuv.t1) - normal_view[offset + 1] = vec2(fuv.s1, fuv.t2) - normal_view[offset + 2] = vec2(fuv.s2, fuv.t2) - normal_view[offset + 3] = vec2(fuv.s2, fuv.t2) - normal_view[offset + 4] = vec2(fuv.s2, fuv.t1) - normal_view[offset + 5] = vec2(fuv.s1, fuv.t1) - x_panels = 4 - y_panels = 4 - x_stride = (size * 2) / x_panels - y_stride = (size * 2) / y_panels - j = 1 - for floorx = 1,x_panels - for floory = 1,y_panels - floor( - geom_view, - normal_view, - j, - vec2(-size + (x_stride*(floorx-1)), -size + (y_stride*(floory-1))), - vec2(-size + (x_stride*floorx), -size + (y_stride*floory)) - ) - j += 6 + --@lamp = world.level.add_lamp(vec4(0,0,0,3)) + geom_view[1] = vec3(-size,-size,z) + geom_view[2] = vec3(-size,size,z) + geom_view[3] = vec3(size,size,z) + geom_view[4] = vec3(size,size,z) + geom_view[5] = vec3(size,-size,z) + geom_view[6] = vec3(-size,-size,z) + normal_view[1] = vec2(sprites.rocks_normal.s1, sprites.rocks_normal.t1) + normal_view[2] = vec2(sprites.rocks_normal.s1, sprites.rocks_normal.t2) + normal_view[3] = vec2(sprites.rocks_normal.s2, sprites.rocks_normal.t2) + normal_view[4] = vec2(sprites.rocks_normal.s2, sprites.rocks_normal.t2) + normal_view[5] = vec2(sprites.rocks_normal.s2, sprites.rocks_normal.t1) + normal_view[6] = vec2(sprites.rocks_normal.s1, sprites.rocks_normal.t1) class WaterGraphicsComponent extends world.GraphicsComponent action: (bind) => @@ -198,12 +176,7 @@ gen.protogen = (seed) -> IslandGraphicsComponent("island") }) ecs.Entity(nil, { - water: WaterGraphicsComponent("water") - spawner1: fish.SpawnFishComponent("spawner",{},vec4(10.3,-10,15,15)) - spawner2: fish.SpawnFishComponent("spawner",{},vec4(-10,10.3,15,15)) - spawner3: fish.SpawnFishComponent("spawner",{},vec4(-15,-15,9.7,10)) - spawner4: fish.SpawnFishComponent("spawner",{},vec4(-15,-15,10,9.7)) + WaterGraphicsComponent("water") }) - --ecs.Entity(nil, { gen diff --git a/src/main.lua b/src/main.lua index d971d5e..6cfebf4 100644 --- a/src/main.lua +++ b/src/main.lua @@ -27,9 +27,9 @@ win.scene:append(ui.node) local router = require("router") win.scene:append(router.node) -- Needed to pump the net state machine -local menu = require("menu.main") -menu.initalize() ---require("worldgen") +--input_menu = require("menu.input") +--input_menu.initalize() +require("worldgen") --require("world_test") --require("net_test") --require("ui_test") diff --git a/src/menu/main.moon b/src/menu/main.moon index f7ead73..03adc0f 100644 --- a/src/menu/main.moon +++ b/src/menu/main.moon @@ -12,12 +12,11 @@ buttons_data = { require("menu.settings").initalize! } { - text: "Start" + text: "Join" on: () => @.text = "Loading..." menu.destroy! - require("worldgen") - --require("menu.join").initalize! + require("menu.join").initalize! } } menu.initalize = () -> @@ -29,6 +28,5 @@ menu.initalize = () -> menu.destroy = () -> for button in *buttons ui.delete(button) - buttons = {} menu diff --git a/src/player.moon b/src/player.moon index f43407c..1083e06 100644 --- a/src/player.moon +++ b/src/player.moon @@ -67,8 +67,7 @@ class PlayerLineGraphicComponent extends world.GraphicsComponent direction += math.pi rot = math.rotate4(direction) move2 = vec3(s.pred.properties.pos, 0) - cast_end = s.pred.properties.cast_end - scale = math.sqrt(cast_end / math.length(offset)) * math.length(offset) + scale = s.pred.properties.cast_end z = -0.12 local1 = vec4(-width, 0,z,1) * rot local2 = vec4(-width, scale,z,1) * rot @@ -183,7 +182,7 @@ class PlayerPredictedComponent extends ecs.PredictedComponent new: (name) => super(name, {vel: vec2(0,0), pos:vec2(0,0), accel: vec2(0,0), cast_end: 0, can_reel:false}, "net", { accel:() => - vec2(@net.properties.accel) * (world.level.on_land(@properties.pos) and 1 or 0.5) * (@net.properties.drown and 0 or 1) + vec2(@net.properties.accel) * (world.level.on_land(@properties.pos) and 1 or 0.5) vel: () => --print("Net is ", @net.properties) delta = world.sync_time! - @net.properties.last_update @@ -228,7 +227,7 @@ class PlayerPredictedComponent extends ecs.PredictedComponent if land @node\action("stepsfx", am.play(60861008 + math.random(10) * 100, false, 1, settings.volume)) else - @node\action("stepsfx", am.play(3444209 + math.random(8) * 10, false, 1, settings.volume)) + @node\action("stepsfx", am.play(78618302 + math.random(8) * 10, false, 1, settings.volume)) @last_step = am.current_time! if @properties.cast_end > 0 and @properties.cast_end < 0.1 @node\action("castsfx", am.play(41228309, false, 1, settings.volume)) diff --git a/src/prefab/cabin.moon b/src/prefab/cabin.moon index b56ba1c..915ea92 100644 --- a/src/prefab/cabin.moon +++ b/src/prefab/cabin.moon @@ -17,9 +17,6 @@ class CabinGraphicsComponent extends world.GraphicsComponent iuv = sprites.wall_inside_normal ouv = sprites.wall_outside_normal fuv = sprites.floor_normal - tutorial_keys = false - tutorial_mouse = false - tutorial_visual = false wall = (geom, uv, offset, start, finish, texture) -> geom[offset + 0] = vec3(start.x, start.y, z1) geom[offset + 1] = vec3(start.x, start.y, z2) @@ -35,33 +32,22 @@ class CabinGraphicsComponent extends world.GraphicsComponent uv[offset+5] = vec2(texture.s1,texture.t1) floor = (geom, uv, offset, start, finish) -> - tuv = fuv - if not tutorial_keys - tuv = sprites.help_1 - tutorial_keys = true - elseif not tutorial_mouse - tuv = sprites.help_2 - tutorial_mouse = true - elseif not tutorial_visual - tuv = sprites.help_3 - tutorial_visual = true geom[offset + 0] = vec3(start.x,start.y,z1) geom[offset + 1] = vec3(start.x,finish.y,z1) geom[offset + 2] = vec3(finish.x,finish.y,z1) geom[offset + 3] = vec3(finish.x,finish.y,z1) geom[offset + 4] = vec3(finish.x,start.y,z1) geom[offset + 5] = vec3(start.x,start.y,z1) - normal_view[offset + 0] = vec2(tuv.s1, tuv.t1) - normal_view[offset + 1] = vec2(tuv.s1, tuv.t2) - normal_view[offset + 2] = vec2(tuv.s2, tuv.t2) - normal_view[offset + 3] = vec2(tuv.s2, tuv.t2) - normal_view[offset + 4] = vec2(tuv.s2, tuv.t1) - normal_view[offset + 5] = vec2(tuv.s1, tuv.t1) + normal_view[offset + 0] = vec2(fuv.s1, fuv.t1) + normal_view[offset + 1] = vec2(fuv.s1, fuv.t2) + normal_view[offset + 2] = vec2(fuv.s2, fuv.t2) + normal_view[offset + 3] = vec2(fuv.s2, fuv.t2) + normal_view[offset + 4] = vec2(fuv.s2, fuv.t1) + normal_view[offset + 5] = vec2(fuv.s1, fuv.t1) --left wall j = 1 - --wall(geom_view, normal_view, j, vec2(-2,-2),vec2(-2,0), sprites.wall_inside_normal) - --lamp = world.level.add_lamp(vec4(0,0,1,2)) + wall(geom_view, normal_view, j, vec2(-2,-2),vec2(-2,0), sprites.wall_inside_normal) j += 6 for floorx = 1,3 for floory = 1,3 diff --git a/src/settings.moon b/src/settings.moon index 5db1401..0cd1d76 100644 --- a/src/settings.moon +++ b/src/settings.moon @@ -3,7 +3,7 @@ settings = {} -- Passed to the land shader to add noise to lamps -settings.streamer = 1 +settings.streamer = 0 -- Volume for sound effects settings.volume = 1 diff --git a/src/shader_shim.moon b/src/shader_shim.moon index 77ad5a2..76e0aec 100644 --- a/src/shader_shim.moon +++ b/src/shader_shim.moon @@ -6,21 +6,17 @@ inputs = { "@height": win.height } -verts, frags = {}, {} shaders = setmetatable({},{ __index:(self, key) -> - if not (verts[key] and frags[key]) - vert_name = "shaders/" .. key .. ".vert" - frag_name = "shaders/" .. key .. ".frag" - vert = assert(am.load_string(vert_name), "Failed to find " .. vert_name) - frag = assert(am.load_string(frag_name), "Failed to find " .. frag_name) - vert_subbed = vert\gsub("@%b{}",(n) -> tostring(inputs[n])) - frag_subbed = frag\gsub("@%b{}",(n) -> tostring(inputs[n])) - succ, program = pcall(am.program, vert_subbed, frag_subbed) - if not succ - error(string.format("Failed compiling shader %q: %s vertex shader: %s fragment shader: %s", key, program, vert_subbed, frag_subbed)) - verts[key] = vert_subbed - frags[key] = frag_subbed - am.use_program(am.program(verts[key], frags[key])) + vert_name = "shaders/" .. key .. ".vert" + frag_name = "shaders/" .. key .. ".frag" + vert = assert(am.load_string(vert_name), "Failed to find " .. vert_name) + frag = assert(am.load_string(frag_name), "Failed to find " .. frag_name) + vert_subbed = vert\gsub("@%b{}",(n) -> tostring(inputs[n])) + frag_subbed = frag\gsub("@%b{}",(n) -> tostring(inputs[n])) + succ, program = pcall(am.program, vert_subbed, frag_subbed) + if not succ + error(string.format("Failed compiling shader %q: %s vertex shader: %s fragment shader: %s", key, program, vert_subbed, frag_subbed)) + am.use_program(am.program(vert_subbed, frag_subbed)) }) shaders diff --git a/src/shaders/land.frag b/src/shaders/land.frag index 54ca24d..1eb8d93 100644 --- a/src/shaders/land.frag +++ b/src/shaders/land.frag @@ -19,7 +19,6 @@ uniform float time; //used for noise uniform sampler2D atlas; uniform float nlamps; uniform float water; -//uniform sampler2D bubbles; varying vec2 worldxy; varying vec2 norm; @@ -79,21 +78,8 @@ void main() { float rng = random(vec2(coord.x, coord.y) + vec2(color, time)); color -= (pow(rng / 1.3, 10. * color)) * streamer; // add noise to water - if(water > 1.){ + if(water > 1.) color += (noise(coord.xy + vec2(time, time)) - 0.0) * 0.1; - } - if(water > 2.){ - color -= noise(coord.xy + vec2(time,time)) * 0.3; - } - /* - for(int i = 1; i < 1024; i++){ - vec4 bubble = texture2D(bubbles,vec2(i,0)); - /* - if(distance(bubble.xy, coord.xy) < 10.){ - color = 1.; - } - */ - //} /* */ if(color > 1.) gl_FragColor = highlight * normal.a; diff --git a/src/shaders/stars.lua b/src/shaders/stars.lua index 95938b4..3e4138e 100644 --- a/src/shaders/stars.lua +++ b/src/shaders/stars.lua @@ -68,7 +68,7 @@ node:action(function(self) self("bind").world_y = world.world_y local lamps = world.level.lamps_on_screen() for i,v in pairs(lamps) do - --print("Setting lamp", i, "to", v) + print("Setting lamp", i, "to", v) self("bind")["lamp" .. tostring(i)] = v end end) diff --git a/src/spawn_fish.moon b/src/spawn_fish.moon index 1e5628f..109b45d 100644 --- a/src/spawn_fish.moon +++ b/src/spawn_fish.moon @@ -3,92 +3,9 @@ ecs = require("ecs") world = require("world") win = require("window") sprites = require("world.sprites") -colors = require("color") - -class BubbleGraphicsComponent extends world.GraphicsComponent - @loctbl = { - {-1,-1} - {-1,1} - {1,1} - {1,1} - {1,-1} - {-1,-1} - } - @max_bubbles = 6--128 - @bubble_anim = { - sprites.sphere_normal_1 - sprites.sphere_normal_2 - sprites.sphere_normal_3 - sprites.sphere_normal_4 - sprites.sphere_normal_5 - sprites.sphere_normal_6 - } - buf_size: () => - @@max_bubbles * 6 - populate_buf: (geom_buffer, uv_buffer, offset) => - -- we only need to store 1 frame info per 6 vertexes - @bubble_frames = am.buffer(@buf_size! / 6)\view("ubyte") - @buf = geom_buffer - @uv = uv_buffer - for i = 1, @@max_bubbles * 6-- must be divisible by 6 - geom_buffer[i] = vec3(0,0,0) - uv_buffer[i] = vec2(1,0) - join: (entity) => - super(entity) - aspect = win.width / win.height - program = @.node("use_program") - @cursor = 0 - @node\remove(program) - @node\append(am.blend("off")\append(program)) - bind = @.node("bind") - bind.water = 3 - for name, color in pairs(colors.am_lake_color) - bind[name] = color - @ent = entity - comp = @ - max_frames = @buf_size! / 6 - bf = @bubble_frames - uv = @uv - buf = @buf - @node\action(() -> - bubble_anim = comp.__class.bubble_anim - for i = 1,max_frames - last_frame = bf[i] - if last_frame < 6 - next_frame = last_frame + 1 - nuv = bubble_anim[next_frame] - ustart = (i-1) * 6 - uv[ustart + 1] = vec2(nuv.s1, nuv.t1) - uv[ustart + 2] = vec2(nuv.s2, nuv.t1) - uv[ustart + 3] = vec2(nuv.s2, nuv.t2) - uv[ustart + 4] = vec2(nuv.s2, nuv.t2) - uv[ustart + 5] = vec2(nuv.s1, nuv.t2) - uv[ustart + 6] = vec2(nuv.s1, nuv.t1) - bf[i] += 1 - - ) - add_bubble: (pos) => - h = 0.1 - --print("About to add bubble, cursor is", @cursor) - @bubble_frames[(@cursor / 6)+1] = 1 - for i = 1,6 - @buf[@cursor + i] = vec3(@@loctbl[i][1]*h + pos.x, @@loctbl[i][2]*h + pos.y, 0) - @cursor += 6 - if @cursor == (@@max_bubbles * 6) - @cursor = 0 - -[[ -bg = BubbleGraphicsComponent("graphic",{}) -bubble_ent = ecs.Entity(nil,{ - graphic: bg -}) -bubble = (pos) -> - -- Create a bubble - bg\add_bubble(pos) - ]] class FishGraphicComponent extends world.GraphicsComponent - @fish_size = 0.3 + @fish_size = 0.5 @static = false @loctbl = { {-1,-1} @@ -98,7 +15,6 @@ class FishGraphicComponent extends world.GraphicsComponent {1,-1} {-1,-1} } - @bubble_freq = 1 buf_size: () => 6 populate_buf: (geom_view, normal_view, offset) => @@ -110,7 +26,7 @@ class FishGraphicComponent extends world.GraphicsComponent for i = 1,6 loctbl = @@loctbl[i] geom_view[i] = vec3(@@loctbl[i][1] * h, @@loctbl[i][2] * h, -1.5) - uv = sprites.fish_normal + uv = sprites.player_normal normal_view[1] = vec2(uv.s1,uv.t1) normal_view[2] = vec2(uv.s1,uv.t2) normal_view[3] = vec2(uv.s2,uv.t2) @@ -126,32 +42,20 @@ class FishGraphicComponent extends world.GraphicsComponent assert(@pred, "Fish graphic must have a predicted component") @node\remove(program) @node\append(am.blend("alpha")\append(program)) - bind = @.node("bind") - for name, color in pairs(colors.am_lake_color) - bind[name] = color - bind.water = 3 @ent = entity - @last_bubble = am.current_time! comp = @ move: (pos) => h = @@fish_size / 2 --print("Calling move with", pos) --if @ent.state ~= "swimming" -- error("called move while not swimming") - --@phys.shape\moveTo(pos.x,pos.y) for i = 1,6 @buf[i] = vec3(@@loctbl[i][1] * h, @@loctbl[i][2] * h, -0.13) + vec3(pos.x, pos.y, 0) - --Fuck the bubles, the fish looks better without em - --if am.current_time! - @last_bubble > @@bubble_freq - --world.Bubble(pos) - --bubble(pos) - --print("should spawn bubble") - --@last_bubble = am.current_time! friction = 0.1 class FishPredictedComponent extends ecs.PredictedComponent new: (id) => - fish_speed = 0.0001 + fish_speed = 0.00001 super(id, {accel: vec2(0,0), vel: vec2(0,0), pos: vec2(0,0)}, "netc", { accel: () => --print("ent state:", @cc.state) @@ -178,7 +82,6 @@ class FishPredictedComponent extends ecs.PredictedComponent @gc = entity\get("graphic") @properties.pos = @net.properties.pos @cc = entity\get("control") - @pc = entity\get("phys") @ent = entity --print("Got graphic component:",@gc, @gc.node) --print("And my node is", @node) @@ -192,13 +95,8 @@ class FishPredictedComponent extends ecs.PredictedComponent if @ent.state == "catching" @gc.node.hidden=true else - --TODO: Fish debugging - --@gc.node.hidden=true @gc\move(@properties.pos) - @pc.shape\moveTo(@properties.pos.x, @properties.pos.y) -max_fish = 100 -nfish = 0 class Fish extends ecs.Entity new: (id, pos) => @width = 40 -- TODO: randomize fish width @@ -210,48 +108,23 @@ class Fish extends ecs.Entity phys: world.PhysicsComponent("phys",{},"circle",{pos.x, pos.y, @width / 256}) } super(id, components) - nfish += 1 destroy: (...) => super(...) + error("Where did fish go") class SpawnFishComponent extends ecs.Component new: (id, properties, spawnrect) => super(id, properties) - @spawnrect = spawnrect - @spawned = 0 - @last_spawned = world.sync_time! - @spawn_freq = 8 join: (entity) => - --TODO: only do this on the elected peer - graphic = entity\get("water") - assert(graphic, "Spawn fish must have a graphic node") - comp = @ - graphic.node\action(() => - if nfish < max_fish and world.sync_time! - comp.last_spawned > comp.spawn_freq - comp.last_spawned = world.sync_time! - comp\spawn_fish! - ) - for i = 1,10 do - @spawn_fish! - spawn_fish: () => - rngx = math.random(@spawnrect.x, @spawnrect.z) - rngy = math.random(@spawnrect.y, @spawnrect.w) - Fish(nil, vec2(rngx, rngy)) - [[ + graphic = entity\get("graphic") router = router.r! set_spawnable = () -> if router.state == "elected" graphic\action(() -> error("Spawn fish callback") ) - ]] - --set_spawnable! - --router\onchange(set_spawnable) - [[ - graphic\action(() -> - error("spawn fish component") - ) - ]] + set_spawnable! + router\onchange(set_spawnable) {:Fish, :SpawnFishComponent} diff --git a/src/ui.moon b/src/ui.moon index 862bec0..3e3a974 100644 --- a/src/ui.moon +++ b/src/ui.moon @@ -5,7 +5,6 @@ util = require("util") Button = require("ui.button") Joystick = require("ui.joystick") Textbox = require("ui.textbox") -Checkbox = require("ui.checkbox") ui_world = hc.new(64) @@ -33,17 +32,6 @@ ui.button = (x,y,width,height,text,controller_binds) -> ui.events.controller[bind] = button button -ui.checkbox = (x,y,width,height,text,controller_binds) -> - controller_binds = controller_binds or {} - checkbox = Checkbox(x,y,width,height,text) - ui.node\append(checkbox.node) - bounds = ui_world\rectangle(x,y,width,height) - ui.events.touch[bounds] = checkbox - ui.events.mouse[bounds] = checkbox - for bind in *controller_binds - ui.events.controller[bind] = checkbox - checkbox - ui.click = (x,y) -> ui_world\shapesAt(x,y) diff --git a/src/ui/textbox.moon b/src/ui/textbox.moon index e72de54..bdb8e13 100644 --- a/src/ui/textbox.moon +++ b/src/ui/textbox.moon @@ -108,7 +108,6 @@ class Textbox extends Button elseif key == "kp_enter" or key == "enter" if @on @on(e) - @up! elseif key == "escape" @up! else diff --git a/src/world.moon b/src/world.moon index 5c76187..df3d82f 100644 --- a/src/world.moon +++ b/src/world.moon @@ -98,6 +98,7 @@ class PhysicsComponent extends ecs.Component collisions: () => x.level.physics_world\collisions(@shape) + class GraphicsComponent extends ecs.Component new: (name, properties) => @node = am.group! @@ -114,7 +115,7 @@ class GraphicsComponent extends ecs.Component 1, 0, 0, 0, 0, aspect, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 3.5 + 0, 0, 0, 4 ) binds = { MV: s_mv @@ -128,7 +129,6 @@ class GraphicsComponent extends ecs.Component world_y: x.world_y rot: 0 water: 0 - --bubbles: bubble_texture } for color, value in pairs(color.am_color) binds[color] = value @@ -179,5 +179,4 @@ class GraphicsComponent extends ecs.Component x.GraphicsComponent = GraphicsComponent x.PhysicsComponent = PhysicsComponent -x.Bubble = Bubble x diff --git a/src/worldgen.moon b/src/worldgen.moon index c3e7c94..ecd3943 100644 --- a/src/worldgen.moon +++ b/src/worldgen.moon @@ -17,7 +17,5 @@ cabin = require("prefab.cabin") char = player.ProtoPlayer() gc = char\get("graphic") nc = char\get("net") -[[ -nc.properties.accel = vec2(0.1,0) -nc.properties.last_update = am.current_time! - 0.1 -]] +--nc.properties.accel = vec2(0.1,0) +--nc.properties.last_update = am.current_time! - 0.1 |
