This commit is contained in:
2021-09-06 18:32:02 +02:00
parent a0c7caf727
commit e112ce52e3
17 changed files with 72 additions and 33 deletions

View File

@@ -6,6 +6,9 @@ from UI.Objects.Scene import Scene
class Multiscene(Scene):
object_type = "multiscene"
def __init__(self, width: float, height: float, scene_size: a):
super().__init__(width, height, scene_size)
@@ -39,12 +42,10 @@ class Multiscene(Scene):
for object_ in self.nr_objects:
object_.blit()
for object_ in self.nrd_objects:
object_.blit()
for object_ in self.d_objects:
object_.progress()
for object_ in self.nrc_objects:
object_.blit()
for object_ in self.c_objects:
object_.input(self.mouse_pos, self.clicked)
pygame.display.update()

View File

@@ -4,6 +4,9 @@ from numpy import array as a
class Scene(Screen):
object_type = "scene"
def __init__(self, width: float, height: float, scene_size: a, bg=(60, 60, 60)):
super().__init__(width, height, scene_size)
@@ -11,9 +14,8 @@ class Scene(Screen):
self.r_objects = [] # resizable Objects
self.nr_objects = [] # non-rescalable Objects
self.nrd_objects = [] # non-rescalable dynamic Objects
self.nrc_objects = [] # non-rescalable controllable Objects
self.d_objects = [] # dynamic Objects
self.c_objects = [] # controllable Objects
self.i_objects = [] # interactive Objects
self.position = a([0, 0])
@@ -34,12 +36,10 @@ class Scene(Screen):
for object_ in self.nr_objects:
object_.blit()
for object_ in self.nrd_objects:
object_.blit()
for object_ in self.d_objects:
object_.progress()
for object_ in self.nrc_objects:
object_.blit()
for object_ in self.c_objects:
object_.input(self.mouse_pos, self.clicked)
pygame.display.update()
@@ -57,3 +57,23 @@ class Scene(Screen):
def get_i_objects(self):
return [[self.i_objects, self.mouse_pos]]
def sort_objects(self, *args):
for object_ in args:
for object_tag in object_.object_type.split("_"):
if object_tag == "r":
self.r_objects.append(object_)
elif object_tag == "nr":
self.nr_objects.append(object_)
elif object_tag == "d":
self.d_objects.append(object_)
elif object_tag == "c":
self.c_objects.append(object_)
elif object_tag == "i":
self.i_objects.append(object_)
elif object_tag in ["scene", "multiscene"]:
if self.object_type == "multiscene":
self.subscenes.append(object_)
else:
raise ValueError("Scene/Multiscene object encountered in scene.sort_objects()\n"
"Please use Multiscene for this purpose.")

View File

@@ -2,6 +2,9 @@ import pygame.draw
class Circle:
object_type = "nr"
def __init__(self, center, radius, color, scene):
self.center = center
self.radius = radius

View File

@@ -2,6 +2,9 @@ import pygame
class Ellipse:
object_type = "nr"
def __init__(self, center, a, b, color, scene):
self.center = center
self.a = a

View File

@@ -4,6 +4,9 @@ import math
class EquilateralTriangle:
object_type = "nr"
def __init__(self, position, side_length, rotation, color, scene, width=0):
self.position = position
self.side_length = side_length

View File

@@ -5,6 +5,9 @@ import copy
class Image:
object_type = "nr"
def __init__(self, center, scalar, path, scene):
self.center = center
self.scalar = scalar

View File

@@ -2,6 +2,9 @@ import pygame.draw
class Line:
object_type = "nr"
def __init__(self, a, b, width, color, scene):
self.a = a
self.b = b

View File

@@ -2,6 +2,9 @@ import pygame
class Text:
object_type = "nr"
def __init__(self, position, text, font_size, color, scene, font_name="calibri", bold=True):
self.position = position
self.text = text

View File

@@ -3,6 +3,9 @@ import pygame
class RopeInteractiveDot:
object_type = "nr_c"
def __init__(self, position, r, color, force, forcefield_range, scene):
self.position = position
self.r = r
@@ -25,7 +28,8 @@ class RopeInteractiveDot:
if node.locked is False:
if math.sqrt(sum((node.position - self.position) ** 2)) < self.forcefield_range:
force_vector = node.position - self.position
full_force_vector = (force_vector / math.sqrt(sum(force_vector ** 2))) * self.forcefield_range
full_force_vector = (force_vector / math.sqrt(sum(force_vector ** 2))) \
* self.forcefield_range
force_vector = full_force_vector - force_vector
force_vector /= self.forcefield_range / self.force

View File

@@ -5,6 +5,8 @@ import math
class Rope:
object_type = "nr_d_i"
class Node:
def __init__(self, position):
self.position = position

View File

@@ -2,6 +2,9 @@ import pygame.draw
class Rect:
object_type = "r"
def __init__(self, pos, size, color, scene):
self.pos = pos
self.size = size