Compare commits
6 Commits
918c63c535
...
d20e5392f8
Author | SHA1 | Date | |
---|---|---|---|
|
d20e5392f8 | ||
|
d359afaf97 | ||
|
11a46e6227 | ||
|
f670f6bc87 | ||
|
0486787b98 | ||
|
6ba4f4d1c9 |
Before Width: | Height: | Size: 92 B After Width: | Height: | Size: 92 B |
Before Width: | Height: | Size: 89 B After Width: | Height: | Size: 90 B |
Before Width: | Height: | Size: 88 B After Width: | Height: | Size: 88 B |
Before Width: | Height: | Size: 97 B After Width: | Height: | Size: 97 B |
@ -10,6 +10,8 @@ function Animation:new(anim_data,speed)
|
|||||||
o.frame = 1
|
o.frame = 1
|
||||||
o.speed = speed or 1
|
o.speed = speed or 1
|
||||||
|
|
||||||
|
o.was_updated = false
|
||||||
|
|
||||||
setmetatable(o, self)
|
setmetatable(o, self)
|
||||||
self.__index = self
|
self.__index = self
|
||||||
return o
|
return o
|
||||||
@ -49,6 +51,9 @@ end
|
|||||||
|
|
||||||
-- to linearly animate
|
-- to linearly animate
|
||||||
function Animation:animate()
|
function Animation:animate()
|
||||||
|
if self.was_updated then
|
||||||
|
self.was_updated = false
|
||||||
|
end
|
||||||
if self.frames[self.frame] ~= 0 then
|
if self.frames[self.frame] ~= 0 then
|
||||||
-- try to animate
|
-- try to animate
|
||||||
self.subframe = self.subframe + self.speed
|
self.subframe = self.subframe + self.speed
|
||||||
@ -56,6 +61,7 @@ function Animation:animate()
|
|||||||
if self.subframe > self.frames[self.frame]*game.framerate then
|
if self.subframe > self.frames[self.frame]*game.framerate then
|
||||||
self.subframe = self.subframe - self.frames[self.frame]*game.framerate
|
self.subframe = self.subframe - self.frames[self.frame]*game.framerate
|
||||||
self.frame = self.frame + 1
|
self.frame = self.frame + 1
|
||||||
|
self.was_updated = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- cycle
|
-- cycle
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
Arrow = Entity:new()
|
Arrow = {}
|
||||||
Arrow.type = "Arrow"
|
Arrow.type = "Arrow"
|
||||||
|
Arrow.supertype = Entity.type
|
||||||
|
Arrow.display = Animation:new(animation.kupo.arrow)
|
||||||
|
setmetatable(Arrow, Entity)
|
||||||
|
|
||||||
|
|
||||||
function Arrow:new(x,y,rotation,speed)
|
function Arrow:new(x,y,rotation,speed)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
CursedBook = Entity:new()
|
CursedBook = {}
|
||||||
CursedBook.type = "CursedBook"
|
CursedBook.type = "CursedBook"
|
||||||
|
CursedBook.supertype = Entity.type
|
||||||
CursedBook.display = Animation:new(animation.cursed_book.flying)
|
CursedBook.display = Animation:new(animation.cursed_book.flying)
|
||||||
|
setmetatable(CursedBook, Entity)
|
||||||
|
|
||||||
function CursedBook:new(x,y)
|
function CursedBook:new(x,y)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
@ -28,8 +30,12 @@ function CursedBook:new(x,y)
|
|||||||
o:createBox(o.body)
|
o:createBox(o.body)
|
||||||
|
|
||||||
-- light
|
-- light
|
||||||
o.light_range = 500
|
local light_data = {}
|
||||||
--o.light = Light:new(o.pos.x,o.pos.y,o.light_range,2,hex2rgb("#fe00d1"))
|
light_data.radius = 500
|
||||||
|
light_data.shine_radius = 0
|
||||||
|
light_data.flicker = nil
|
||||||
|
light_data.color = nil
|
||||||
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
|
|
||||||
o:id()
|
o:id()
|
||||||
|
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
Decoration = Entity:new()
|
Decoration = {}
|
||||||
Decoration.type = "Decoration"
|
Decoration.type = "Decoration"
|
||||||
Decoration.display = nil
|
Decoration.supertype = Entity.type
|
||||||
|
Decoration.display = Animation:new(animation.particle.simple)
|
||||||
|
setmetatable(Decoration, Entity)
|
||||||
|
|
||||||
function Decoration:new(x,y,animation,light_radius)
|
function Decoration:new(x,y,animation,light_data)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
|
|
||||||
o.pos = {x = x, y = y}
|
o.pos = {x = x, y = y}
|
||||||
|
|
||||||
-- animations
|
if animation then
|
||||||
o.body = Animation:new(animation)
|
o.body = Animation:new(animation)
|
||||||
o:centerOffset(o.body)
|
o:centerOffset(o.body)
|
||||||
o:createBox(o.body)
|
o:createBox(o.body)
|
||||||
|
end
|
||||||
|
|
||||||
if light_radius ~= nil then
|
if light_data then
|
||||||
o.light_radius = light_radius
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
o.light = Light:new(o.pos.x,o.pos.y,o.light_radius)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
o:id()
|
o:id()
|
||||||
@ -29,5 +31,4 @@ function Decoration:handleAnimation()
|
|||||||
self:draw(self.body)
|
self:draw(self.body)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Decoration:doPhysics()
|
require "code/entities/decorations/candelabra"
|
||||||
end
|
|
||||||
|
55
code/entities/decorations/candelabra.lua
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Candelabra = {}
|
||||||
|
Candelabra.type = "Candelabra"
|
||||||
|
Candelabra.supertype = Decoration.type
|
||||||
|
Candelabra.display = Animation:new(animation.decoration.candelabra)
|
||||||
|
setmetatable(Candelabra, Decoration)
|
||||||
|
|
||||||
|
function Candelabra:new(x,y)
|
||||||
|
local light_data = {}
|
||||||
|
light_data.radius = 100
|
||||||
|
light_data.color = hex2rgb("#fed100")
|
||||||
|
|
||||||
|
local o = Decoration:new(x,y,animation.decoration.candelabra,light_data)
|
||||||
|
|
||||||
|
o.particle_rate = 5
|
||||||
|
o.particle_count = 0
|
||||||
|
|
||||||
|
setmetatable(o, self)
|
||||||
|
self.__index = self
|
||||||
|
return o
|
||||||
|
end
|
||||||
|
|
||||||
|
function Candelabra:handleAnimation()
|
||||||
|
if self.body.was_updated then
|
||||||
|
self.particle_count = self.particle_count + 1
|
||||||
|
while self.particle_count >= self.particle_rate do
|
||||||
|
local pos = math.floor(math.random(1,3))-2
|
||||||
|
|
||||||
|
local particle_data = {}
|
||||||
|
particle_data.animation = animation.particle.simple
|
||||||
|
particle_data.sprite_tint = hex2rgb("#ffffff")
|
||||||
|
particle_data.sprite_alpha_fade = true
|
||||||
|
particle_data.direction = -math.rad(90)
|
||||||
|
particle_data.speed = 0.5 + math.random(2)*0.005
|
||||||
|
particle_data.time = 0.5+math.random(0.5)
|
||||||
|
particle_data.animation_speed = 1/particle_data.time
|
||||||
|
|
||||||
|
particle_data.func = function(self)
|
||||||
|
--COSINE WAVE FUNCTION
|
||||||
|
--init variables and constants
|
||||||
|
self.t = self.t or 0
|
||||||
|
self.phase = self.phase or math.random(2*math.pi)
|
||||||
|
local dt = 0.5
|
||||||
|
local amplitude = 0.5
|
||||||
|
local frequency = 0.5/game.framerate
|
||||||
|
--calc
|
||||||
|
self.t = self.t + dt
|
||||||
|
self:moveX(amplitude*math.cos(2*math.pi*frequency*self.t+self.phase))
|
||||||
|
end
|
||||||
|
|
||||||
|
Particle:new(self.pos.x+pos*5,self.pos.y-3,particle_data)
|
||||||
|
self.particle_count = self.particle_count - self.particle_rate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Decoration.handleAnimation(self)
|
||||||
|
end
|
@ -1,6 +1,8 @@
|
|||||||
Fairy = Entity:new()
|
Fairy = {}
|
||||||
Fairy.type = "Fairy"
|
Fairy.type = "Fairy"
|
||||||
|
Fairy.supertype = Entity.type
|
||||||
Fairy.display = Animation:new(animation.fairy.flying)
|
Fairy.display = Animation:new(animation.fairy.flying)
|
||||||
|
setmetatable(Fairy, Entity)
|
||||||
|
|
||||||
function Fairy:new(x,y)
|
function Fairy:new(x,y)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
@ -19,8 +21,12 @@ function Fairy:new(x,y)
|
|||||||
o:createBox(o.body)
|
o:createBox(o.body)
|
||||||
|
|
||||||
-- light
|
-- light
|
||||||
o.light_radius = 80
|
local light_data = {}
|
||||||
o.light = Light:new(o.pos.x,o.pos.y,o.light_radius,nil,hex2rgb("#fed100"))
|
light_data.radius = 80
|
||||||
|
light_data.shine_radius = 80
|
||||||
|
light_data.flicker = nil
|
||||||
|
light_data.color = hex2rgb("#fed100")
|
||||||
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
|
|
||||||
-- timer
|
-- timer
|
||||||
o.particle_timer = 0
|
o.particle_timer = 0
|
||||||
@ -88,16 +94,19 @@ function Fairy:handleAnimation()
|
|||||||
local vector = vector(self.vel.x,self.vel.y)
|
local vector = vector(self.vel.x,self.vel.y)
|
||||||
local angle = getAngleFromVector(vector)
|
local angle = getAngleFromVector(vector)
|
||||||
self.particle_timer = 0
|
self.particle_timer = 0
|
||||||
local particle_data = {
|
local particle_data = {}
|
||||||
animation = animation.particle.simple,
|
particle_data.animation = animation.particle.simple
|
||||||
animation_speed = 1,
|
particle_data.animation_speed = 1
|
||||||
sprite_tint = hex2rgb("#fed100"),
|
particle_data.sprite_tint = hex2rgb("#fed100")
|
||||||
sprite_alpha_fade = true,
|
particle_data.sprite_alpha_fade = true
|
||||||
direction = angle-math.rad(180+math.random(60)-30),
|
particle_data.direction = angle-math.rad(180+math.random(60)-30)
|
||||||
speed = 1,
|
particle_data.speed = 1
|
||||||
speed_increase = -0.01,
|
particle_data.time = 0.75
|
||||||
time = 0.75
|
particle_data.func = function(self)
|
||||||
}
|
self.speed = self.speed - 0.01
|
||||||
|
self.vel.x = self.speed * math.cos(self.direction)
|
||||||
|
self.vel.y = self.speed * math.sin(self.direction)
|
||||||
|
end
|
||||||
Particle:new(self.pos.x,self.pos.y,particle_data)
|
Particle:new(self.pos.x,self.pos.y,particle_data)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
HookAnchor = Entity:new()
|
HookAnchor = {}
|
||||||
HookAnchor.type = "HookAnchor"
|
HookAnchor.type = "HookAnchor"
|
||||||
|
HookAnchor.supertype = Entity.type
|
||||||
HookAnchor.display = Animation:new(animation.fairy.flying)
|
HookAnchor.display = Animation:new(animation.fairy.flying)
|
||||||
|
setmetatable(HookAnchor, Entity)
|
||||||
|
|
||||||
function HookAnchor:new(x,y,hook_distance)
|
function HookAnchor:new(x,y,hook_distance)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
Kupo = Entity:new()
|
Kupo = {}
|
||||||
Kupo.type = "Kupo"
|
Kupo.type = "Kupo"
|
||||||
|
Kupo.supertype = Entity.type
|
||||||
Kupo.display = Animation:new(animation.kupo.body)
|
Kupo.display = Animation:new(animation.kupo.body)
|
||||||
|
setmetatable(Kupo, Entity)
|
||||||
|
|
||||||
function Kupo:new(x,y)
|
function Kupo:new(x,y)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
@ -27,8 +29,13 @@ function Kupo:new(x,y)
|
|||||||
o.bow_aim_frames = 8
|
o.bow_aim_frames = 8
|
||||||
o.hostile = true
|
o.hostile = true
|
||||||
|
|
||||||
o.light_radius = o.range/2
|
-- light values
|
||||||
o.light = Light:new(o.pos.x,o.pos.y,o.light_radius)
|
local light_data = {}
|
||||||
|
light_data.radius = 100
|
||||||
|
light_data.shine_radius = 20
|
||||||
|
light_data.flicker = nil
|
||||||
|
light_data.color = nil
|
||||||
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
|
|
||||||
o:id()
|
o:id()
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
LoadedObjects.Particles = {}
|
LoadedObjects.Particles = {}
|
||||||
|
Particle = {}
|
||||||
Particle = Entity:new()
|
|
||||||
Particle.type = "Particle"
|
Particle.type = "Particle"
|
||||||
|
Particle.supertype = Entity.type
|
||||||
Particle.display = Animation:new(animation.particle.simple)
|
Particle.display = Animation:new(animation.particle.simple)
|
||||||
|
setmetatable(Particle, Entity)
|
||||||
|
|
||||||
function Particle:new(x,y,particle_data)
|
function Particle:new(x,y,particle_data)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
@ -10,17 +11,18 @@ function Particle:new(x,y,particle_data)
|
|||||||
o.pos = {x = x, y = y}
|
o.pos = {x = x, y = y}
|
||||||
|
|
||||||
o.speed = particle_data.speed or 0
|
o.speed = particle_data.speed or 0
|
||||||
o.direction = particle_data.direction or o.direction
|
o.direction = particle_data.direction or 0
|
||||||
o.sprite_rotation = particle_data.sprite_rotation or o.sprite_rotation
|
o.sprite_rotation = particle_data.sprite_rotation or 0
|
||||||
o.sprite_offset = particle_data.sprite_offset or o.sprite_offset
|
o.sprite_offset = particle_data.sprite_offset or vector(0,0)
|
||||||
o.sprite_scale = particle_data.sprite_scale or o.sprite_scale
|
o.sprite_scale = particle_data.sprite_scale or vector(1,1)
|
||||||
o.sprite_tint = particle_data.sprite_tint or o.sprite_tint
|
o.sprite_tint = particle_data.sprite_tint or {1,1,1}
|
||||||
o.sprite_alpha = particle_data.sprite_alpha or o.sprite_alpha
|
o.sprite_alpha = particle_data.sprite_alpha or 1
|
||||||
o.sprite_alpha_fade = particle_data.sprite_alpha_fade or false
|
o.sprite_alpha_fade = particle_data.sprite_alpha_fade or false
|
||||||
o.sprite_alpha_base = o.sprite_alpha
|
o.sprite_alpha_base = o.sprite_alpha
|
||||||
o.sprite_flip = particle_data.sprite_flip or o.sprite_flip
|
o.sprite_flip = particle_data.sprite_flip or vector(1,1)
|
||||||
|
o.func = particle_data.func or nil
|
||||||
o.time = particle_data.time or nil
|
o.time = particle_data.time or nil
|
||||||
|
|
||||||
if o.time ~= nil then
|
if o.time ~= nil then
|
||||||
if particle_data.time_unit ~= nil
|
if particle_data.time_unit ~= nil
|
||||||
and particle_data.time_unit == "frames" then
|
and particle_data.time_unit == "frames" then
|
||||||
@ -36,13 +38,13 @@ function Particle:new(x,y,particle_data)
|
|||||||
y = o.speed * math.sin(o.direction)
|
y = o.speed * math.sin(o.direction)
|
||||||
}
|
}
|
||||||
|
|
||||||
o.speed_increase = particle_data.speed_increase or 0
|
|
||||||
|
|
||||||
if particle_data.light ~= nil then
|
if particle_data.light ~= nil then
|
||||||
o.light_range = particle_data.light
|
local light_data = {}
|
||||||
local flicker = particle_data.light_flicker or nil
|
light_data.radius = particle_data.light
|
||||||
local color = particle_data.light_color or nil
|
light_data.shine_radius = particle_data.light_shine or nil
|
||||||
o.light = Light:new(o.pos.x,o.pos.y,o.light_range,flicker,color)
|
light_data.flicker = particle_data.light_flicer or nil
|
||||||
|
light_data.color = particle_data.light_color or nil
|
||||||
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- animations
|
-- animations
|
||||||
@ -90,14 +92,11 @@ function Particle:handleAnimation()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Particle:doLogic()
|
function Particle:doLogic()
|
||||||
-- adjust speed
|
if self.func then
|
||||||
if self.speed_increase ~= 0 then
|
self:func()
|
||||||
self.speed = self.speed + self.speed_increase
|
|
||||||
self.vel.x = self.speed * math.cos(self.direction)
|
|
||||||
self.vel.y = self.speed * math.sin(self.direction)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.time ~= nil then
|
if self.time then
|
||||||
if self.timer >= self.time then self:kill() end
|
if self.timer >= self.time then self:kill() end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
Player = Entity:new()
|
Player = {}
|
||||||
Player.type = "Player"
|
Player.type = "Player"
|
||||||
|
Player.supertype = Entity.type
|
||||||
Player.display = Animation:new(animation.nancy.idle)
|
Player.display = Animation:new(animation.nancy.idle)
|
||||||
|
setmetatable(Player, Entity)
|
||||||
|
|
||||||
function Player:new(x,y)
|
function Player:new(x,y)
|
||||||
local o = Entity:new(x,y)
|
local o = Entity:new(x,y)
|
||||||
@ -41,9 +43,6 @@ function Player:new(x,y)
|
|||||||
o.walljump_nodrift_amount = 12
|
o.walljump_nodrift_amount = 12
|
||||||
o.walljump_impulse = { x = 2.5, y = 3.5 }
|
o.walljump_impulse = { x = 2.5, y = 3.5 }
|
||||||
|
|
||||||
-- light values
|
|
||||||
o.light_radius = 40 -- screen pixels
|
|
||||||
|
|
||||||
-- status
|
-- status
|
||||||
o.can_jump = true
|
o.can_jump = true
|
||||||
o.can_fall = true
|
o.can_fall = true
|
||||||
@ -75,7 +74,12 @@ function Player:new(x,y)
|
|||||||
o:createBox(o.body,0,4,-1,-5)
|
o:createBox(o.body,0,4,-1,-5)
|
||||||
|
|
||||||
-- lights
|
-- lights
|
||||||
o.light = Light:new(o.pos.x,o.pos.y,o.light_radius)
|
local light_data = {}
|
||||||
|
light_data.radius = 40
|
||||||
|
light_data.shine_radius = 20
|
||||||
|
light_data.flicker = nil
|
||||||
|
light_data.color = nil
|
||||||
|
o.light = Light:new(o.pos.x,o.pos.y,light_data)
|
||||||
|
|
||||||
o:id()
|
o:id()
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
Entity = {class = "Entity"}
|
|
||||||
LoadedObjects.Entities = {}
|
LoadedObjects.Entities = {}
|
||||||
|
Entity = {}
|
||||||
|
Entity.type = "Entity"
|
||||||
|
|
||||||
function Entity:new(x,y)
|
function Entity:new(x,y)
|
||||||
local o = {}
|
local o = {}
|
||||||
@ -23,11 +24,9 @@ function Entity:new(x,y)
|
|||||||
o.sprite_tint = {1,1,1}
|
o.sprite_tint = {1,1,1}
|
||||||
o.sprite_alpha = 1
|
o.sprite_alpha = 1
|
||||||
o.sprite_flip = { x = 1, y = 1}
|
o.sprite_flip = { x = 1, y = 1}
|
||||||
o.illuminated = false
|
|
||||||
|
|
||||||
setmetatable(o, self)
|
setmetatable(o, self)
|
||||||
self.__index = self
|
self.__index = self
|
||||||
|
|
||||||
return o
|
return o
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -79,19 +79,7 @@ function drawGameworldDarkness()
|
|||||||
love.graphics.setBlendMode("replace")
|
love.graphics.setBlendMode("replace")
|
||||||
love.graphics.setColor(0,0,0,0)
|
love.graphics.setColor(0,0,0,0)
|
||||||
for _, light in pairs(LoadedObjects.Lights) do
|
for _, light in pairs(LoadedObjects.Lights) do
|
||||||
if light.range ~= 0 then
|
light:drawClear()
|
||||||
local position = {
|
|
||||||
x = (light.pos.x - Camera.pos.x) / game.scale,
|
|
||||||
y = (light.pos.y - Camera.pos.y) / game.scale
|
|
||||||
}
|
|
||||||
local range = (light.range + light.flicker_value) / game.scale
|
|
||||||
love.graphics.circle(
|
|
||||||
"fill",
|
|
||||||
position.x,
|
|
||||||
position.y,
|
|
||||||
range
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
Canvas.Darkness:endDrawing()
|
Canvas.Darkness:endDrawing()
|
||||||
Canvas.Darkness:draw()
|
Canvas.Darkness:draw()
|
||||||
@ -99,23 +87,7 @@ end
|
|||||||
|
|
||||||
function drawGameworldLights()
|
function drawGameworldLights()
|
||||||
for _, light in pairs(LoadedObjects.Lights) do
|
for _, light in pairs(LoadedObjects.Lights) do
|
||||||
if light.range ~= 0 then
|
light:drawShine()
|
||||||
love.graphics.setColor(light.color[1],light.color[2],light.color[3],1)
|
|
||||||
|
|
||||||
shader.circle_gradient:send("pos_x",- Camera.pos.x + light.pos.x)
|
|
||||||
shader.circle_gradient:send("pos_y",- Camera.pos.y + light.pos.y)
|
|
||||||
shader.circle_gradient:send("range",light.range)
|
|
||||||
shader.circle_gradient:send("scale",game.scale)
|
|
||||||
|
|
||||||
love.graphics.setShader(shader.circle_gradient)
|
|
||||||
love.graphics.circle(
|
|
||||||
"fill",
|
|
||||||
- Camera.pos.x + light.pos.x,
|
|
||||||
- Camera.pos.y + light.pos.y,
|
|
||||||
light.range
|
|
||||||
)
|
|
||||||
love.graphics.setShader()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
Light = {}
|
Light = {}
|
||||||
LoadedObjects.Lights = {}
|
LoadedObjects.Lights = {}
|
||||||
|
|
||||||
function Light:new(x,y,range,flicker,color,lum)
|
function Light:new(x,y,data)
|
||||||
local o = {}
|
local o = {}
|
||||||
o.pos = {
|
o.pos = {
|
||||||
x = x,
|
x = x,
|
||||||
y = y
|
y = y
|
||||||
}
|
}
|
||||||
o.range = range
|
o.radius = data.radius
|
||||||
o.lum = lum or 1
|
o.shine_radius = data.shine_radius or 0
|
||||||
o.color = color or {1,1,1}
|
o.lum = data.lum or 1
|
||||||
o.flicker_amount = flicker or 2
|
o.color = data.color or {1,1,1}
|
||||||
|
o.flicker_amount = data.flicker or 2
|
||||||
o.flicker_value = 0
|
o.flicker_value = 0
|
||||||
o.dim = 0
|
o.dim = 0
|
||||||
o.flicker_time = 60/12
|
o.flicker_time = 60/12
|
||||||
@ -45,3 +46,39 @@ function Light:flicker()
|
|||||||
self.flicker_value = math.min(math.max(self.flicker_value, -self.flicker_amount), self.flicker_amount)
|
self.flicker_value = math.min(math.max(self.flicker_value, -self.flicker_amount), self.flicker_amount)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Light:drawClear()
|
||||||
|
if self.radius ~= 0 then
|
||||||
|
local position = {
|
||||||
|
x = (self.pos.x - Camera.pos.x) / game.scale,
|
||||||
|
y = (self.pos.y - Camera.pos.y) / game.scale
|
||||||
|
}
|
||||||
|
local radius = (self.radius + self.flicker_value) / game.scale
|
||||||
|
love.graphics.circle(
|
||||||
|
"fill",
|
||||||
|
position.x,
|
||||||
|
position.y,
|
||||||
|
radius
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Light:drawShine()
|
||||||
|
if self.radius ~= 0 then
|
||||||
|
love.graphics.setColor(self.color[1],self.color[2],self.color[3],1)
|
||||||
|
|
||||||
|
shader.circle_gradient:send("pos_x",- Camera.pos.x + self.pos.x)
|
||||||
|
shader.circle_gradient:send("pos_y",- Camera.pos.y + self.pos.y)
|
||||||
|
shader.circle_gradient:send("radius",self.shine_radius)
|
||||||
|
shader.circle_gradient:send("scale",game.scale)
|
||||||
|
|
||||||
|
love.graphics.setShader(shader.circle_gradient)
|
||||||
|
love.graphics.circle(
|
||||||
|
"fill",
|
||||||
|
- Camera.pos.x + self.pos.x,
|
||||||
|
- Camera.pos.y + self.pos.y,
|
||||||
|
self.radius
|
||||||
|
)
|
||||||
|
love.graphics.setShader()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@ -244,7 +244,7 @@ function drawSpawns()
|
|||||||
)
|
)
|
||||||
|
|
||||||
if spawn.selected then
|
if spawn.selected then
|
||||||
local text = spawn.archetype.type.."\n---\nPosition\n["..spawn.args[1]..","..spawn.args[2].."]"
|
local text = spawn.archetype.type.."\n("..spawn.archetype.supertype..")\n---\nPosition\n["..spawn.args[1]..","..spawn.args[2].."]"
|
||||||
if #spawn.args > 2 then
|
if #spawn.args > 2 then
|
||||||
text = text .. "\n---\nData:\n"
|
text = text .. "\n---\nData:\n"
|
||||||
for i=3, #spawn.args do
|
for i=3, #spawn.args do
|
||||||
|
@ -2,7 +2,7 @@ return {
|
|||||||
name = "Dev Level",
|
name = "Dev Level",
|
||||||
tileset = tileset.library,
|
tileset = tileset.library,
|
||||||
properties = {
|
properties = {
|
||||||
darkness = false
|
darkness = true
|
||||||
},
|
},
|
||||||
tiles = {
|
tiles = {
|
||||||
{ 1, 4, 0, 0, 0, 2, 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, 4, 0, 0, 0, 2, 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},
|
||||||
@ -32,7 +32,8 @@ return {
|
|||||||
spawns = {
|
spawns = {
|
||||||
{Fairy,{100,88}},
|
{Fairy,{100,88}},
|
||||||
{HookAnchor,{200,89,100}},
|
{HookAnchor,{200,89,100}},
|
||||||
{HookAnchor,{400,89,120}}
|
{HookAnchor,{400,89,120}},
|
||||||
|
{Candelabra,{328,297}}
|
||||||
},
|
},
|
||||||
rooms = {
|
rooms = {
|
||||||
{{96,64},{544,320}},
|
{{96,64},{544,320}},
|
||||||
|
@ -2,7 +2,7 @@ shader = {}
|
|||||||
shader.circle_gradient = love.graphics.newShader[[
|
shader.circle_gradient = love.graphics.newShader[[
|
||||||
uniform float pos_x;
|
uniform float pos_x;
|
||||||
uniform float pos_y;
|
uniform float pos_y;
|
||||||
uniform float range;
|
uniform float radius;
|
||||||
uniform float scale;
|
uniform float scale;
|
||||||
|
|
||||||
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ){
|
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ){
|
||||||
@ -12,11 +12,13 @@ shader.circle_gradient = love.graphics.newShader[[
|
|||||||
float distance_x = pos_x - screen_coords.x / scale;
|
float distance_x = pos_x - screen_coords.x / scale;
|
||||||
float distance_y = pos_y - screen_coords.y / scale;
|
float distance_y = pos_y - screen_coords.y / scale;
|
||||||
float distance = sqrt( pow(distance_x,2) + pow(distance_y,2) ) ;
|
float distance = sqrt( pow(distance_x,2) + pow(distance_y,2) ) ;
|
||||||
if (distance < range){
|
if (distance < radius){
|
||||||
float alpha = 1-(5*distance/range);
|
float alpha = 1-(5*distance/radius);
|
||||||
if (pixel.a > alpha){
|
if (pixel.a > alpha){
|
||||||
pixel.a = alpha;
|
pixel.a = alpha;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pixel.a = 0;
|
||||||
}
|
}
|
||||||
return pixel * color * color;
|
return pixel * color * color;
|
||||||
}
|
}
|
||||||
|