initial commit
This commit is contained in:
		
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| # ignore executables | ||||
| * | ||||
| !*.* | ||||
| !*/ | ||||
|  | ||||
| *.so | ||||
| *.dll | ||||
| *.exe | ||||
| *.trace | ||||
|  | ||||
| data/scripts/twnapi.lua | ||||
| build/ | ||||
							
								
								
									
										8
									
								
								data/scripts/game.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								data/scripts/game.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| -- called every frame, with constant delta time | ||||
| function game_tick() | ||||
|   -- ctx.initialization_needed is true first frame and every time dynamic reload is performed | ||||
|   if ctx.initialization_needed then | ||||
|     -- ctx.udata persists on reload | ||||
|     ctx.udata = {} | ||||
|   end | ||||
| end | ||||
							
								
								
									
										177
									
								
								data/scripts/types/vector3.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								data/scripts/types/vector3.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| local Vector3 = { | ||||
|   x = 0, | ||||
|   y = 0, | ||||
|   z = 0, | ||||
|  | ||||
|   _CLASS_ = "Vector3" | ||||
| } | ||||
|  | ||||
| setmetatable(Vector3, Vector3) | ||||
|  | ||||
| local function is_weak_vector3(t) | ||||
|   if type(t) ~= "table" then return false end | ||||
|  | ||||
|   local haskeys = t.x ~= nil and t.y ~= nil and t.z ~= nil | ||||
|   if not haskeys then | ||||
|     return type(t[1]) == "number" and type(t[2]) == "number" and type(t[3]) == "number" | ||||
|   else | ||||
|     return type(t.x) == "number" and type(t.y) == "number" and type(t.z) == "number" | ||||
|   end | ||||
| end | ||||
|  | ||||
| function Vector3:__mul(b) | ||||
|   if type(b) == "number" then | ||||
|     return Vector3{ | ||||
|       x = self.x * b, | ||||
|       y = self.y * b, | ||||
|       z = self.z * b, | ||||
|     } | ||||
|   elseif type(b) == "table" and is_weak_vector3(b) then | ||||
|     local other = Vector3(b) | ||||
|     return Vector3{ | ||||
|       self.x * other.x, | ||||
|       self.y * other.y, | ||||
|       self.z * other.z, | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   error("Vector3: other must be either a number or a Vector3-like table.") | ||||
|   return Vector3() | ||||
| end | ||||
|  | ||||
| function Vector3:__div(b) | ||||
|   if type(b) == "number" then | ||||
|     return Vector3{ | ||||
|       x = self.x / b, | ||||
|       y = self.y / b, | ||||
|       z = self.z / b, | ||||
|     } | ||||
|   elseif type(b) == "table" and is_weak_vector3(b) then | ||||
|     local other = Vector3(b) | ||||
|     return Vector3{ | ||||
|       self.x / other.x, | ||||
|       self.y / other.y, | ||||
|       self.z / other.z, | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   error("Vector3: other must be either a number or a Vector3-like table.") | ||||
|   return Vector3() | ||||
| end | ||||
|  | ||||
| function Vector3:__add(b) | ||||
|   if not is_weak_vector3(b) then | ||||
|     error("Vector3: other must be a Vector3-like table.") | ||||
|     return self | ||||
|   end | ||||
|   local other = Vector3(b) | ||||
|   return Vector3{ | ||||
|     self.x + other.x, | ||||
|     self.y + other.y, | ||||
|     self.z + other.z, | ||||
|   } | ||||
| end | ||||
|  | ||||
| function Vector3:__sub(b) | ||||
|   if not is_weak_vector3(b) then | ||||
|     error("Vector3: other must be a Vector3-like table.") | ||||
|     return self | ||||
|   end | ||||
|   local other = Vector3(b) | ||||
|   return Vector3{ | ||||
|     self.x - other.x, | ||||
|     self.y - other.y, | ||||
|     self.z - other.z, | ||||
|   } | ||||
| end | ||||
|  | ||||
| function Vector3:__unm() | ||||
|   return Vector3{ | ||||
|     -self.x, | ||||
|     -self.y, | ||||
|     -self.z, | ||||
|   } | ||||
| end | ||||
|  | ||||
| function Vector3:__call(...) | ||||
|   local args = {...} | ||||
|   local nv = {x = 0, y = 0, z = 0} | ||||
|   setmetatable(nv, Vector3) | ||||
|   if type(args[1]) == "number" then | ||||
|     if #args == 1 then | ||||
|       nv.x, nv.y, nv.z = args[1], args[1], args[1] | ||||
|     else | ||||
|       nv.x, nv.y, nv.z = args[1], args[2], args[3] | ||||
|     end | ||||
|   elseif type(args[1]) == "table" then | ||||
|     if args[1].x ~= nil then | ||||
|       nv.x, nv.y, nv.z = args[1].x, args[1].y, args[1].z | ||||
|     else | ||||
|       nv.x, nv.y, nv.z = args[1][1], args[1][2], args[1][3] | ||||
|     end | ||||
|   end | ||||
|   return nv | ||||
| end | ||||
|  | ||||
| function Vector3:__tostring() | ||||
|   return "Vector3(" .. tostring(self.x) .. ", " .. tostring(self.y) .. ", " .. tostring(self.z) .. ")" | ||||
| end | ||||
|  | ||||
| Vector3.__index = Vector3 | ||||
|  | ||||
|  | ||||
| --------API-------- | ||||
| function Vector3:length_squared() | ||||
|   local x2 = self.x * self.x | ||||
|   local y2 = self.y * self.y | ||||
|   local z2 = self.z * self.z | ||||
|  | ||||
|   return x2 + y2 + z2 | ||||
| end | ||||
|  | ||||
| function Vector3:length() | ||||
|   return math.sqrt(self:length_squared()) | ||||
| end | ||||
|  | ||||
| function Vector3:normalized() | ||||
|   local length = math.sqrt(self:length_squared()) | ||||
|   if length == 0 then | ||||
|     return Vector3() | ||||
|   end | ||||
|   return Vector3(self.x / length, self.y / length, self.z / length) | ||||
| end | ||||
|  | ||||
| function Vector3:dot(with) | ||||
|   if not is_weak_vector3(with) then | ||||
|     error("Vector3: with must be a Vector3-like table. Returning 0") | ||||
|     return 0 | ||||
|   end | ||||
|  | ||||
|   local v2 = Vector3(with) | ||||
|   return self.x * v2.x + self.y * v2.y + self.z * v2.z | ||||
| end | ||||
|  | ||||
| function Vector3:cross(with) | ||||
|   if not is_weak_vector3(with) then | ||||
|     error("Vector3: with must be a Vector3-like table. Returning Vector3()") | ||||
|     return Vector3() | ||||
|   end | ||||
|   local v2 = Vector3(with) | ||||
|   return Vector3 { | ||||
|     self.y * v2.z - self.z * v2.y, | ||||
|     self.z * v2.x - self.x * v2.z, | ||||
|     self.x * v2.y - self.y * v2.x, | ||||
|   } | ||||
| end | ||||
|  | ||||
| ---- CONSTANTS | ||||
|  | ||||
| Vector3.UP = Vector3(0, 1, 0) | ||||
| Vector3.DOWN = -Vector3.UP | ||||
| Vector3.FORWARD = Vector3(0, 0, -1) | ||||
| Vector3.BACK = -Vector3.FORWARD | ||||
| Vector3.RIGHT = Vector3(1, 0, 0) | ||||
| Vector3.LEFT = -Vector3.RIGHT | ||||
|  | ||||
| ------------------- | ||||
| return Vector3 | ||||
							
								
								
									
										28
									
								
								data/twn.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								data/twn.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| # This file contains everything about the engine and your game that can be | ||||
| # configured before it runs. | ||||
| # | ||||
| # Optional settings are commented out, with their default values shown. | ||||
| # Invalid values in these settings will be ignored. | ||||
|  | ||||
| # Data about your game as an application | ||||
| [about] | ||||
| title = "quack2" | ||||
| developer = "yag" | ||||
| app_id = "quack2" | ||||
| dev_id = "yag" | ||||
|  | ||||
| # Game runtime details | ||||
| [game] | ||||
| resolution = [ 640, 480 ] | ||||
| interpreter = "$TWNROOT/apps/twnlua" | ||||
| background_color = [0, 0, 0, 1] | ||||
| #debug = true | ||||
|  | ||||
| # Engine tweaks. You probably don't need to change these | ||||
| [engine] | ||||
| #ticks_per_second = 60 # minimum of 8 | ||||
| #keybind_slots = 3 # minimum of 1 | ||||
| #texture_atlas_size = 2048 # minimum of 32 | ||||
| #font_texture_size = 2048 # minimum of 1024 | ||||
| #font_oversampling = 4 # minimum of 0 | ||||
| #font_filtering = "linear" # possible values: "nearest", "linear" | ||||
		Reference in New Issue
	
	Block a user