diff --git a/data/scripts/game.lua b/data/scripts/game.lua index 96f4782..85a67b8 100644 --- a/data/scripts/game.lua +++ b/data/scripts/game.lua @@ -5,7 +5,7 @@ local List = require "types.list" local AABB = require "types.aabb" local test_aabb = AABB.new( - Vector3(-1, -1, -1), + Vector3(), Vector3(1, 2, 1) ) diff --git a/data/scripts/types/aabb.lua b/data/scripts/types/aabb.lua index b3b2c44..5887190 100644 --- a/data/scripts/types/aabb.lua +++ b/data/scripts/types/aabb.lua @@ -3,7 +3,7 @@ local Vector3 = require "types.vector3" ---@class AABB local AABB = { min = Vector3(), - max = Vector3(), + size = Vector3(), } local RED = { @@ -17,48 +17,52 @@ setmetatable(AABB, AABB) AABB.__index = AABB ----@param min vectorlike ----@param max vectorlike +---@param position Vector3 +---@param size Vector3 ---@return AABB -function AABB.new(min, max) - min = min or Vector3() - max = max or Vector3() +function AABB.new(position, size) + position = position or Vector3() + size = size or Vector3(1, 1, 1) local aabb = { - min = min, - max = max, + min = position, + size = size, } return setmetatable(aabb, AABB) end +function AABB:get_max() + return self.min + self.size +end + function AABB:draw() + local max = self:get_max() -- bottom rectangle - draw_line_3d{start = self.min, finish = Vector3(self.max.x, self.min.y, self.min.z)} - draw_line_3d{start = self.min, finish = Vector3(self.min.x, self.min.y, self.max.z)} - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.max.z), finish = Vector3(self.min.x, self.min.y, self.max.z)} - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.max.z), finish = Vector3(self.max.x, self.min.y, self.min.z)} + draw_line_3d{start = self.min, finish = Vector3(max.x, self.min.y, self.min.z)} + draw_line_3d{start = self.min, finish = Vector3(self.min.x, self.min.y, max.z)} + draw_line_3d{start = Vector3(max.x, self.min.y, max.z), finish = Vector3(self.min.x, self.min.y, max.z)} + draw_line_3d{start = Vector3(max.x, self.min.y, max.z), finish = Vector3(max.x, self.min.y, self.min.z)} -- bottom rectangle diagonal - draw_line_3d{start = self.min, finish = Vector3(self.max.x, self.min.y, self.max.z), color = RED} + draw_line_3d{start = self.min, finish = Vector3(max.x, self.min.y, max.z), color = RED} -- top rectangle - draw_line_3d{start = Vector3(self.min.x, self.max.y, self.min.z), finish = Vector3(self.max.x, self.max.y, self.min.z)} - draw_line_3d{start = Vector3(self.min.x, self.max.y, self.min.z), finish = Vector3(self.min.x, self.max.y, self.max.z)} - draw_line_3d{start = Vector3(self.max.x, self.max.y, self.max.z), finish = Vector3(self.min.x, self.max.y, self.max.z)} - draw_line_3d{start = Vector3(self.max.x, self.max.y, self.max.z), finish = Vector3(self.max.x, self.max.y, self.min.z)} + draw_line_3d{start = Vector3(self.min.x, max.y, self.min.z), finish = Vector3(max.x, max.y, self.min.z)} + draw_line_3d{start = Vector3(self.min.x, max.y, self.min.z), finish = Vector3(self.min.x, max.y, max.z)} + draw_line_3d{start = Vector3(max.x, max.y, max.z), finish = Vector3(self.min.x, max.y, max.z)} + draw_line_3d{start = Vector3(max.x, max.y, max.z), finish = Vector3(max.x, max.y, self.min.z)} -- top rectangle diagonal - draw_line_3d{start = Vector3(self.max.x, self.max.y, self.max.z), finish = Vector3(self.min.x, self.max.y, self.min.z), color = RED} + draw_line_3d{start = Vector3(max.x, max.y, max.z), finish = Vector3(self.min.x, max.y, self.min.z), color = RED} -- hull - draw_line_3d{start = self.min, finish = Vector3(self.min.x, self.max.y, self.min.z)} - draw_line_3d{start = self.min, finish = Vector3(self.max.x, self.max.y, self.min.z), color = RED} - - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.min.z), finish = Vector3(self.max.x, self.max.y, self.min.z)} - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.min.z), finish = Vector3(self.max.x, self.max.y, self.max.z), color = RED} - - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.max.z), finish = Vector3(self.max.x, self.max.y, self.max.z)} - draw_line_3d{start = Vector3(self.max.x, self.min.y, self.max.z), finish = Vector3(self.min.x, self.max.y, self.max.z), color = RED} + draw_line_3d{start = self.min, finish = Vector3(self.min.x, max.y, self.min.z)} + draw_line_3d{start = self.min, finish = Vector3(max.x, max.y, self.min.z), color = RED} - draw_line_3d{start = Vector3(self.min.x, self.min.y, self.max.z), finish = Vector3(self.min.x, self.max.y, self.max.z)} - draw_line_3d{start = Vector3(self.min.x, self.min.y, self.max.z), finish = Vector3(self.min.x, self.max.y, self.min.z), color = RED} + draw_line_3d{start = Vector3(max.x, self.min.y, self.min.z), finish = Vector3(max.x, max.y, self.min.z)} + draw_line_3d{start = Vector3(max.x, self.min.y, self.min.z), finish = Vector3(max.x, max.y, max.z), color = RED} + draw_line_3d{start = Vector3(max.x, self.min.y, max.z), finish = Vector3(max.x, max.y, max.z)} + draw_line_3d{start = Vector3(max.x, self.min.y, max.z), finish = Vector3(self.min.x, max.y, max.z), color = RED} + + draw_line_3d{start = Vector3(self.min.x, self.min.y, max.z), finish = Vector3(self.min.x, max.y, max.z)} + draw_line_3d{start = Vector3(self.min.x, self.min.y, max.z), finish = Vector3(self.min.x, max.y, self.min.z), color = RED} end return AABB