from Setup import *
class Actor:
- width, height = 25, 50
+ width, height = 50, 100
colour = (76, 82, 92)
speed = 0.2
- jump_strength = 0.5
+ jump_strength = 1
gravity = 0.098
friction = 0.9
self.collision_mask = collision_mask # the layer the actor detects collisions against
self.health = 100
-
- self.crouching = False
- self.crouch_timer = None
+ self.dead = False
self.areas = dict()
def update(self, delta):
-
- if self.crouching and self.crouch_timer == 0:
- self.position.y -= self.height/2
- self.crouching = False
- if self.crouch_timer is not None:
- self.crouch_timer -= delta
- self.crouch_timer = max(0, self.crouch_timer)
-
for area in self.areas.values():
area.update(delta,self.position)
+ if self.is_dead():
+ return
+
+
# Apply friction so the enemy isn't walking on ice
if self.on_ground:
self.velocity.x *= self.friction
# Apply gravity
self.velocity.y += self.gravity
+ def is_dead(self):
+ if self.health <= 0:
+ self.dead = True
+ def modify_health(self):
- def follow_target(self, node):
+
+ def follow_target(self, node, follow_range=None, stop_dist=None):
+ if stop_dist is None:
+ stop_dist = max(self.height, self.width) * 1.5
+
target = node.position
# So that actor doesn't come up and hug u lol
- if (self.position - target).length_squared() < pow(max(self.height, self.width) * 1.5,2):
+ if (self.position - target).length_squared() < pow(stop_dist,2):
return
if target.x < self.position.x:
if target.y < self.position.y:
self.jump()
- def crouch(self, time=None):
- self.crouching = True
- self.position.y += self.height/2
- if time is not None:
- self.crouch_timer = time
- else:
- self.crouch_timer = None
-
-
def jump(self):
if self.on_ground:
self.velocity.y = -self.jump_strength
for thing in mask:
if thing == self:
continue
+ for area in self.areas.values():
+ if area.is_colliding(thing):
+ area.signal(thing)
if collision_rect.colliderect(thing.get_collision_rect()):
- for area in self.areas.values():
- if area.is_colliding(thing):
- print('b')
- area.signal(thing)
if vel.y > 0:
pos.y = thing.position.y - self.height
vel.y = min(vel.y + thing.velocity.y, 0)
def get_collision_rect(self, pos=None):
if pos is None:
pos = self.position
- if self.crouching:
- return pg.Rect(pos, (self.width, self.height/2))
- else:
- return pg.Rect(pos, (self.width, self.height))
+ return pg.Rect(pos, (self.width, self.height))
def draw(self, surf):
pg.draw.rect(surf, self.colour, self.get_collision_rect(), border_radius=8)
# Uncomment for debugging area hitboxes
- for area in self.areas.values():
- area.draw(surf)
+ # for area in self.areas.values():
+ # area.draw(surf)
def __init__(self, pos, collision_layer, collision_mask):
super().__init__(pos, collision_layer, collision_mask)
- self.areas = {"head":Area(self.position,pg.Vector2(0,-25), self.width, 25, Player, self.knockout)}
+ self.areas = {"head":Area(self.position,pg.Vector2(self.width * 1/3 * 1/2,-5), self.width * 2/3, 25, Player, self.knockout)}
self.dizzy_time = 0
def knockout(self, node):
self.dizzy_time = 5000
- print(node)
+ self.health -= 50
node.on_ground = True
node.jump()
# self.crouch(1000)
from Actors import Actor
+from Player import Player
class Pet(Actor):
width,height = 35,25
- speed = 0.25
+ speed = Player.speed * 0.75
+ jump_strength = Player.jump_strength / 2
def __init__(self, pos, collision_layer, collision_mask):
super().__init__(pos, collision_layer, collision_mask)
def update(self, delta, target):
super().update(delta)
- self.follow_target(target)
+ self.follow_target(target, stop_dist=70)
self.position, self.velocity = self.move_and_collide(self.position, self.velocity, delta)