summaryrefslogtreecommitdiff
path: root/src/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'src/controllers')
-rw-r--r--src/controllers/fish.moon33
-rw-r--r--src/controllers/mouse_keyboard.moon86
2 files changed, 34 insertions, 85 deletions
diff --git a/src/controllers/fish.moon b/src/controllers/fish.moon
index 1516574..3c829f3 100644
--- a/src/controllers/fish.moon
+++ b/src/controllers/fish.moon
@@ -2,12 +2,16 @@ 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")
@@ -27,7 +31,7 @@ class FishControllerComponent extends ecs.Component
while comp.state == "swimming"
comp.state = "waiting"
start_wait = world.sync_time!
- while world.sync_time! - start_wait < 4
+ while world.sync_time! - start_wait < 8
--TODO: look for nearby hooks and get caught
coroutine.yield!
if comp.state == "waiting"
@@ -41,12 +45,33 @@ 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(10.3,12),
- math.random(-10,10)
+ 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)
)
- @net.properties.next_loc_time = world.sync_time!
+ 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 = @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 28c4f58..cc33a72 100644
--- a/src/controllers/mouse_keyboard.moon
+++ b/src/controllers/mouse_keyboard.moon
@@ -5,6 +5,7 @@ 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 = {}
@@ -68,6 +69,7 @@ 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!")
@@ -88,87 +90,9 @@ class MouseKeyboardControllerComponent extends ecs.Component
)
start_minigame: (fish) =>
@minigame_started = true
- 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")
+ pull = () ->
+ win\mouse_pressed("left")
+ minigame.run(@net, @bobber, fish, pull)
controller.text_size = 1
controller.Controller = MouseKeyboardControllerComponent