hashhub/hashengine.py

135 lines
3.9 KiB
Python

import tkinter as tk
import string
import random
from colorama import Fore, Back, Style
from colorama import just_fix_windows_console
just_fix_windows_console()
class stdrend:
def __init__(self, size):
self._size = size
self._grid = {}
self._win = tk.Tk()
for y in range(size[1]):
for x in range(size[0]):
temp = tk.Label(text=" ")
temp.grid(row=y, column=x)
self._win.update()
self._grid[f"{x}:{y}"] = temp
def pix(self, x, y, text):
if f"{x}:{y}" in self._grid:
self._grid[f"{x}:{y}"].config(text=text)
self._win.update()
class vector2:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __add__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x+v.x, self.y+v.y)
def __sub__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x-v.x, self.y-v.y)
def __mul__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x*v.x, self.y*v.y)
def __iadd__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x+v.x, self.y+v.y)
def __isub__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x-v.x, self.y-v.y)
def __imul__(self, v):
if not type(v) != vector2: raise ValueError("Must be vector2!")
return vector2(self.x*v.x, self.y*v.y)
class NULL:
def __init__(self):
return None
class enum:
def __init__(self, sel):
self._sel = dict(sel)
for i in self._sel:
setattr(self, i, self._sel[i])
def getposssel(self):
return list(self._sel.keys())
_fcolors = {"norm": Fore.RESET, "red": Fore.RED, "green": Fore.GREEN, "blue": Fore.BLUE, "white": Fore.WHITE, "cyan": Fore.CYAN, "black": Fore.BLACK, "magenta": Fore.MAGENTA, "yellow": Fore.YELLOW}
_bcolors = {"norm": Back.RESET, "red": Back.RED, "green": Back.GREEN, "blue": Back.BLUE, "white": Back.WHITE, "cyan": Back.CYAN, "black": Back.BLACK, "magenta": Back.MAGENTA, "yellow": Back.YELLOW}
backcolors = enum(_bcolors)
forecolors = enum(_fcolors)
cammode = enum({"editable": 0, "follow": 1})
class obj:
def __init__(self):
self.position = vector2()
self.char = " "
self.ID = 0
self.parent = None
self.gravity = 0
self.acceleration = vector2()
self.velocity = vector2()
self.friction = 0
self.collide = True
self.touch = True
self.anchored = False
self.bcolor = backcolors.norm
self.fcolor = forecolors.norm
class camera(obj):
def __init__(self):
super().__init__()
self.mode = cammode.editable
self.subject = None
self.collide = False
self.touch = False
self.char = " "
def update(self):
if self.mode == cammode.follow and self.subject:
self.position = self.subject.position
class game:
def __init__(self, size=[20, 20], renderer=stdrend):
if renderer == None: raise TypeError("Renderer class needed!")
self._size = size
self._renderer = renderer(size)
self._objects = {}
def addobj(self, obj):
id = ""
for i in range(256):
id = id + random.choice(list(string.ascii_letters))
obj.ID = id
self._objects[id] = obj
def removeobj(self, obj):
self._objects.pop(obj.ID)
obj.ID = NULL()
def removeobjbyid(self, id):
self._objects.pop(id).ID = NULL()
def render(self):
for i in self._objects:
if __name__ == "__main__":
testgame = game()
object = obj()
testgame.addobj(object)
print(object.ID)