--cd("/cirnofarm/src") --include("/cirnofarm/src/cirno.lua") function make_path(name) local base_path = "/cirnofarm/src/" -- Change this when releasing return base_path .. name end local _modules = {} function loadfile (filename) local src = fetch(filename) if (type(src) ~= "string") then notify("could not include "..filename) stop() return end -- https://www.lua.org/manual/5.4/manual.html#pdf-load -- chunk name (for error reporting), mode ("t" for text only -- no binary chunk loading), _ENV upvalue -- @ is a special character that tells debugger the string is a filename local func,err = load(src, "@"..filename, "t", _ENV) -- syntax error while loading if (not func) then send_message(3, {event="report_error", content = "*syntax error"}) send_message(3, {event="report_error", content = tostr(err)}) stop() return end return func end function require(name) local already_imported = _modules[name] if already_imported ~= nil then return already_imported end local filename = fullpath(name:gsub ('%.', '/') ..'.lua') local func = loadfile (filename) local module = func(name) _modules[name]=module return module end --local strawberry = require(make_path("strawberry")) --strawberry.func() local Cirno = require(make_path("cirno")) local mouse_debug = require(make_path("mouse_debug")) local map_manager = require(make_path("map")) local weapons_manager = require(make_path("weapons")) local Barrel = require(make_path("barrel")) local Strawberry = require(make_path("strawberry")) tile_width = 16 tile_height = 16 function _init() spawn_objects() cirnoInstance = Cirno.init() add(actors,cirnoInstance) end function _update() --cirno.update() weapons_manager.update() for a in all(actors) do a:update() end for b in all(bullets) do b:update() end for p in all(particles) do p:update() end end LAYERS = { {index=4, name="background", render=true, render_objects=false, spawn_objects=false}, {index=3, name="solid", render=true, render_objects=true, spawn_objects=false}, {index=2, name="foreground", render=true, render_objects=false, spawn_objects=false}, {index=1, name="objects", render=false, render_objects=false, spawn_objects=true} } actors_db = { {name="teleporter",sprite=88,actor=nil}, {name="barrel",sprite=3,actor=Barrel}, {name="strawberry",sprite=72,actor=Strawberry}, {name="player",sprite=65,actor=nil}, {name="box",sprite=4,actor=nil}, {name="alarm",sprite=19,actor=nil}, {name="fan",sprite=16,actor=nil} } actors = {} bullets = {} particles = {} function _draw() cls(0) camera(cirnoInstance.x - 240, cirnoInstance.y - 135) foreach(LAYERS, render_layer) mouse_debug.draw(4, tile_width, tile_height) weapons_manager.debug_draw() print(string.format("Actors: %d", count(actors)),0,32+8) print(string.format("%.4f %dfps",stat(1),stat(7)),2,16,5) end function spawn_objects() local width = 32 local height = 32 for x=0,width,1 do for y=0,height,1 do local tile = map_manager.get_layer_tile(x,y,1) local a = get_actor_from_sprite(tile) if (a) then local ai = a:new(x*tile_width,y*tile_height) --local ai = Barrel:new(x*tile_width,y*tile_height) add(actors,ai) end -- if (tile == 3) then -- local b = Barrel:new(x*tile_width,y*tile_height) -- add(actors,b) -- elseif(tile == 72) then -- local s = Strawberry:new(x*tile_width,y*tile_height) -- add(actors,s) -- end end end end function get_actor_from_sprite(sprite) local res = nil for a in all(actors_db) do if (a.sprite == sprite) then res = a.actor end end return res end function render_layer(layer) if (layer.render) then -- todo move function in map manager map(fetch("map/".. map_manager.get_current_map() .. ".map")[layer.index].bmp) end if (layer.render_objects) then -- Render all objects here --cirno.draw() weapons_manager.draw() for b in all(actors) do b:draw() end for b in all(bullets) do b:draw() end for p in all(particles) do p:draw() end end end