-
Notifications
You must be signed in to change notification settings - Fork 0
/
catfish.py
73 lines (52 loc) · 1.69 KB
/
catfish.py
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
from __future__ import division
import pygame
import vector
from visible import *
from score import *
class Catfish(Visible):
sprite_path = "gfx/catfish.png"
sprite_res = (64, 84)
sprite_idle = Subsprite(0, 8)
list = []
__dmg_max = 5
__chase_speed = 40
__drift_speed = 40
__velocity = (0, __drift_speed)
score = 200
def __init__(self, pos):
super(Catfish, self).__init__()
self.list.append(self)
self.set_animation(self.sprite_idle, 10)
self.set_position(pos)
self.__dmg = 0
self.bound = None
self.target = None
self.whirl = False
def update(self, delta, view):
super(Catfish, self).update(delta)
if self.rect.colliderect(view):
if self.whirl:
v = (self.target.centerx - self.rect.centerx, self.target.centery - self.rect.centery)
mag = vector.mag(v)
if mag < 300 * delta:
self.rect.center = self.target.center
else:
v = vector.muls(vector.divs(v, vector.mag(v)), 300 * delta)
self.move(v)
else:
if self.bound.colliderect(self.target):
if self.rect.centerx < self.target.centerx:
self.move((self.__chase_speed * delta, 0))
self.rect.centerx = min(self.rect.centerx, self.target.centerx)
self.rect.right = min(self.rect.right, self.bound.right)
elif self.rect.centerx > self.target.centerx:
self.move((-self.__chase_speed * delta, 0))
self.rect.centerx = max(self.rect.centerx, self.target.centerx)
self.rect.left = max(self.rect.left, self.bound.left)
self.move(vector.muls(self.__velocity, delta))
def damage(self, amount):
self.__dmg += amount
if self.__dmg >= self.__dmg_max:
if not self.destroy:
self.destroy = True
score.add(self.score)