import pygame import numpy as np from scripts.utils import to_isometric_pixel class Entity: def __init__(self, game, e_type, pos, size): self.game = game self.type = e_type self.pos = np.array(pos) self.size = np.array(size) self.velocity = np.array([0,0], dtype=np.float32) def update(self, tilemap, movement = np.array([0,0])): frame_movement = self.velocity + movement 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)