-
-
Save monkeyman32123/02f4a8e591badf749b4e to your computer and use it in GitHub Desktop.
Now with setContext for larger worlds!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--# Main | |
displayMode(OVERLAY) | |
supportedOrientations(LANDSCAPE_ANY) | |
function setup() | |
spriteMode(CORNER) | |
drawdots = true | |
lightsout = false | |
drawguides = true | |
parameter.action("light switch",function() lightsout = not lightsout, fl:calcshadows() end) | |
parameter.action("edge smoothing",function() drawguides = not drawguides end) | |
parameter.action("drawprobelines",function() drawmeshcalclines = not drawmeshcalclines end) | |
smooth() | |
allupdated = false | |
perworldwidth = 768 | |
movementfactor = perworldwidth/16 | |
origin = vec2((WIDTH/2)-(perworldwidth/2)-1,(HEIGHT/2)-(perworldwidth/2)-1) | |
worldmap = worldmaps[3] | |
numwid = math.sqrt(#worldmap) | |
worlds={} | |
for i=0, numwid-1 do | |
for b=0,numwid-1 do | |
worlds[b+(i*numwid)] = World(worldmap[(b+(i*numwid))+1],vec2((WIDTH/2)+(b*perworldwidth)-1,(HEIGHT/2)+(i*perworldwidth)-1),perworldwidth,b+(i*numwid)) | |
end | |
end | |
for i = 0, #worlds do | |
worlds[i]:m2(vec2(-perworldwidth*math.floor(numwid/2),-perworldwidth*math.floor(numwid/2))) | |
end | |
crwld = worlds[math.floor(#worlds/2)] | |
crwld:calcnegativepoints() | |
j = Joystiqs() | |
hero = Hero() | |
rotangle = math.pi/2 | |
r=0 | |
g=255 | |
b=255 | |
fl = Flashlight() | |
end | |
function draw() | |
background(0, 0, 0, 255) | |
j:j1Calc() | |
j:j2Calc() | |
if j:getmag() ~= nil and j:getang() ~= nil then | |
hero:m1(j:getmag(),j:getang()) | |
end | |
local jork = j:getang2() | |
if jork ~= nil then | |
hero:changeang(jork) | |
fl:changeang(jork) | |
elseif j:getang()~= nil and jork == nil then | |
fl:changeang(j:getang()) | |
end | |
for i=0,#worlds do | |
worlds[i]:draw() | |
end | |
if lightsout then | |
fl:draw() | |
end | |
hero:draw() | |
j:draw() | |
fill(0, 0, 255, 255) | |
text(1/DeltaTime,WIDTH/2,HEIGHT-15) | |
j:cleanJoystickData() | |
end | |
function touched(touch) | |
j:touched(touch) | |
end | |
function newcrwld11() | |
for i=0, #worlds do | |
if worlds[i].active==true then | |
crwld = worlds[i] | |
end | |
end | |
end | |
function newcrwld(x) | |
if x and crwld.ident~=x then | |
crwld = worlds[x] | |
print(crwld.ident) | |
else | |
return crwld.ident | |
end | |
end | |
worldmaps = { | |
{9,2,2,2,6, | |
5,1,1,1,3, | |
5,1,1,1,3, | |
5,1,1,1,3, | |
8,4,4,4,7}, | |
{9,2,2,2,2,2,6, | |
5,1,1,1,1,1,3, | |
5,1,1,1,1,1,3, | |
5,1,1,1,1,1,3, | |
5,1,1,1,1,1,3, | |
5,1,1,1,1,1,3, | |
8,4,4,4,4,4,7}, | |
{9,2,2,2,2,2,2,2,2,2,6, | |
5,1,1,1,1,1,1,1,1,1,3, | |
5,1,1,1,1,1,1,1,1,1,3, | |
5,1,1,1,1,1,1,1,1,1,3, | |
5,1,1,1,1,12,1,1,1,1,3, | |
5,1,1,1,11,12,11,1,1,1,3, | |
5,1,1,1,1,11,1,1,1,1,3, | |
5,1,1,1,1,1,1,1,1,1,3, | |
5,1,1,1,1,1,1,1,1,1,3, | |
5,1,1,1,1,1,1,1,1,1,3, | |
8,4,4,4,4,4,4,4,4,4,7} | |
} | |
--# World | |
World = class() | |
function World:init(lvl, loc, wid,identifyer) | |
self.loc = vec2(loc.x-wid/2,loc.y-wid/2) | |
self.leveltiles = levels[lvl] | |
self.ident = identifyer | |
self.leveltileslocs = {} | |
local numdir = math.sqrt(#self.leveltiles) | |
self.numdir = numdir | |
self.widhei = wid/numdir | |
for i=0, numdir-1 do | |
for b=0, numdir do | |
self.leveltileslocs[b+(i*numdir)] = vec2(b*self.widhei,i*self.widhei) | |
end | |
end | |
self.negpoints = nil | |
self.negpoints2 = nil | |
self.negblocks = nil | |
table.remove(self.leveltileslocs,#self.leveltileslocs) | |
self.active = nil | |
self:isActive() | |
self.xmove = true | |
self.ymove = true | |
self.add = nil | |
self.collided = false | |
self.visible = true | |
self.offs = vec2(0,0) | |
self.myimg = nil | |
end | |
function World:draw() | |
if self.visible then | |
spriteMode(CORNER) | |
if self:isActive() then | |
if self.loc.y ~= origin.y or self.loc.x ~= origin.x then | |
self:move() | |
newcrwld(self.ident) | |
end | |
if not self.myimg then | |
self:buildRoom() | |
end | |
if self.negpoints == nil then | |
self:calcnegativepoints() | |
end | |
sprite(self.myimg,self.loc.x,self.loc.y) | |
else | |
rectMode(CORNER) | |
fill(0,0,0,255) | |
rect(self.loc.x,self.loc.y,self.widhei*self.numdir+2,self.widhei*self.numdir+2) | |
end | |
end | |
end | |
function World:buildRoom() | |
rectMode(CORNER) | |
spriteMode(CORNER) | |
strokeWidth(0) | |
self.myimg = image(WIDTH,HEIGHT) | |
setContext(self.myimg) | |
for i=0, #self.leveltileslocs do | |
if self.leveltiles[i+1] == 0 then | |
fill(255,255,255,255) | |
--fill(r,g,b) | |
else | |
fill(0,0,0,255) | |
--fill(col) | |
end | |
rect(self.leveltileslocs[i].x,self.leveltileslocs[i].y,self.widhei+2,self.widhei+2) | |
end | |
setContext() | |
print("success") | |
end | |
function World:drawNegPoints() | |
if self.negpoints ~= nil and drawdots then | |
fill(255,0,0,255) | |
strokeWidth() | |
for i=0, #self.negpoints do | |
for b=1,4 do | |
ellipse(self.negpoints[i][b].x,self.negpoints[i][b].y,2) | |
end | |
end | |
end | |
end | |
function World:isVisible() | |
end | |
function World:isActive() | |
if hero ~= nil then | |
if heroloc.x > self.loc.x and heroloc.x < self.loc.x+(self.numdir*self.widhei) then | |
if heroloc.y > self.loc.y and heroloc.y < self.loc.y+(self.numdir*self.widhei) then | |
self.active = true | |
return true | |
else | |
self.active = false | |
end | |
else | |
self.active = false | |
end | |
self.negpoints = nil | |
return false | |
end | |
end | |
function World:calcnegativepoints() | |
if self.negblocks == nil then | |
self.negblocks = {} | |
local ident = 0 | |
for b=0, #self.leveltiles do | |
if self.leveltiles[b] == 1 then | |
self.negblocks[ident] = b | |
ident = ident + 1 | |
end | |
end | |
end | |
self.negpoints = {} | |
for i = 0, #self.negblocks do | |
local p1 = self.leveltileslocs[(self.negblocks[i]-1)]+self.loc+vec2(.5,.5) | |
--p1 = self.leveltileslocs[i-1]+self.loc | |
local p2 = vec2(p1.x,p1.y+self.widhei) | |
local p3 = vec2(p2.x+self.widhei,p2.y) | |
local p4 = vec2(p1.x+self.widhei,p1.y) | |
local edgel = p1.x | |
local edger = p3.x | |
local edgeu = p2.y | |
local edged = p4.y | |
local tbl = {p1,p2,p3,p4,edgel,edger,edgeu,edged} | |
self.negpoints[i] = tbl | |
if self.negpoints2 == nil then | |
self.negpoints2 = {} | |
local p12 = self.leveltileslocs[(self.negblocks[i]-1)]+vec2(.5,.5) | |
--p1 = self.leveltileslocs[i-1]+self.loc | |
local p22 = vec2(p12.x,p12.y+self.widhei) | |
local p32 = vec2(p22.x+self.widhei,p22.y) | |
local p42 = vec2(p12.x+self.widhei,p12.y) | |
local edgel2 = p12.x | |
local edger2 = p32.x | |
local edgeu2 = p22.y | |
local edged2 = p42.y | |
local tbl2 = {p12,p22,p32,p42,edgel2,edger2,edgeu2,edged2} | |
self.negpoints2[i] = tbl2 | |
end | |
end | |
end | |
function World:move() | |
local add = vec2(0,0) | |
offsetx = self.loc.x-origin.x | |
offsety = self.loc.y-origin.y | |
if self.loc.x-(origin.x) > 0 then | |
add.x=-movementfactor | |
end | |
if self.loc.x-(origin.x) < 0 then | |
add.x=movementfactor | |
end | |
if self.loc.y-(origin.y) > 0 then | |
add.y=-movementfactor | |
end | |
if self.loc.y-(origin.y) < 0 then | |
add.y=movementfactor | |
end | |
for i=0,#worlds do | |
worlds[i]:m2(add) | |
end | |
hero:m2(add) | |
self:calcnegativepoints() | |
end | |
function World:m2(add) | |
self.loc = self.loc + add | |
end | |
function World:colliding(corner, prev) | |
end | |
levels = { | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,1,0,1,0,0,0,0,0,1, | |
1,0,0,0,1,0,0,0,0,0,1,0,0,0,1, | |
1,0,0,1,0,0,0,0,0,0,0,1,0,0,1, | |
1,0,0,0,0,0,1,0,1,0,0,0,0,0,1, | |
1,0,1,0,0,1,0,0,0,1,0,0,1,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,1,0,0,1,0,0,0,1,0,0,1,0,1, | |
1,0,0,0,0,0,1,0,1,0,0,0,0,0,1, | |
1,0,0,1,0,0,0,0,0,0,0,1,0,0,1, | |
1,0,0,0,1,0,0,0,0,0,1,0,0,0,1, | |
1,0,0,0,0,0,1,0,1,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, | |
{1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, | |
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, | |
1,0,0,0,0,1,1,0,1,1,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,1,1,1,1,1,1,1,1,1,1,1,0,1}, | |
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, | |
{1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, | |
{1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, | |
1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1} | |
} | |
--# Hero | |
Hero = class() | |
function Hero:init(x) | |
heroloc = vec2(WIDTH/2,HEIGHT/2) | |
herosize = 20 | |
col = color(255,0,0,255) | |
blend = 0 | |
red = true | |
orange = false | |
yellow = false | |
green = false | |
teal = false | |
blue = false | |
purple = false | |
violet = false | |
end | |
function Hero:draw() | |
rectMode(CENTER) | |
pushMatrix() | |
translate(heroloc.x,heroloc.y) | |
rotate(math.deg(rotangle)-90) | |
fill(col) | |
strokeWidth(2) | |
r = 127.5+(127.5-col.r) | |
g = 127.5+(127.5-col.g) | |
b = 127.5+(127.5-col.b) | |
stroke(r,g,b,255) | |
self:colorCycle() | |
ellipse(0,0,herosize+4,herosize+4) | |
line(0,0,0,herosize/2) | |
popMatrix() | |
end | |
function Hero:m1(mag,ang) | |
local add = vec2(mag/15,0):rotate(ang) | |
heroloc = heroloc + add | |
rotangle=ang | |
for i = 0, #worlds do | |
if worlds[i].active == true then | |
for b = 0, #worlds[i].leveltileslocs do | |
if worlds[i].leveltiles[b+1] == 1 then | |
if (worlds[i].leveltileslocs[b]+worlds[i].loc):dist(heroloc)<worlds[i].widhei*2 then | |
local centx = worlds[i].loc.x+worlds[i].leveltileslocs[b].x+(worlds[i].widhei/2) | |
local edgexr = worlds[i].loc.x+worlds[i].leveltileslocs[b].x+worlds[i].widhei | |
local edgexl = worlds[i].loc.x+worlds[i].leveltileslocs[b].x | |
local centy = worlds[i].loc.y+worlds[i].leveltileslocs[b].y+(worlds[i].widhei/2) | |
local edgeyu = worlds[i].loc.y+worlds[i].leveltileslocs[b].y+worlds[i].widhei | |
local edgeyd = worlds[i].loc.y+worlds[i].leveltileslocs[b].y | |
local ang = math.deg(math.atan2(centx-heroloc.x,centy-heroloc.y)) | |
if ang > 45 and ang < 135 then | |
if heroloc.x+herosize/2>edgexl then | |
heroloc.x = edgexl-herosize/2 | |
end | |
end | |
if ang >= 135 or ang <= -135 then | |
if heroloc.y-herosize/2 <edgeyu then | |
heroloc.y = edgeyu+herosize/2 | |
end | |
end | |
if ang > -135 and ang < -45 then | |
if heroloc.x-herosize/2 <edgexr then | |
heroloc.x = edgexr+herosize/2 | |
end | |
end | |
if ang >= -45 and ang <= 45 then | |
if heroloc.y+herosize/2 >edgeyd then | |
heroloc.y = edgeyd-herosize/2 | |
end | |
end | |
end | |
end | |
end | |
end | |
end | |
if lightsout then | |
fl:calcshadows() | |
end | |
end | |
function Hero:changeang(ang) | |
rotangle=ang | |
end | |
function Hero:m2(add) | |
heroloc = heroloc+add | |
if lightsout then | |
fl:calcshadows() | |
end | |
end | |
function Hero:colorCycle() | |
if red then | |
local c2 = color(255,0,0,255) | |
local c1 = color(255,125,0,255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
red = false | |
orange = true | |
end | |
elseif orange then | |
local c2 = color(255,125,0,255) | |
local c1 = color(255,255,0,255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
orange = false | |
yellow = true | |
end | |
elseif yellow then | |
local c2 = color(255,255,0,255) | |
local c1 = color(0,255,0,255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
yellow = false | |
green = true | |
end | |
elseif green then | |
local c2 = color(0,255,0,255) | |
local c1 = color(0, 255, 255, 255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
green = false | |
teal = true | |
end | |
elseif teal then | |
local c2 = color(0,255,255,255) | |
local c1 = color(0, 0, 255, 255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
teal = false | |
blue = true | |
end | |
elseif blue then | |
local c2 = color(0, 0, 255, 255) | |
local c1 = color(125,0,255,255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
blue = false | |
purple = true | |
end | |
elseif purple then | |
local c2 = color(125,0,255,255) | |
local c1 = color(255, 0, 255, 255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
purple = false | |
violet = true | |
end | |
elseif violet then | |
local c2 = color(255, 0, 255, 255) | |
local c1 = color(255, 0, 0, 255) | |
col = c1:mix(c2,blend) | |
if blend >= 1 then | |
blend = 0 | |
violet = false | |
red = true | |
end | |
end | |
blend = blend + .01 | |
end | |
--# Flashlight | |
Flashlight = class() | |
function Flashlight:init() | |
self.corners = {} | |
self.corners[0] = vec2(0,0) | |
self.corners[1] = vec2(0,HEIGHT) | |
self.corners[2] = vec2(WIDTH,HEIGHT) | |
self.corners[3] = vec2(WIDTH,0) | |
self.angle = 90 | |
self.spread = 90 | |
self.hs = self.spread/2 | |
self.ang1 = self.angle-self.spread/2 | |
if self.ang1 < 0 then self.ang1 = self.ang1 + 360 end | |
self.ang2 = self.angle+self.spread/2 | |
if self.ang2 >=360 then self.ang2 = self.ang2 - 360 end | |
self.mesh1 = mesh() | |
self.a = true | |
self.b = true | |
self.c = true | |
self.d = true | |
end | |
function Flashlight:draw() | |
if lightsout then | |
strokeWidth(2) | |
stroke(0, 0, 0, 255) | |
smooth() | |
self.mesh1:draw() | |
if drawmeshcalclines then | |
stroke(255,0,0,255) | |
end | |
if drawguides then | |
line(heroloc.x,heroloc.y,self.lineend1.x,self.lineend1.y) | |
line(heroloc.x,heroloc.y,self.lineend2.x,self.lineend2.y) | |
end | |
if drawmeshcalclines then | |
if not drawguides then | |
line(heroloc.x,heroloc.y,self.lineend1.x,self.lineend1.y) | |
line(heroloc.x,heroloc.y,self.lineend2.x,self.lineend2.y) | |
end | |
line(heroloc.x,heroloc.y,self.lineend3.x,self.lineend3.y) | |
line(heroloc.x,heroloc.y,self.lineend4.x,self.lineend4.y) | |
line(heroloc.x,heroloc.y,self.lineend5.x,self.lineend5.y) | |
end | |
end | |
end | |
function Flashlight:calcshadows() | |
self.mesh1 = nil | |
self.mesh1 = mesh() | |
local len = math.sqrt(2*(900^2)) | |
local angr = math.rad(self.angle) | |
local ang1r = math.rad(self.ang1) | |
local ang15r = math.rad(self.angle-self.spread/4) | |
if ang15r < 0 then ang15r = ang15r + 2*math.pi end | |
local ang2r = math.rad(self.ang2) | |
local ang25r = math.rad(self.angle+self.spread/4) | |
if ang25r > 2*math.pi then ang25r = ang25r - 2*math.pi end | |
self.lineend1 = vec2(heroloc.x+math.cos(ang1r)*len,heroloc.y+math.sin(ang1r)*len) | |
self.lineend2 = vec2(heroloc.x+math.cos(ang2r)*len,heroloc.y+math.sin(ang2r)*len) | |
self.lineend3 = vec2(heroloc.x+math.cos(angr)*len,heroloc.y+math.sin(angr)*len) | |
self.lineend4 = vec2(heroloc.x+math.cos(ang15r)*len,heroloc.y+math.sin(ang15r)*len) | |
self.lineend5 = vec2(heroloc.x+math.cos(ang25r)*len,heroloc.y+math.sin(ang25r)*len) | |
if self.lineend1.x < 0 then | |
self.lineend1.x = 0 | |
self.lineend1.y = heroloc.y-(heroloc.x*math.tan(ang1r)) | |
end | |
if self.lineend1.y>HEIGHT then | |
self.lineend1.y = HEIGHT | |
self.lineend1.x = heroloc.x+((HEIGHT-heroloc.y)/math.tan(ang1r)) | |
end | |
if self.lineend1.x>WIDTH then | |
self.lineend1.x = WIDTH | |
self.lineend1.y = heroloc.y+((WIDTH-heroloc.x)*math.tan(ang1r)) | |
end | |
if self.lineend1.y < 0 then | |
self.lineend1.y = 0 | |
self.lineend1.x = heroloc.x-(heroloc.y/math.tan(ang1r)) | |
end | |
if self.lineend2.x < 0 then | |
self.lineend2.x = 0 | |
self.lineend2.y = heroloc.y-(heroloc.x*math.tan(ang2r)) | |
end | |
if self.lineend2.y>HEIGHT then | |
self.lineend2.y = HEIGHT | |
self.lineend2.x = heroloc.x+((HEIGHT-heroloc.y)/math.tan(ang2r)) | |
end | |
if self.lineend2.x>WIDTH then | |
self.lineend2.x = WIDTH | |
self.lineend2.y = heroloc.y+((WIDTH-heroloc.x)*math.tan(ang2r)) | |
end | |
if self.lineend2.y < 0 then | |
self.lineend2.y = 0 | |
self.lineend2.x = heroloc.x-(heroloc.y/math.tan(ang2r)) | |
end | |
if self.lineend3.x < 0 then | |
self.lineend3.x = 0 | |
self.lineend3.y = heroloc.y-(heroloc.x*math.tan(angr)) | |
end | |
if self.lineend3.y>HEIGHT then | |
self.lineend3.y = HEIGHT | |
self.lineend3.x = heroloc.x+((HEIGHT-heroloc.y)/math.tan(angr)) | |
end | |
if self.lineend3.x>WIDTH then | |
self.lineend3.x = WIDTH | |
self.lineend3.y = heroloc.y+((WIDTH-heroloc.x)*math.tan(angr)) | |
end | |
if self.lineend3.y < 0 then | |
self.lineend3.y = 0 | |
self.lineend3.x = heroloc.x-(heroloc.y/math.tan(angr)) | |
end | |
if self.lineend4.x < 0 then | |
self.lineend4.x = 0 | |
self.lineend4.y = heroloc.y-(heroloc.x*math.tan(ang15r)) | |
end | |
if self.lineend4.y>HEIGHT then | |
self.lineend4.y = HEIGHT | |
self.lineend4.x = heroloc.x+((HEIGHT-heroloc.y)/math.tan(ang15r)) | |
end | |
if self.lineend4.x>WIDTH then | |
self.lineend4.x = WIDTH | |
self.lineend4.y = heroloc.y+((WIDTH-heroloc.x)*math.tan(ang15r)) | |
end | |
if self.lineend4.y < 0 then | |
self.lineend4.y = 0 | |
self.lineend4.x = heroloc.x-(heroloc.y/math.tan(ang15r)) | |
end | |
if self.lineend5.x < 0 then | |
self.lineend5.x = 0 | |
self.lineend5.y = heroloc.y-(heroloc.x*math.tan(ang25r)) | |
end | |
if self.lineend5.y>HEIGHT then | |
self.lineend5.y = HEIGHT | |
self.lineend5.x = heroloc.x+((HEIGHT-heroloc.y)/math.tan(ang25r)) | |
end | |
if self.lineend5.x>WIDTH then | |
self.lineend5.x = WIDTH | |
self.lineend5.y = heroloc.y+((WIDTH-heroloc.x)*math.tan(ang25r)) | |
end | |
if self.lineend5.y < 0 then | |
self.lineend5.y = 0 | |
self.lineend5.x = heroloc.x-(heroloc.y/math.tan(ang25r)) | |
end | |
local notposscorn = {} | |
local q = 0 | |
for i = 0, #self.corners do | |
if (self.corners[i].x == self.lineend1.x or self.corners[i].x == self.lineend4.x) and | |
(self.corners[i].y == self.lineend1.y or self.corners[i].y == self.lineend4.y) then | |
notposscorn[q] = i | |
q = q + 1 | |
elseif (self.corners[i].x == self.lineend4.x or self.corners[i].x == self.lineend3.x) and | |
(self.corners[i].y == self.lineend4.y or self.corners[i].y == self.lineend3.y) then | |
notposscorn[q] = i | |
q = q + 1 | |
elseif (self.corners[i].x == self.lineend3.x or self.corners[i].x == self.lineend5.x) and | |
(self.corners[i].y == self.lineend3.y or self.corners[i].y == self.lineend5.y) then | |
notposscorn[q] = i | |
q = q + 1 | |
elseif (self.corners[i].x == self.lineend5.x or self.corners[i].x == self.lineend2.x) and | |
(self.corners[i].y == self.lineend5.y or self.corners[i].y == self.lineend2.y) then | |
notposscorn[q] = i | |
q = q + 1 | |
end | |
end | |
if notposscorn[0] ~= nil and #notposscorn < 2 then | |
local nextvertl = notposscorn[0]-1 | |
if nextvertl <0 then nextvertl = #self.corners end | |
local nnl = nextvertl-1 | |
if nnl < 0 then nnl = #self.corners end | |
local nextvertr = notposscorn[#notposscorn]+1 | |
if nextvertr > #self.corners then nextvertr = 0 end | |
local nnr = nextvertr+1 | |
if nnr > #self.corners then nnr = 0 end | |
local verts = | |
{self.lineend2,self.corners[nextvertl],heroloc,self.lineend1,self.corners[nextvertr],heroloc, | |
heroloc,self.corners[nextvertr],self.corners[nnr],heroloc,self.corners[nextvertl],self.corners[nnl]} | |
if self.angle > 225 and self.angle < 315 and #notposscorn ~= 0 then | |
verts = nil | |
local nextvertr = notposscorn[0]+1 | |
if nextvertr <0 then nextvertr = #self.corners end | |
local nnr = nextvertr+1 | |
if nnr < 0 then nnr = #self.corners end | |
local nextvertl = notposscorn[#notposscorn]-1 | |
if nextvertl > #self.corners then nextvertl = 0 end | |
local nnl = nextvertl-1 | |
if nnl > #self.corners then nnl = 0 end | |
verts = | |
{self.lineend2,self.corners[nextvertl],heroloc, | |
self.lineend1,self.corners[nextvertr],heroloc, | |
heroloc,self.corners[nextvertr],self.corners[nnr], | |
heroloc,self.corners[nextvertl],self.corners[nnl]} | |
end | |
self.mesh1.vertices = verts | |
self.mesh1:setColors(0,0,0,255) | |
elseif notposscorn[0] ~= nil and #notposscorn == 2 then | |
self.a = true | |
self.b = true | |
self.c = true | |
self.d = true | |
for i=0,3 do | |
for b=0,2 do | |
if notposscorn[b] == i then | |
if i==0 then self.a = false end | |
if i==1 then self.b = false end | |
if i==2 then self.c = false end | |
if i==3 then self.d = false end | |
end | |
end | |
end | |
if self.a then | |
self.vertics = {heroloc, self.lineend1,self.corners[0],heroloc,self.lineend2,self.corners[0]} | |
elseif self.b then | |
self.vertics = {heroloc, self.lineend1,self.corners[1],self.corners[1],self.lineend2,heroloc} | |
elseif self.c then | |
self.vertics = {heroloc, self.lineend1,self.corners[2],self.corners[2],self.lineend2,heroloc} | |
elseif self.d then | |
self.vertics = {heroloc, self.lineend1,self.corners[3],self.corners[3],self.lineend2,heroloc} | |
end | |
self.mesh1.vertices = self.vertics | |
self.mesh1:setColors(0,0,0,255) | |
else | |
if self.angle > 135-(self.hs-45) and self.angle < 225+(self.hs-45) then | |
nextr = 1 | |
elseif self.angle > 45-(self.hs-45) and self.angle < 135+(self.hs-45) then | |
nextr = 2 | |
elseif self.angle > 315-(self.hs-45) or self.angle < 45+(self.hs-45) then | |
nextr = 3 | |
elseif self.angle > 225-(self.hs-45) and self.angle < 315+(self.hs-45) then | |
nextr = 0 | |
end | |
local nnr = nextr + 1 | |
if nnr>3 then nnr=0 end | |
local nnnr = nnr + 1 | |
if nnnr>3 then nnnr=0 end | |
local nnnnr = nnnr + 1 | |
if nnnnr>3 then nnnnr=0 end | |
verts = | |
{heroloc,self.lineend1,self.corners[nextr], | |
heroloc,self.corners[nextr],self.corners[nnr], | |
heroloc,self.corners[nnr],self.corners[nnnr], | |
heroloc,self.corners[nnnr],self.corners[nnnnr], | |
heroloc,self.corners[nnnnr],self.lineend2} | |
self.mesh1.vertices = verts | |
self.mesh1:setColors(0,0,0,255) | |
end | |
self:calcobjectshadows() | |
end | |
function Flashlight:calcobjectshadows() | |
if lightsout and crwld.negpoints then | |
local cent = nil | |
for i=0, #crwld.negblocks do | |
--crwld.leveltileslocs[(crwld.negblocks[i]-1)]+crwld.loc | |
end | |
for i=0, #crwld.negpoints do | |
local use = false | |
for b=1,4 do | |
local g = math.atan2(crwld.negpoints[i][b].y-heroloc.y,crwld.negpoints[i][b].x-heroloc.x) | |
if i==5 and b==3 then | |
--print(g) | |
end | |
end | |
end | |
end | |
end | |
function Flashlight:changeang(newang) | |
self.angle = math.deg(newang) | |
self.ang1 = self.angle-self.spread/2 | |
if self.ang1 < 0 then self.ang1 = self.ang1 + 360 end | |
self.ang2 = self.angle+self.spread/2 | |
if self.ang2 >=360 then self.ang2 = self.ang2 - 360 end | |
if lightsout then | |
self:calcshadows() | |
end | |
end | |
--# Joystiqs | |
Joystiqs = class() | |
touch = nil | |
originx = nil | |
originy = nil | |
originid = nil | |
touch2 = nil | |
originx2 = nil | |
originy2 = nil | |
originid2 = nil | |
function Joystiqs:init() | |
end | |
function Joystiqs:draw() | |
stroke(127, 127, 127, 25) | |
strokeWidth(0) | |
lineCapMode(SQUARE) | |
if originx ~= nil then | |
fill(0, 0, 255, 100) | |
ellipse(originx, originy, 150) | |
line(originx, originy, linelimiterx, linelimitery) | |
fill(0, 0, 255, 100) | |
ellipse(linelimiterx, linelimitery, 150) | |
end | |
if originx2 ~= nil then | |
fill(0, 0, 255, 100) | |
ellipse(originx2, originy2, 150) | |
line(originx2, originy2, linelimiterx2, linelimitery2) | |
fill(0, 0, 255, 100) | |
ellipse(linelimiterx2, linelimitery2, 150) | |
end | |
--self:cleanJoystickData() | |
end | |
function Joystiqs:touched(touched) | |
if touched.x < WIDTH/2 and touch == nil and touched.state == BEGAN then | |
touch = touched | |
originid = touched.id | |
originx = touched.x | |
originy = touched.y | |
elseif touch ~= nil and touched.id == originid then | |
touch = touched | |
end | |
if (touched.state == ENDED) and (touched.id == originid) then | |
touch = nil | |
originx = nil | |
originy = nil | |
originid= nil | |
end | |
if touched.x > WIDTH/2 and touch2 == nil and touched.state == BEGAN then | |
touch2 = touched | |
originid2 = touched.id | |
originx2 = touched.x | |
originy2 = touched.y | |
elseif touch2 ~= nil and touched.id == originid2 then | |
touch2 = touched | |
end | |
if (touched.state == ENDED) and (touched.id == originid2) then | |
touch2 = nil | |
originx2 = nil | |
originy2 = nil | |
originid2 = nil | |
end | |
end | |
function Joystiqs:j1Calc() | |
if (touch ~= nil) then | |
offsetx = touch.x - originx | |
offsety = touch.y - originy | |
preangle = (math.atan((offsety)/(offsetx))) | |
if offsetx == 0 and offsety > 0 then | |
angle = math.pi/2 | |
else | |
if offsetx <= 0 and offsety > 0 then | |
angle = math.pi + preangle | |
elseif offsetx < 0 and offsety <= 0 then | |
angle = math.pi + preangle | |
elseif offsetx >=0 and offsety < 0 then | |
angle = (2*math.pi) + preangle | |
else | |
angle = preangle | |
end | |
end | |
if math.sqrt((offsetx*offsetx)+(offsety*offsety)) > 75 then | |
linelimiterx = (75*math.cos(angle)) + originx | |
linelimitery = (75*math.sin(angle)) + originy | |
else | |
linelimiterx = touch.x | |
linelimitery = touch.y | |
end | |
magnitude = math.sqrt(((linelimiterx-originx)^2)+((linelimitery-originy)^2)) | |
if magnitude < 25 and magnitude >10 then | |
magnitude = 0 | |
elseif magnitude <= 10 then | |
magnitude = 0 | |
angle = nil | |
else | |
magnitude = magnitude - 25 | |
end | |
end | |
end | |
function Joystiqs:j2Calc() | |
if (touch2 ~= nil) then | |
offsetx2 = touch2.x - originx2 | |
offsety2 = touch2.y - originy2 | |
preangle2 = (math.atan((offsety2)/(offsetx2))) | |
if offsetx2 == 0 and offsety2 > 0 then | |
angle2 = math.pi/2 | |
else | |
if offsetx2 <= 0 and offsety2 > 0 then | |
angle2 = math.pi + preangle2 | |
elseif offsetx2 < 0 and offsety2 <= 0 then | |
angle2 = math.pi + preangle2 | |
elseif offsetx2 >=0 and offsety2 < 0 then | |
angle2 = (2*math.pi) + preangle2 | |
else | |
angle2 = preangle2 | |
end | |
end | |
if math.sqrt((offsetx2*offsetx2)+(offsety2*offsety2)) > 75 then | |
linelimiterx2 = (75*math.cos(angle2)) + originx2 | |
linelimitery2 = (75*math.sin(angle2)) + originy2 | |
else | |
linelimiterx2 = touch2.x | |
linelimitery2 = touch2.y | |
end | |
magnitude2 = math.sqrt(((linelimiterx2-originx2)^2)+((linelimitery2-originy2)^2)) | |
fill(255, 255, 255, 100) | |
ellipse(originx2, originy2, 150) | |
line(originx2, originy2, linelimiterx2, linelimitery2) | |
fill(0, 0, 0, 100) | |
ellipse(linelimiterx2, linelimitery2, 150) | |
if magnitude2 < 10 then | |
magnitude2 = 0 | |
angle2 = nil | |
else | |
magnitude2 = magnitude2 - 25 | |
end | |
end | |
end | |
function Joystiqs:getmag() | |
return magnitude | |
end | |
function Joystiqs:getang() | |
return angle | |
end | |
function Joystiqs:getang2() | |
return angle2 | |
end | |
function Joystiqs:cleanJoystickData() | |
offsetx=nil | |
offsety=nil | |
offsetx2=nil | |
offsety2=nil | |
preangle=nil | |
preangle2=nil | |
angle=nil | |
angle2=nil | |
linelimiterx=nil | |
linelimitery=nil | |
linelimiterx2=nil | |
linelimitery2=nil | |
magnitude=nil | |
magnitude2=nil | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment