-from datetime import datetime,timedelta
-import threading
-
from Setup import *
from PhysicsBody import PhysicsBody
class Actor:
width, height = 50, 100
colour = (76, 82, 92)
-<<<<<<< Updated upstream
speed = 0.2
jump_strength = 1
gravity = 0.098
friction = 0.9
-=======
- speed = 0.6
- jump_strength = 1
- gravity = 0.2
- friction = 0.2
- coyote_time_amount = timedelta(milliseconds=100) # seconds after walking off ground that it still counts
- jump_buffer = []
- variable_jump_time = timedelta(milliseconds=125) # how long to hold jump so we go higher
- terminal_velocity = 15
-
->>>>>>> Stashed changes
def __init__(self, pos, collision_layer, collision_mask):
self.position = pg.Vector2(pos)
self.movable = False
-<<<<<<< Updated upstream
-=======
- self.jumping = False
- self.coyote_time = datetime.utcnow()
- self.hold_jump = datetime.utcnow()
-
- def update(self, delta):
- if self.jumping:
- if self.on_ground:
- self.jumping = False
-
-
-
- self.stun_time -= delta
- self.stun_time = max(self.stun_time, 0)
->>>>>>> Stashed changes
def update(self, delta):
for area in self.areas.values():
self.velocity.x *= self.friction
# Apply gravity
-<<<<<<< Updated upstream
self.velocity.y += self.gravity
-=======
- if self.jumping and self.velocity.y > 0:
- self.velocity.y += self.gravity * 2
- else:
- self.velocity.y += self.gravity
- self.velocity.x = max(min(self.velocity.x, self.terminal_velocity),-self.terminal_velocity)
- self.velocity.y = max(min(self.velocity.y, self.terminal_velocity),-self.terminal_velocity)
->>>>>>> Stashed changes
def is_dead(self,reason=None):
if self.health <= 0:
self.jump()
def jump(self):
-<<<<<<< Updated upstream
if self.on_ground:
self.velocity.y = -self.jump_strength
else:
v = vel
self.velocity += (math.copysign(2,v.x), v.y-1)
-=======
- if self.stun_time == 0:
- pass
- if (self.on_ground and not self.jumping) or (datetime.utcnow() - self.hold_jump <= self.variable_jump_time):
- self.velocity.y = -self.jump_strength
- if not self.jumping:
- self.hold_jump = datetime.utcnow()
- self.jumping = True
- # elif not (datetime.utcnow() - self.hold_jump <= self.variable_jump_time):
-
- def dash_left(self):
- pass
-
- def dash_right(self):
- pass
->>>>>>> Stashed changes
def move_left(self, customSpeed = speed):
self.velocity.x = -customSpeed
self.velocity.x = self.speed
def move_and_collide(self, pos, vel, delta):
- initial_pos = pos
pos.x += vel.x * delta
collision_rect = self.get_collision_rect(pos)
-
for mask in self.collision_mask:
for thing in mask:
if thing == self:
vel.x = min(vel.x, 0)
elif vel.x < 0:
pos.x = thing.position.x + thing.width
-<<<<<<< Updated upstream
vel.x = max(vel.x, 0)
=======
if vel.x > 0:
print(thing, thing.movable, vel)
>>>>>>> Stashed changes
collision_rect = self.get_collision_rect(pos)
-=======
- # vel.x = max(vel.x, 0)
- # collision_rect = self.get_collision_rect(pos)
-
-
- if datetime.utcnow() - self.coyote_time >= self.coyote_time_amount or self.jumping:
- self.on_ground = False
->>>>>>> Stashed changes
+ self.on_ground = False
pos.y += vel.y * delta
-<<<<<<< Updated upstream
collision_rect = self.get_collision_rect(pos)
for mask in self.collision_mask:
-=======
- collision_rect = self.get_collision_rect((initial_pos[0], pos.y))
- for mask in self.collision_mask:
->>>>>>> Stashed changes
for thing in mask:
if thing == self:
continue
pos.y = thing.position.y - self.height
vel.y = min(vel.y, 0)
self.on_ground = True
- self.coyote_time = datetime.utcnow()
elif vel.y < 0:
pos.y = thing.position.y + thing.height
vel.y = max(vel.y, 0)
- # collision_rect = self.get_collision_rect(pos)
-
-
+ collision_rect = self.get_collision_rect(pos)
return pos, vel
self.movable = True
self.dizzy_time = 0
-<<<<<<< Updated upstream
self.weapon = Melee(self.position, (-Melee.width/2, Melee.height/2), (0, Melee.height), self.width,-1)
-=======
- # self.health = 0 # for debugging without getting killed
-
- self.weapon = Melee(self.position, (-Melee.width/2 + 7, Melee.height/2 + self.height/3 - 8), (-5,Melee.height), self.width,-1, -10)
->>>>>>> Stashed changes
def update(self, delta, target=None):
super().update(delta)
# self.pet.update(delta, self.player, self.camera_pos)
def draw(self, surf):
-<<<<<<< Updated upstream
screen.fill((255, 255, 255))
-=======
- screen.fill((0, 191, 255))
- # screen.fill((255,255,255))
- # sky = pg.image.load("Assets/world/SKY.png")
- # surf.blit(sky,(0,0))
-
- self.world.draw(surf)
->>>>>>> Stashed changes
for enemy in self.enemies:
enemy.draw(surf)
for block in self.blocks:
+++ /dev/null
-none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world
-1400.0,700.0|1300.0,750.0|1350.0,700.0|1300.0,700.0|1250.0,700.0|1250.0,750.0|1200.0,700.0|1050.0,700.0|1000.0,700.0|950.0,700.0|900.0,700.0|850.0,700.0|800.0,700.0|750.0,700.0|700.0,700.0|650.0,700.0|600.0,700.0|550.0,700.0|500.0,700.0|450.0,700.0|400.0,700.0|350.0,700.0|300.0,700.0|250.0,700.0|200.0,700.0|150.0,700.0|100.0,700.0|50.0,700.0|0.0,700.0|0.0,750.0|50.0,750.0|100.0,750.0|1100.0,700.0|1150.0,700.0|1200.0,750.0|1150.0,750.0|1100.0,750.0|1050.0,750.0|1000.0,750.0|800.0,750.0|750.0,750.0|700.0,750.0|650.0,750.0|600.0,750.0|250.0,750.0|200.0,750.0|150.0,750.0|1450.0,650.0|1500.0,650.0|1750.0,650.0|1800.0,650.0|1850.0,650.0|1900.0,650.0|1950.0,650.0|2000.0,650.0|2050.0,650.0|2050.0,700.0|2000.0,700.0|1950.0,700.0|1900.0,700.0|1850.0,700.0|1800.0,700.0|1700.0,650.0|1650.0,650.0|1600.0,650.0|1550.0,650.0|1750.0,700.0|1700.0,700.0|1650.0,700.0|1600.0,700.0|1550.0,700.0|1500.0,700.0|1450.0,700.0|2100.0,700.0|2500.0,700.0|2500.0,650.0|2500.0,600.0|2550.0,600.0|2550.0,650.0|2550.0,700.0|2600.0,700.0|2600.0,650.0|2600.0,600.0|2450.0,750.0|2650.0,750.0|2600.0,750.0|2550.0,750.0|2500.0,750.0|2300.0,800.0|2350.0,800.0|2400.0,800.0|2450.0,800.0|2500.0,800.0|2550.0,800.0|2600.0,800.0|2650.0,800.0|2650.0,850.0|2600.0,850.0|2250.0,800.0|2250.0,850.0|2300.0,850.0|2350.0,850.0|2400.0,850.0|2450.0,850.0|2500.0,850.0|2550.0,850.0|2650.0,900.0|2600.0,900.0|2550.0,900.0|2500.0,900.0|2450.0,900.0|2400.0,900.0|2350.0,900.0|2300.0,900.0|2250.0,900.0|2200.0,900.0|2150.0,900.0|2100.0,900.0|2050.0,900.0|2000.0,900.0|1950.0,900.0|1900.0,900.0|1750.0,900.0|1700.0,900.0|1650.0,900.0|1600.0,900.0|1550.0,900.0|1500.0,900.0|1450.0,900.0|1400.0,900.0|1350.0,900.0|1300.0,900.0|1250.0,900.0|1200.0,900.0|1150.0,900.0|1100.0,900.0|1050.0,900.0|1000.0,900.0|950.0,900.0|900.0,900.0|850.0,900.0|800.0,900.0|750.0,900.0|700.0,900.0|650.0,900.0|600.0,900.0|550.0,900.0|450.0,850.0|400.0,850.0|350.0,850.0|300.0,850.0|250.0,850.0|200.0,850.0|150.0,850.0|100.0,850.0|50.0,850.0|0.0,850.0|0.0,900.0|50.0,900.0|100.0,900.0|150.0,900.0|200.0,900.0|250.0,900.0|300.0,900.0|350.0,900.0|400.0,900.0|450.0,900.0|500.0,900.0|500.0,850.0|550.0,850.0|600.0,850.0|650.0,850.0|700.0,850.0|750.0,850.0|800.0,850.0|850.0,850.0|900.0,850.0|1000.0,850.0|1050.0,850.0|1100.0,850.0|1150.0,850.0|1200.0,850.0|1250.0,850.0|1300.0,850.0|1350.0,850.0|1400.0,850.0|1450.0,850.0|1500.0,850.0|1400.0,800.0|1450.0,800.0|1500.0,800.0|1550.0,800.0|950.0,850.0|1600.0,800.0|1650.0,800.0|1700.0,800.0|1750.0,800.0|1800.0,800.0|1850.0,800.0|1900.0,800.0|1950.0,800.0|2000.0,800.0|2050.0,800.0|2100.0,800.0|2150.0,800.0|2200.0,800.0|2200.0,850.0|2150.0,850.0|2100.0,850.0|2050.0,850.0|2000.0,850.0|1950.0,850.0|1900.0,850.0|1850.0,850.0|1800.0,850.0|1750.0,850.0|1650.0,850.0|1600.0,850.0|1550.0,850.0|1300.0,800.0|1250.0,800.0|1200.0,800.0|1150.0,800.0|1100.0,800.0|1050.0,800.0|1000.0,800.0|750.0,800.0|700.0,800.0|650.0,800.0|600.0,800.0|250.0,800.0|200.0,800.0|150.0,800.0|100.0,800.0|50.0,800.0|0.0,800.0|300.0,750.0|350.0,750.0|400.0,750.0|450.0,750.0|500.0,750.0|550.0,750.0|850.0,750.0|900.0,750.0|950.0,750.0|1350.0,750.0|1400.0,750.0|1450.0,750.0|1500.0,750.0|1550.0,750.0|1600.0,750.0|1650.0,750.0|1700.0,750.0|1750.0,750.0|1800.0,750.0|1850.0,750.0|1900.0,750.0|1950.0,750.0|2000.0,750.0|2050.0,750.0|2100.0,750.0|2150.0,750.0|1350.0,800.0|2100.0,650.0|950.0,800.0|900.0,800.0|850.0,800.0|800.0,800.0|550.0,800.0|500.0,800.0|450.0,800.0|400.0,800.0|350.0,800.0|300.0,800.0|800.0,550.0|750.0,550.0|750.0,600.0|800.0,600.0|850.0,600.0|1700.0,850.0|1600.0,950.0|1650.0,950.0|1700.0,950.0|1600.0,1000.0|1650.0,1000.0|1700.0,1000.0|1750.0,1000.0|1800.0,1000.0|1850.0,1000.0|1850.0,900.0|1800.0,900.0|1750.0,950.0|1800.0,950.0|1850.0,950.0|1900.0,950.0|1900.0,1000.0|1950.0,1000.0|2000.0,1000.0|1950.0,950.0|2000.0,950.0|2050.0,950.0|2200.0,1000.0|2150.0,1000.0|2100.0,1000.0|2050.0,1000.0|2100.0,950.0|2150.0,950.0|2200.0,950.0|2250.0,950.0|2300.0,950.0|2350.0,950.0|2400.0,950.0|2450.0,950.0|2500.0,950.0|2550.0,950.0|2600.0,950.0|2650.0,950.0|2650.0,1000.0|2600.0,1000.0|2550.0,1000.0|2500.0,1000.0|2450.0,1000.0|2400.0,1000.0|2350.0,1000.0|2300.0,1000.0|2250.0,1000.0|0.0,650.0|50.0,650.0|100.0,650.0|150.0,650.0|200.0,650.0|250.0,650.0|300.0,650.0|350.0,650.0|400.0,650.0|450.0,650.0|500.0,650.0|550.0,650.0|600.0,650.0|650.0,650.0|700.0,650.0|750.0,650.0|800.0,650.0|850.0,650.0|900.0,650.0|950.0,650.0|1000.0,650.0|1050.0,650.0|1100.0,650.0|1150.0,650.0|1200.0,650.0|1250.0,650.0|1300.0,650.0|1350.0,650.0|1400.0,650.0|1450.0,600.0|1500.0,600.0|1550.0,600.0|1600.0,600.0|1650.0,600.0|1700.0,600.0|1750.0,600.0|1800.0,600.0|1850.0,600.0|1900.0,600.0|1950.0,600.0|2000.0,600.0|2050.0,600.0|2100.0,600.0|2150.0,650.0|2150.0,700.0|2200.0,750.0|2250.0,750.0|2300.0,750.0|2350.0,750.0|2550.0,550.0|2600.0,550.0|2650.0,550.0|2650.0,600.0|2650.0,650.0|2650.0,700.0|700.0,600.0|2050.0,550.0|2400.0,750.0|2450.0,600.0|2450.0,650.0|2450.0,700.0|2500.0,550.0
-DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|DIRT|STONE|STONE|STONE|STONEDIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|DIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|STONE|STONE|PLAYER|ENEMY|STONEDIRT|STONE|STONE|STONE|STONE
-
-
-
-
-
-
-
-
-
-
-
-
class Player(Actor):
width, height = 25, 50
colour = (52, 94, 235)
-<<<<<<< Updated upstream
speed = 0.2
jump_strength = 0.9
gravity = 0.098
friction = 0.7
-=======
->>>>>>> Stashed changes
def __init__(self, pos, collision_layer, collision_mask):
super().__init__(pos, collision_layer, collision_mask)
-<<<<<<< Updated upstream
# self.areas = {"body":Area(self.position, pg.Vector2(0, self.height/2),self.width, self.height/2,Actor)}
-=======
- # self.initial_position = pg.Vector2(pos)
- self.dashCooldown = timedelta(seconds=2, microseconds=500000)
- self.timeBetweenDoublePress = timedelta(seconds=0, microseconds=500000)
- self.dashSpeed = 10
-
- self.dashPossible = True
- self.lastDash = datetime.utcnow()
- self.lastPressedLeft = datetime.utcnow()
- self.lastValueL = False
- self.lastPressedRight = datetime.utcnow()
- self.lastValueR = False
- self.areas = {"body": Area(self.position, pg.Vector2(0, self.height / 2), self.width, self.height / 2, Actor),
- "head": Area(self.position, pg.Vector2(self.width * 1 / 3 * 1 / 2, -2), self.width * 2 / 3, 25,
- Actor)}
-
- self.potion_cooldown = 0
- self.starting_potions = 999
- self.potion_bag = [Potion(self)]
- for i in range(self.starting_potions):
- self.potion_bag.append(Potion(self)) # use one liner
-
- self.weapon = Melee(self.position, (-Melee.width / 2 + 7, Melee.height / 2 + self.height / 3 - 8),
- (-5, Melee.height), self.width, -1, -25)
- self.targets = can_hurt
-
- self.direction = -1
-
- self.state = "IDLE"
- self.current_frame = 0
- self.display = self.idle_frames[0]
- self.display_offsets = {"weapon": pg.Vector2(0, 0)}
->>>>>>> Stashed changes
def update(self, delta):
super().update(delta)
self.handle_input()
# Deals with collision and applying velocity
-<<<<<<< Updated upstream
self.position, self.velocity = self.move_and_collide(self.position.copy(), self.velocity, delta)
return self.velocity * delta
-=======
- self.position, self.velocity = self.move_and_collide(self.position.copy(), self.velocity.copy(), delta)
-
- prev_direction = self.direction
- if self.velocity.x == 0:
- self.direction = 0
- else:
- self.direction = math.copysign(1, self.velocity.x)
- self.weapon.update(delta, self.position, self.direction)
-
- if self.state == "IDLE":
- frame = math.floor(self.current_frame)
- if self.direction == 1:
- self.display = self.idle_frames[math.floor(frame)]
- elif self.direction == -1:
- self.display = pg.transform.flip(self.idle_frames[math.floor(frame)], True, False)
- else:
- if prev_direction == 1:
- self.display = self.idle_frames[math.floor(frame)]
- elif prev_direction == -1:
- self.display = pg.transform.flip(self.idle_frames[math.floor(frame)], True, False)
- self.direction = prev_direction
- # 1 - 10 up, 11 down by 1, 12 - 18 down by 2, 19-20 down 1 FIX THIS
- frame += 1
- if 1 < frame < 10:
- self.display_offsets["weapon"] = pg.Vector2(0, 2)
- elif frame == 11 or frame == 19 or frame == 20:
- self.display_offsets["weapon"] = pg.Vector2(0, 1)
- else:
- self.display_offsets["weapon"] = pg.Vector2(0, 0)
- self.current_frame = (self.current_frame + 0.1) % len(self.idle_frames)
-
- print()
- return self.position - pg.Vector2(SCREEN_WIDTH/3, SCREEN_HEIGHT / 2)
-
->>>>>>> Stashed changes
def handle_input(self):
pressed = pygame.key.get_pressed()
rot_rect = rot_img.get_rect(center=vec)
return rot_img, rot_rect
-camera_offset = center.copy()
-
-MAP_WIDTH, MAP_HEIGHT = 10000,10000
+camera_offset = pg.Vector2(0,0)
def get_display_rect(collision_rect):
- camera_offset.x = max(0, min(camera_offset.x, MAP_WIDTH - SCREEN_WIDTH))
- camera_offset.y = max(0, min(camera_offset.y, MAP_HEIGHT - SCREEN_HEIGHT))
-
pos = collision_rect.topleft
width, height = collision_rect.w, collision_rect.h
return pg.Rect(pos - camera_offset, (width, height))
-<<<<<<< Updated upstream
-=======
- # return pg.Rect(pos, (width, height))
-
-def get_display_point(vec):
- camera_offset.x = max(0, min(camera_offset.x, MAP_WIDTH - SCREEN_WIDTH))
- camera_offset.y = max(0, min(camera_offset.y, MAP_HEIGHT - SCREEN_HEIGHT))
- return vec - camera_offset
-
-from Area import Area
->>>>>>> Stashed changes