1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
local plr={
x=250,
y=250,
}
local bump = require "bump"
local PL_SPEED = 170
local PL_SPRINT_SPEED = 280
local font, title
local world
local jerma
function love.load()
font = love.graphics.newFont("APL333.ttf",72)
title = love.graphics.newText(font, "room A9")
jerma = love.graphics.newImage("jerma.jpg")
world = bump.newWorld()
world:add("player", plr.x, plr.y, 10,10)
world:add("jerma", 30,400, 400, 50)
end
local function player_movement(dt)
local speed =
(love.keyboard.isScancodeDown("lshift","rshift") and PL_SPRINT_SPEED or PL_SPEED)
local vx = 0
local vy = 0
if love.keyboard.isScancodeDown('w','up') then vy = vy - 1 end
if love.keyboard.isScancodeDown('s','down') then vy = vy + 1 end
if love.keyboard.isScancodeDown('a','left') then vx = vx - 1 end
if love.keyboard.isScancodeDown('d','right') then vx = vx + 1 end
local sf = math.sqrt(vx*vx+vy*vy)
if sf == 0 then return end
vx = vx / sf
vy = vy / sf
local tx = plr.x + vx * dt * speed
local ty = plr.y + vy * dt * speed
local ax, ay = world:move("player",tx,ty)
plr.x = ax
plr.y = ay
end
local function draw_player()
love.graphics.setColor(0.91,0.62,0)
love.graphics.rectangle("fill", plr.x,plr.y, 10,10)
end
local function draw_room()
love.graphics.setColor(0.8,0.8,0.8)
love.graphics.setLineWidth(10)
love.graphics.rectangle("line",30,80,580,370)
love.graphics.draw(title,610-title:getWidth(),-10)
end
local draw_thing = coroutine.wrap(function()
local t = 0
local angry = false
local tri_a = 100
local tri_h = (math.sqrt(3)/2)*tri_a
local ell_l = 20
local ell_r = 30
while true do
local theta = t/10
local c = math.cos(theta)
local s = math.sin(theta)
local dist = math.sqrt((420-plr.x)^2 + (240-plr.y)^2)
if not angry and dist < 100 then
angry = true
elseif angry and dist > 200 then
angry = false
end
love.graphics.push()
love.graphics.translate(420,240)
love.graphics.push()
love.graphics.setLineWidth(10)
love.graphics.setColor(angry and {1,0,0,0.8} or {0.7,0,0.5,0.8})
love.graphics.rotate(-theta/1.618)
love.graphics.polygon("line", -tri_a/2,-tri_h/3, tri_a/2,-tri_h/3, 0,2*tri_h/3)
love.graphics.pop()
love.graphics.setLineWidth(7)
love.graphics.setColor(0.8,0.8,0,0.7)
love.graphics.ellipse("line", ell_l*c,ell_l*s, ell_r,2*ell_r)
love.graphics.setColor(0,0.8,0.8,0.7)
love.graphics.ellipse("line", -ell_l*c,-ell_l*s, ell_r,2*ell_r)
love.graphics.pop()
t = t + (angry and 1.8 or 1)
coroutine.yield()
end
end)
function draw_jerma()
love.graphics.setColor(1,1,1,1)
local sx = 400/jerma:getWidth()
local sy = 50/jerma:getHeight()
local px =
love.graphics.draw(jerma,30,400, 0, sx,sy)
end
function love.update(dt)
player_movement(dt)
end
function love.draw()
love.graphics.clear(1,1,1)
love.graphics.setColor(0,0,0)
-- love.graphics.print("bees "..plr.x.." "..plr.y,10,10)
draw_room()
draw_jerma()
draw_player()
draw_thing()
end
|