This commit is contained in:
bizcochito 2022-01-18 21:06:21 +01:00
commit 0fa50c3324
6 changed files with 265 additions and 42 deletions

View File

@ -2,7 +2,7 @@ Arrow = Entity:New(x,y)
function Arrow:New(x,y,rotation,speed) function Arrow:New(x,y,rotation,speed)
local o = Entity:New(x,y) local o = Entity:New(x,y)
arrow = arrow + 1
o.pos = {x = x, y = y} o.pos = {x = x, y = y}
o.speed = speed or 0 o.speed = speed or 0
o.sprite_rotation = rotation or 0 o.sprite_rotation = rotation or 0
@ -32,45 +32,47 @@ function Arrow:HandleAnimation()
end end
function Arrow:DoPhysics() function Arrow:DoPhysics()
-- horizontal collisions if not self.stuck then
if not isThereAnyCollisionAt( -- horizontal collisions
self.pos.x + self.vel.x, if not isThereAnyCollisionAt(
self.pos.y self.pos.x + self.vel.x,
) then self.pos.y
self.pos.x = self.pos.x + self.vel.x ) then
else self.pos.x = self.pos.x + self.vel.x
while not isThereObjectAt( else
self.pos.x + math.sign(self.vel.x), while not isThereObjectAt(
self.pos.y, self.pos.x + math.sign(self.vel.x),
objects.collisions self.pos.y,
) do objects.collisions
self.pos.x = self.pos.x + math.sign(self.vel.x) ) do
self.pos.x = self.pos.x + math.sign(self.vel.x)
end
self.stuck = true
end end
self.stuck = true -- vertical collision
end if not isThereAnyCollisionAt(
-- vertical collision
if not isThereAnyCollisionAt(
self.pos.x,
self.pos.y + self.vel.y
) then
self.pos.y = self.pos.y + self.vel.y
else
while not isThereObjectAt(
self.pos.x, self.pos.x,
self.pos.y + math.sign(self.vel.y), self.pos.y + self.vel.y
objects.collisions ) then
) do self.pos.y = self.pos.y + self.vel.y
self.pos.y = self.pos.y + math.sign(self.vel.y) else
while not isThereObjectAt(
self.pos.x,
self.pos.y + math.sign(self.vel.y),
objects.collisions
) do
self.pos.y = self.pos.y + math.sign(self.vel.y)
end
self.stuck = true
end
-- stuck into collisions
if self.stuck then
--lets allow the arrow to tip a bit into the thing
self.pos.x = self.pos.x + self.vel.x / 5
self.pos.y = self.pos.y + self.vel.y / 5
self.vel.x = 0
self.vel.y = 0
self.illuminated = false
end end
self.stuck = true
end
-- stuck into collisions
if self.stuck then
--lets allow the arrow to tip a bit into the thing
self.pos.x = self.pos.x + self.vel.x / 5
self.pos.y = self.pos.y + self.vel.y / 5
self.vel.x = 0
self.vel.y = 0
self.illuminated = false
end end
end end

View File

@ -50,8 +50,8 @@ end
function Fairy:DoPhysics() function Fairy:DoPhysics()
local random_x = math.random(-0.04,0.04) local random_x = math.random(-4, 4)/100
local random_y = math.random(-0.04,0.04) local random_y = math.random(-4, 4)/100
self.vel.x = self.vel.x + random_x self.vel.x = self.vel.x + random_x
self.vel.y = self.vel.y + random_y self.vel.y = self.vel.y + random_y
-- move -- move

View File

@ -69,9 +69,9 @@ function Kupo:Smart()
self.bow_rotation = angle self.bow_rotation = angle
end end
-- holding tight dispersion -- also affets arrows -- holding tight dispersion -- also affects arrows
if self.bow_rotation == angle then if self.bow_rotation == angle then
self.bow_rotation = self.bow_rotation + math.rad(math.random(math.abs(self.bow_frame-self.bow_aim_frames-self.bow_frames)/2)) self.bow_rotation = self.bow_rotation + math.rad(math.random(math.abs(math.floor(self.bow_frame-self.bow_aim_frames-self.bow_frames)/2)))
end end
-- AIMING AI -- AIMING AI

View File

