end433

EndiumEngine

Mar 29th, 2025
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.02 KB | Source Code | 0 0
  1. try:
  2.     import pygame
  3.     from pygame.locals import *
  4. except:
  5.     raise ImportError("Unable to import pygame")
  6.     import sys
  7.     sys.exit()
  8.    
  9. try:
  10.     import json
  11. except:
  12.     raise ImportError("Unable to import JSON!")
  13.     import sys
  14.     sys.exit()
  15.  
  16. try:
  17.     import time
  18. except:
  19.     raise ImportError("Unable import time!")
  20.     import sys
  21.     sys.exit()
  22.    
  23. try:
  24.     import io
  25. except:
  26.     raise ImportError("Unable import io!")
  27.     import sys
  28.     sys.exit()
  29.  
  30. try:
  31.     import base64
  32. except:
  33.     raise ImportError("Unable import base64!")
  34.     import sys
  35.     sys.exit()
  36.  
  37. try:
  38.     import runpy
  39. except:
  40.     raise ImportError("Unable import runpy!")
  41.     import sys
  42.     sys.exit()
  43.  
  44. class EndiumEngine:
  45.     KEYPRESS = pygame.KEYDOWN
  46.     KEYUP = pygame.KEYUP
  47.     MOUSEBUTTONDOWN = pygame.MOUSEBUTTONDOWN
  48.     MOUSEBUTTONUP = pygame.MOUSEBUTTONUP
  49.     MOUSEMOTION = pygame.MOUSEMOTION
  50.     EXIT = pygame.QUIT
  51.  
  52.     CURSOR_DEFAULT = pygame.SYSTEM_CURSOR_ARROW
  53.     CURSOR_IBEAM = pygame.SYSTEM_CURSOR_IBEAM
  54.     CURSOR_LOADING = pygame.SYSTEM_CURSOR_WAIT
  55.     CURSOR_CROSSHAIR = pygame.SYSTEM_CURSOR_CROSSHAIR
  56.     CURSOR_SMALL_LOADING = pygame.SYSTEM_CURSOR_WAITARROW
  57.     CURSOR_SIZENWSE = pygame.SYSTEM_CURSOR_SIZENWSE
  58.     CURSOR_SIZENESW = pygame.SYSTEM_CURSOR_SIZENESW
  59.     CURSOR_SIZEWE = pygame.SYSTEM_CURSOR_SIZEWE
  60.     CURSOR_SIZENS = pygame.SYSTEM_CURSOR_SIZENS
  61.     CURSOR_SIZEALL = pygame.SYSTEM_CURSOR_SIZEALL
  62.     CUSROR_BLOCK = pygame.SYSTEM_CURSOR_NO
  63.     CURSOR_CLICK = pygame.SYSTEM_CURSOR_HAND
  64.    
  65.     KEYS = {
  66.     "A": pygame.K_a,
  67.     "B": pygame.K_b,
  68.     "C": pygame.K_c,
  69.     "D": pygame.K_d,
  70.     "E": pygame.K_e,
  71.     "F": pygame.K_f,
  72.     "G": pygame.K_g,
  73.     "H": pygame.K_h,
  74.     "I": pygame.K_i,
  75.     "J": pygame.K_j,
  76.     "K": pygame.K_k,
  77.     "L": pygame.K_l,
  78.     "M": pygame.K_m,
  79.     "N": pygame.K_n,
  80.     "O": pygame.K_o,
  81.     "P": pygame.K_p,
  82.     "Q": pygame.K_q,
  83.     "R": pygame.K_r,
  84.     "S": pygame.K_s,
  85.     "T": pygame.K_t,
  86.     "U": pygame.K_u,
  87.     "V": pygame.K_v,
  88.     "W": pygame.K_w,
  89.     "X": pygame.K_x,
  90.     "Y": pygame.K_y,
  91.     "Z": pygame.K_z,
  92.     "0": pygame.K_0,
  93.     "1": pygame.K_1,
  94.     "2": pygame.K_2,
  95.     "3": pygame.K_3,
  96.     "4": pygame.K_4,
  97.     "5": pygame.K_5,
  98.     "6": pygame.K_6,
  99.     "7": pygame.K_7,
  100.     "8": pygame.K_8,
  101.     "9": pygame.K_9,
  102.     "UP": pygame.K_UP,
  103.     "DOWN": pygame.K_DOWN,
  104.     "LEFT": pygame.K_LEFT,
  105.     "RIGHT": pygame.K_RIGHT,
  106.     "SPACE": pygame.K_SPACE,
  107.     "RETURN": pygame.K_RETURN,
  108.     "ESCAPE": pygame.K_ESCAPE,
  109.     "BACKSPACE": pygame.K_BACKSPACE,
  110.     "TAB": pygame.K_TAB,
  111.     "LSHIFT": pygame.K_LSHIFT,
  112.     "RSHIFT": pygame.K_RSHIFT,
  113.     "LCTRL": pygame.K_LCTRL,
  114.     "RCTRL": pygame.K_RCTRL,
  115.     "LALT": pygame.K_LALT,
  116.     "RALT": pygame.K_RALT,
  117.     "F1": pygame.K_F1,
  118.     "F2": pygame.K_F2,
  119.     "F3": pygame.K_F3,
  120.     "F4": pygame.K_F4,
  121.     "F5": pygame.K_F5,
  122.     "F6": pygame.K_F6,
  123.     "F7": pygame.K_F7,
  124.     "F8": pygame.K_F8,
  125.     "F9": pygame.K_F9,
  126.     "F10": pygame.K_F10,
  127.     "F11": pygame.K_F11,
  128.     "F12": pygame.K_F12,
  129.     "INSERT": pygame.K_INSERT,
  130.     "DELETE": pygame.K_DELETE,
  131.     "HOME": pygame.K_HOME,
  132.     "END": pygame.K_END,
  133.     "PAGEUP": pygame.K_PAGEUP,
  134.     "PAGEDOWN": pygame.K_PAGEDOWN,
  135.     "NUMLOCK": pygame.K_NUMLOCK,
  136.     "CAPSLOCK": pygame.K_CAPSLOCK,
  137.     "SCROLLLOCK": pygame.K_SCROLLLOCK
  138.     }
  139.    
  140.     FULLSCREEN = pygame.FULLSCREEN
  141.     RESIZABLE = pygame.RESIZABLE
  142.     NOFRAME = pygame.NOFRAME
  143.     OPENGL = pygame.OPENGL
  144.     SCALED = pygame.SCALED
  145.     SHOWN = pygame.SHOWN
  146.     HIDDEN = pygame.HIDDEN
  147.     ALLOW_HIGHDPI = pygame.HWSURFACE
  148.    
  149.     current_scene = None
  150.  
  151.     def __init__(self, width=800, height=600, title="Endium Engine", fps=60):
  152.         pygame.init()
  153.         self.screen = pygame.display.set_mode((width, height))
  154.         pygame.display.set_caption(title)
  155.         self.clock = pygame.time.Clock()
  156.         self.fps = fps
  157.         self.running = True
  158.         self.window = self.Window(width, height, title)
  159.         EndiumEngine.EventManager = self.EventManager()
  160.         EndiumEngine.KeyBoardManager = self.KeyBoardManager()
  161.         EndiumEngine.Cursor = self.Cursor()
  162.         base64_string = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVQ4EaVSsQ2AMAwrnMElHMEdzJzBHzzCyMYBDGxs3AByJEcmqgCpkcCpEzuholqv4UoFUUM776dZAP/kqjEDJcxJXjQUylPUary6cTKSSI5nInkgwzdgE5ENemauWG19Kr9ETvvC5UgJj4Z/gpJveds8q24QnXPTohhWbpAr5rjnfDGIhS8xN/YNosHbmWL0/DZQEbbjhmaQuzAVYBIFyDV8A22IYhXEvPhPvAHZYFk5u6mgHQAAAABJRU5ErkJggg=="
  163.         image_data = base64.b64decode(base64_string)
  164.         image_io = io.BytesIO(image_data)
  165.         image_final = pygame.image.load(image_io)
  166.         pygame.display.set_icon(image_final)
  167.  
  168.     def run(self, update_callback, render_callback):
  169.         while self.running:
  170.             dt = self.clock.tick(self.fps) / 1000
  171.             EndiumEngine.EventManager.clear_events()
  172.            
  173.             for event in pygame.event.get():
  174.                 if event.type == pygame.QUIT:
  175.                     self.running = False
  176.                 self.EventManager.handle_event(event)
  177.                 self.KeyBoardManager.handle_event(event)
  178.            
  179.             if EndiumEngine.EventManager.get_events():
  180.                 update_callback(dt)
  181.                
  182.             render_callback(self.screen)
  183.  
  184.             pygame.display.flip()
  185.  
  186.         pygame.quit()
  187.     class UI:
  188.         class Button:
  189.             def __init__(self, image, x, y, width, height):
  190.                 self.image = pygame.transform.scale(pygame.image.load(image), (width, height))
  191.                 self.rect = self.image.get_rect(topleft=(x, y))
  192.  
  193.             def is_hover(self):
  194.                 mouse_pos = pygame.mouse.get_pos()
  195.                 return self.rect.collidepoint(mouse_pos)
  196.  
  197.             def is_pressed(self, click_type):
  198.                 if click_type in [0, 1, 2]:
  199.                     return self.is_hover() and pygame.mouse.get_pressed()[click_type]
  200.  
  201.             def set_texture(self, image):
  202.                 self.image = pygame.transform.scale(pygame.image.load(image), (self.rect.width, self.rect.height))
  203.  
  204.             def set_size(self, width, height):
  205.                 self.image = pygame.transform.scale(self.image, (width, height))
  206.                 self.rect.size = (width, height)    
  207.  
  208.             def draw(self, surface):
  209.                 surface.blit(self.image, self.rect.topleft)
  210.         class Texture:
  211.             def __init__(self, image, x, y, width, height):
  212.                 self.image = pygame.transform.scale(pygame.image.load(image), (width, height))
  213.                 self.rect = self.image.get_rect(topleft=(x, y))
  214.  
  215.             def set_texture(self, image):
  216.                 self.image = pygame.transform.scale(pygame.image.load(image), (self.rect.width, self.rect.height))
  217.  
  218.             def set_pos(self, x, y):
  219.                 self.rect.topleft = (x, y)
  220.  
  221.             def set_size(self, width, height):
  222.                 self.image = pygame.transform.scale(self.image, (width, height))
  223.                 self.rect.size = (width, height)
  224.  
  225.             def get_pos(self):
  226.                 return self.rect.topleft
  227.  
  228.             def get_size(self):
  229.                 return self.rect.size
  230.  
  231.             def draw(self, surface):
  232.                 surface.blit(self.image, self.rect.topleft)
  233.  
  234.             def collides_with(self, other):
  235.                 if isinstance(other, Texture):
  236.                     return self.rect.colliderect(other.rect)
  237.                 return False    
  238.         class Text:
  239.             def __init__(self, text, x, y, font_size, font, color):
  240.                 pygame.font.init()
  241.                 self.text = text
  242.                 self.x = x
  243.                 self.y = y
  244.                 self.font_size = font_size
  245.                 self.color = color
  246.                 self.font = pygame.font.Font(font, font_size)
  247.                 self.rendered_text = self.font.render(self.text, True, self.color)
  248.                 self.rect = self.rendered_text.get_rect(topleft=(x, y))
  249.  
  250.             def set_text(self, text):
  251.                 self.text = text
  252.                 self._update_render()
  253.  
  254.             def set_pos(self, x, y):
  255.                 self.x = x
  256.                 self.y = y
  257.                 self.rect.topleft = (x, y)
  258.  
  259.             def set_font_size(self, font_size):
  260.                 self.font_size = font_size
  261.                 self.font = pygame.font.Font(None, font_size)
  262.                 self._update_render()
  263.  
  264.             def set_color(self, color):
  265.                 self.color = color
  266.                 self._update_render()
  267.  
  268.             def get_text(self):
  269.                 return self.text
  270.  
  271.             def get_pos(self):
  272.                 return self.rect.topleft
  273.  
  274.             def _update_render(self):
  275.                 self.rendered_text = self.font.render(self.text, True, self.color)
  276.                 self.rect = self.rendered_text.get_rect(topleft=(self.x, self.y))
  277.  
  278.             def draw(self, surface):
  279.                 surface.blit(self.rendered_text, self.rect.topleft)
  280.     class SoundManager:
  281.         def __init__(self):
  282.             pygame.mixer.init()
  283.  
  284.         def play_sound(self, file_path, volume=1.0):
  285.             sound = pygame.mixer.Sound(file_path)
  286.             sound.set_volume(volume)
  287.             sound.play()
  288.     class Window:
  289.         def __init__(self, width, height, title):
  290.             self.width = width
  291.             self.height = height
  292.             self.title = title
  293.             self.flags = 0
  294.             self.screen = pygame.display.set_mode((width, height), self.flags)
  295.             pygame.display.set_caption(title)
  296.  
  297.         def set_size(self, width, height):
  298.             self.width = width
  299.             self.height = height
  300.             self.apply_arguments()
  301.  
  302.         def set_title(self, title):
  303.             self.title = title
  304.             pygame.display.set_caption(title)
  305.  
  306.         def get_size(self):
  307.             return self.width, self.height
  308.  
  309.         def get_title(self):
  310.             return self.title
  311.  
  312.         def get_surface(self):
  313.             return self.screen
  314.            
  315.         def set_icon(image):
  316.             pygame.display.set_icon(pygame.image.load(image))    
  317.  
  318.         def add_argument(self, flag):
  319.             self.flags |= flag
  320.  
  321.         def remove_argument(self, flag):
  322.             self.flags &= ~flag
  323.  
  324.         def apply_arguments(self):
  325.             self.screen = pygame.display.set_mode((self.width, self.height), self.flags)      
  326.            
  327.     class SceneManager:
  328.         def set_scene(scene_name):
  329.             EndiumEngine.current_scene = scene_name
  330.  
  331.         def get_scene():
  332.             return EndiumEngine.current_scene
  333.     class EventManager:
  334.         _events = []
  335.  
  336.         def handle_event(self, event):
  337.             self._events.append(event)
  338.  
  339.         def get_event_type(cls):
  340.             return [event.type for event in cls._events]
  341.  
  342.         def get_events(cls):
  343.             return cls._events
  344.  
  345.         def clear_events(cls):
  346.             cls._events.clear()
  347.     class KeyBoardManager:
  348.         def __init__(self):
  349.             self._pressed_keys = set()
  350.  
  351.         def handle_event(self, event):
  352.             if event.type == pygame.KEYDOWN:
  353.                 self._pressed_keys.add(event.key)
  354.             elif event.type == pygame.KEYUP:
  355.                 self._pressed_keys.discard(event.key)
  356.  
  357.         def is_key_pressed(self, key):
  358.             return key in self._pressed_keys
  359.  
  360.         def get_pressed_keys(self):
  361.             return [pygame.key.name(key) for key in self._pressed_keys]
  362.     class Cursor:
  363.         def __init__(self):
  364.             self.visible = True
  365.  
  366.         def set_visible(self, visible):
  367.             self.visible = visible
  368.             pygame.mouse.set_visible(visible)
  369.  
  370.         def set_cursor(self, cursor_type):
  371.             pygame.mouse.set_cursor(cursor_type)
  372.  
  373.         def set_position(self, x, y):
  374.             pygame.mouse.set_pos([x, y])
  375.  
  376.         def get_visible(self):
  377.             return pygame.mouse.get_visible()
  378.  
  379.         def get_position(self):
  380.             return pygame.mouse.get_pos()
  381.        
  382.         def is_clicked(self, click_type):
  383.             if click_type in [0, 1, 2]:
  384.                 return pygame.mouse.get_pressed()[click_type]
  385.     class logger:
  386.         def info(msg):
  387.             named_tuple = time.localtime()
  388.             time_string = time.strftime("%d/%m/%Y %H:%M:%S", named_tuple)
  389.             print("[" + time_string + "]" + "[INFO]" + " " + msg)
  390.         def warn(msg):
  391.             named_tuple = time.localtime()
  392.             time_string = time.strftime("%d/%m/%Y %H:%M:%S", named_tuple)
  393.             print("[" + time_string + "]" + "[WARN]" + " " + msg)
  394.         def error(msg):
  395.             named_tuple = time.localtime()
  396.             time_string = time.strftime("%d/%m/%Y %H:%M:%S", named_tuple)
  397.             print("[" + time_string + "]" + "[ERROR]" + " " + msg)
  398.     class script:
  399.         def exec_line(line):
  400.             exec(line)
  401.         def exec_file(file_path):
  402.             runpy.run_path(file_path)
  403.  
  404. if __name__ == "__main__":
  405.     ee = EndiumEngine()
  406.     def update(dt):
  407.         pass
  408.     def render(screen):
  409.         pass
  410.     ee.run(update, render)
  411.  
Add Comment
Please, Sign In to add comment