12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- Caveman = extend(Person)
- Caveman.rangeRange = {200, 350}
- Caveman.reloadRange = {1, 1.5}
- ----------------
- -- Core
- ----------------
- function Caveman:activate()
- self.gender = love.math.random() < .5 and 'female' or 'male'
- self.index = love.math.random(1, self.gender == 'male' and 1 or 2)
- self.image = data.media.graphics.dinoland[self.gender]['normal' .. self.index]
- self.direction = 1
- --self.hasSpear = love.math.random() > .5
- self.state = self.state or self.idle
- self.walkTimer = 1
- self.reloadTimer = 0
- self.range = lume.random(unpack(self.rangeRange))
- Person.activate(self)
- end
- function Caveman:update()
- self.walkTimer = timer.rot(self.walkTimer)
- Person.update(self)
- end
- ----------------
- -- Helpers
- ----------------
- function Caveman:reloadSpear()
- self.reloadTimer = timer.rot(self.reloadTimer)
- end
- function Caveman:inRange()
- return self:distanceTo(ctx.pigeon) < self.range
- end
- ----------------
- -- States
- ----------------
- Caveman.idle = {}
- Caveman.idle.walkRate = {.4, .5}
- function Caveman.idle:update()
- self.image = data.media.graphics.dinoland[self.gender]['normal' .. self.index]
- if ctx.pigeon and self:distanceTo(ctx.pigeon) < 300 then
- self:changeState(love.math.random() < .5 and 'panic' or 'attack')
- end
- if self.walkTimer == 0 then
- self:hop(0)
- self.walkTimer = lume.random(unpack(self.state.walkRate))
- end
- end
- Caveman.panic = {}
- Caveman.panic.walkRate = {.3, .4}
- function Caveman.panic:update()
- self.direction = 1 -- -self:directionTo(ctx.pigeon)
- self.image = data.media.graphics.dinoland[self.gender]['panic' .. self.index]
- if self.walkTimer == 0 then
- self:hop(self.direction)
- self.walkTimer = lume.random(unpack(self.state.walkRate))
- end
- self:reloadSpear()
- end
- Caveman.attack = {}
- Caveman.attack.walkRate = {.4, .6}
- function Caveman.attack:update()
- self.direction = self:directionTo(ctx.pigeon)
- self.image = data.media.graphics.dinoland[self.gender]['normal' .. self.index]
- self:reloadSpear()
- if self:inRange() then
- if self.walkTimer == 0 and self.reloadTimer == 0 then
- self.reloadTimer = lume.random(unpack(self.reloadRange))
- ctx.projectiles:add(Spear, {x = self.body:getX(), y = self.body:getY() - self.h, direction = self.direction})
- end
- else
- if self.walkTimer == 0 then
- self:hop(self.direction)
- self.walkTimer = lume.random(unpack(self.state.walkRate))
- end
- end
- end
|