@ -1,5 +1,12 @@
function stepEditor() function stepEditor()
palette = palette or false
AnimateTiles() AnimateTiles()
if love.keyboard.isDown("tab") and not pressed then
if palette then palette = false else palette = true end
local pressed = true
else
pressed = false
end
end end
function stepGame() function stepGame()
@ -28,6 +35,9 @@ function drawEditor()
end end
gameworldDraw() gameworldDraw()
if palette then
paletteDraw()
end
end end
function drawGame() function drawGame()
@ -91,3 +101,66 @@ function gameworldLighting()
love.graphics.scale(1,1) love.graphics.scale(1,1)
DrawDarkness() DrawDarkness()
end end
function paletteDraw()
local width = LevelData.tileset:getPixelWidth()/tileProperties.width
local height = LevelData.tileset:getPixelHeight()/tileProperties.height
local position_x = 1
local position_y = 1
for i = 1, #TileIndex-width-1 do
love.graphics.draw(
LevelData.tileset,
TileIndex[i],
position_x * tileProperties.width*2,
(--[[p_scroll +]]position_y) * tileProperties.height*2,
0,
2,
2
)
position_x = position_x + 1
if position_x > width then
position_x = position_x - width
position_y = position_y + 1
end
end
love.graphics.rectangle(
"line",
tileProperties.width*2,
(--[[p_scroll +]] 1) * tileProperties.height*2,
2*LevelData.tileset:getPixelWidth(),
2*LevelData.tileset:getPixelHeight()
)
end
--[[
function DrawSelectingPaletteTile()
if selecting_tile ~= nil then
local width = TileProperties.tileset:getPixelWidth()/TileProperties.width
local height = TileProperties.tileset:getPixelHeight()/TileProperties.height
local positionx = 1
local positiony = 1
for i = 1, #Tile-12 do
if i == selecting_tile then
love.graphics.rectangle(
"line",
positionx * TileProperties.width*2,
(p_scroll + positiony) * TileProperties.height*2,
TileProperties.width*2-1,
TileProperties.height*2-1
)
end
positionx = positionx + 1
if positionx > width then
positionx = positionx - width
positiony = positiony + 1
end
end
end
end]]

View File

@ -19,6 +19,7 @@ function CreateLight(x,y,range,lum,flicker)
o.flicker_speed = flicker_speed or 60/12 o.flicker_speed = flicker_speed or 60/12
o.flicker_time = 0 o.flicker_time = 0
table.insert(Lights,o) table.insert(Lights,o)
return o return o
end end

147
main.lua
View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
function love.load() function love.load()
do_pause = false do_pause = false
@ -140,3 +141,149 @@ function love.draw()
drawGame() drawGame()
end end
end end
=======
function love.load()
arrow = 0
do_pause = false
debug = false
debug_collision = false
editor_mode = false
textScale = 1
fps_count = 0
fps_second = 0
fps_draw = 0
fps_total = 0
love.graphics.setColor(1,1,1)
love.keyboard.setKeyRepeat(true)
love.graphics.setDefaultFilter("nearest") -- good pixel
game = {
scale = 2,
width = love.graphics.getWidth(),
height = love.graphics.getHeight(),
paused = false
}
require "data/scripts"
Canvas = {
Darkness = CreateDarkness()
}
love.graphics.setCanvas(Canvas.Darkness)
SetDarkness()
love.graphics.setCanvas()
Camera.width = game.width
Camera.height = game.height
levelList = {"level1","2","3","ewae","tileset"}
levelNum = 1
currLevel = levelList[levelNum]
LoadedEntities = {}
LevelLoadTiles()
main_Player = Player:New(75,50)
table.insert(LoadedEntities,main_Player)
table.insert(LoadedEntities,Kupo:New(100,150))
table.insert(LoadedEntities,Kupo:New(300,150))
table.insert(LoadedEntities,Decoration:New(200,89,animation.decoration.candelabra,80))
table.insert(LoadedEntities,Fairy:New(200,88))
gravity = 0.2
end
function love.update(dt)
-- fps counter
if fps_second >= 1 then
fps_second = fps_second - 1
fps_draw = fps_count
fps_count = 0
fps_total = fps_total + 1
end
fps_second = fps_second + dt
fps_count = fps_count + 1
current_dt = dt
if editor_mode then
stepEditor()
else
stepGame()
end
end
function love.wheelmoved(_, y)
if editor_mode then
if palette then
p_scroll = p_scroll + y or 0
else
local oscale = game.scale
game.scale = math.max(0.1,game.scale + y/16)
end
end
end
function love.keypressed(key)
if key == "escape" then
if do_pause then
do_pause = false
else
pausepage = 1
do_pause = true
end
end
if key == "f1" then
if debug then
debug = false
debug_collision = true
elseif debug_collision then
debug_collision = false
else
debug = true
end
end
if key == "f2" then
if editor_mode then
else
main_Player.pos.x, main_Player.pos.y = 16,-10
end
end
if key == "f3" then
LoadLevel()
end
if key == "f4" then
if editor_mode then
editor_mode = false
else
editor_mode = true
end
end
end
function love.draw()
if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then
game.width = love.graphics.getWidth()
game.height = love.graphics.getHeight()
game_resize = true
else
game_resize = false
end
if editor_mode then
drawEditor()
else
drawGame()
end
love.graphics.print(arrow,10,40)
end
>>>>>>> 5f0256e0afc22c4f091fb621b7ff06b7d3be79c7