py_yugi_clone/scripts/entities.py

36 lines
1.5 KiB
Python
Raw Normal View History

2024-07-10 20:08:18 +02:00
import pygame
import numpy as np
2024-07-12 16:56:47 +02:00
from scripts.utils import to_isometric_pixel
2024-07-10 20:08:18 +02:00
class Entity:
def __init__(self, game, e_type, pos, size):
self.game = game
self.type = e_type
self.pos = np.array(pos)
2024-07-12 22:04:31 +02:00
self.size = np.array(size)
2024-07-10 20:08:18 +02:00
self.velocity = np.array([0,0], dtype=np.float32)
2024-07-12 22:04:31 +02:00
def update(self, tilemap, movement = np.array([0,0])):
2024-07-10 20:08:18 +02:00
frame_movement = self.velocity + movement
2024-07-12 22:04:31 +02:00
self.pos[0] += frame_movement[0]
entity_rect = self.rect()
for rect in tilemap.physics_rects_around(self.pos):
if entity_rect.colliderect(rect):
if frame_movement[0] > 0: #i was moving right
entity_rect.right = rect.left
if frame_movement[0] < 0: #i was moving left
entity_rect.left = rect.right
self.pos[0] = entity_rect.x
self.pos[1] += frame_movement[1]
entity_rect = self.rect()
for rect in tilemap.physics_rects_around(self.pos):
if entity_rect.colliderect(rect):
if frame_movement[1] > 0: #i was moving down
entity_rect.bottom = rect.top
if frame_movement[1] < 0: #i was moving up
entity_rect.top = rect.bottom
self.pos[1] = entity_rect.y
def render(self, surface, offset = np.array([0.,0.])):
surface.blit(self.game.assets[self.type], to_isometric_pixel(self.pos-np.array([48,80]))*np.array([1,0.5])-offset)
def rect(self):
return pygame.Rect(self.pos, self.size)