zoria/src/slime.py

32 lines
1.1 KiB
Python

import math
from . import vector
from .rand import rand
from .vector import Vector
def slime_logic(self, dtime, map, player):
self.timer += dtime
if self.timer >= 0.3: # Let's not do raycasting every frame
# Look for a target
if vector.distance(self.pos, player.pos) <= 6 \
and len(map.raycast(self.pos, player.pos, self.z)) == 0:
self.target_pos = player.pos
if vector.distance(self.pos, self.target_pos) <= 1:
self.target_pos = self.pos
self.vel = Vector(0)
else:
self.vel = vector.direction(self.pos, self.target_pos) * 1.5
if vector.distance(self.pos, player.pos) <= 1:
if rand(0, 15) == 0:
player.set_hp(player.hp - 2)
# Look for a new destination
if self.target_pos == self.pos:
if rand(0, 2) == 0:
dest = self.pos + Vector(rand(-5, 5), rand(-5, 5))
if len(map.raycast(self.pos, dest, self.z)) == 0:
self.target_pos = dest
self.timer = 0