diff options
| author | the lemons <citrons@mondecitronne.com> | 2022-12-22 03:34:24 -0600 |
|---|---|---|
| committer | the lemons <citrons@mondecitronne.com> | 2022-12-22 03:34:24 -0600 |
| commit | b2501ddc96481dd8f5a5dd6a40e3db785bab6ae3 (patch) | |
| tree | 59443867754598666a3b5af848f307c65fb473c0 /obj.lua | |
| parent | 93037f358c167425e9e4f071c72f4e07aa5f2fad (diff) | |
selection (it doesn't do anything)
Diffstat (limited to 'obj.lua')
| -rw-r--r-- | obj.lua | 48 |
1 files changed, 47 insertions, 1 deletions
@@ -29,10 +29,50 @@ function obj.load(id, data) o:init() return o end + +function obj.get(id) + return world.objects[id] +end + function obj.is_obj(v) return getmetatable(v) == obj end +function obj.in_box(x1, y1, x2, y2) + return coroutine.wrap(function() + for x = x1, x2 + world.chunk_size, world.chunk_size do + for y = y1, y2 + world.chunk_size, world.chunk_size do + for _, o in pairs(world.chunk(x, y).objects) do + local x, y = unpack(o.data.pos) + if x >= x1 and x <= x2 and y >= y1 and y <= y2 then + coroutine.yield(o) + end + end + end + end + end) +end + +function obj.at(x, y) + return coroutine.wrap(function() + for o in obj.in_box( + x - obj.max_size, y - obj.max_size, + x + obj.max_size, y + obj.max_size) do + if o:in_hitbox(x, y) then + coroutine.yield(o) + end + end + end) +end + +function obj.all() + return coroutine.wrap(function() + for _, o in pairs(world.objects) do + coroutine.yield(o) + end + end) +end + function obj:__index(v) if obj[v] then return obj[v] @@ -65,7 +105,7 @@ function obj:tick(...) if self.hitbox then local x, y = unpack(self.data.pos) - for o in world.in_box( + for o in obj.in_box( x - obj.max_size, y - obj.max_size, x + obj.max_size, y + obj.max_size) do if o.hitbox and o ~= self then @@ -125,6 +165,12 @@ function obj:collision_exit(collided, angle) return self:overload("collision_exit", collided, angle, self.force) end +function obj:in_hitbox(px, py) + local x, y = unpack(self.data.pos) + local dx, dy = x - px, y - py + return dx*dx + dy*dy < self.hitbox*self.hitbox +end + function obj:remove() self.chunk.objects[self.id] = nil world.objects[self.id] = nil |
