Compare commits

...

2 Commits

Author SHA1 Message Date
e19943e9f2
add feed obj 2025-02-14 20:04:45 +03:00
784e654f07
document signal class 2025-02-14 20:04:38 +03:00
5 changed files with 69 additions and 10 deletions

BIN
data/images/tongue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

View File

@ -0,0 +1,41 @@
local Vector3 = require "types.vector3"
local util = require "util"
local TEXTURE = "images/tongue.png"
local Feed = {
position = {},
direction = {},
velocity = {},
landed = false,
speed = 0.15,
}
Feed.__index = Feed
function Feed.new(p_position, p_direction)
local f = util.shallow_copy(Feed)
f.position = p_position:copy()
f.direction = p_direction:copy()
f.velocity = f.direction * f.speed
f.velocity.y = 0.1
return setmetatable(f, Feed)
end
function Feed:tick(ctx)
if not self.landed then
-- gravity
self.velocity.y = math.max(self.velocity.y - 0.02, -0.2)
self.position = self.position + self.velocity
end
if self.position.y <= 0.2 and not self.landed then
self.position.y = 0.2
self.landed = true
end
draw_billboard{position = self.position, texture = TEXTURE, size = Vector3(0.2, 0.2)}
end
return Feed

View File

@ -1,6 +1,13 @@
local player = require "classes.player"
local util = require "util"
local Vector3 = require "types.vector3"
local Feed = require "classes.feed"
local feed = {}
local function create_feed(position, direction)
table.insert(feed, Feed.new(position, direction))
end
-- called every frame, with constant delta time
function game_tick()
@ -8,13 +15,9 @@ function game_tick()
if ctx.initialization_needed then
-- ctx.udata persists on reload
ctx.udata = {
capture = false
capture = false,
}
player.ThrowPressed:connect(
function (position, direction)
print(position, " ", direction)
end
)
player.ThrowPressed:connect(create_feed)
end
ctx.mouse_capture = ctx.udata.capture
@ -24,10 +27,14 @@ function game_tick()
ctx.udata.capture = not ctx.udata.capture
end
for _, v in pairs(feed) do
v:tick(ctx)
end
player:tick(ctx)
-- draw_camera{position = Vector3(0, 1, 0), direction = Vector3.FORWARD}
-- draw ground
local q = util.create_plane_quad(Vector3(0, 0, 0), Vector3.UP, 10)
local q = util.create_plane_quad(Vector3(0, 0, 0), Vector3.UP, 20)
local params = {
texture = "images/measure001a.png",
texture_region = { x = 0, y = 0, w = 512, h = 512 },

View File

@ -1,17 +1,26 @@
local util = require "util"
---@class Signal
local Signal = {
_connections = {}
}
local Signal = {}
local util = require "util"
Signal.__index = Signal
---Connects f to this signal. When the signal is emmitted, this function will be called.
---@param f function
function Signal:connect(f)
util.list_insert_once(self._connections, f)
end
---Disconnects f from this signal.
---@param f function
function Signal:disconnect(f)
util.list_remove_value(self._connections, f)
end
---Emits the signal, calling the connecting functions with the provided params.
---@param ... any
function Signal:emit(...)
-- don't care about order
for _, v in pairs(self._connections) do
@ -19,6 +28,8 @@ function Signal:emit(...)
end
end
---Constructs a new signal.
---@return Signal
function Signal.new()
local s = {
_connections = {},

View File

@ -2,7 +2,7 @@
--- @field x number
--- @field y number
--- @field z number
--- @alias vectorlike table | Vector3
--- @alias vectorlike number[] | Vector3
local Vector3 = {
x = 0,
y = 0,