summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bobber.moon39
-rw-r--r--src/controllers/fish.moon33
-rw-r--r--src/controllers/mouse_keyboard.moon86
-rw-r--r--src/islandgen.moon57
-rw-r--r--src/main.lua6
-rw-r--r--src/menu/main.moon6
-rw-r--r--src/player.moon7
-rw-r--r--src/prefab/cabin.moon28
-rw-r--r--src/settings.moon2
-rw-r--r--src/shader_shim.moon24
-rw-r--r--src/shaders/land.frag16
-rw-r--r--src/shaders/stars.lua2
-rw-r--r--src/spawn_fish.moon141
-rw-r--r--src/ui.moon12
-rw-r--r--src/ui/textbox.moon1
-rw-r--r--src/world.moon5
-rw-r--r--src/worldgen.moon6
17 files changed, 159 insertions, 312 deletions
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