parent
81150e1920
commit
39bc303be3
@ -0,0 +1,88 @@
|
||||
from node import Node
|
||||
from typing import Optional, List
|
||||
from pygame import time, Surface
|
||||
|
||||
"""
|
||||
class Scene(Node):
|
||||
def __init__(self, root: Node):
|
||||
super().__init__()
|
||||
self.is_active = True
|
||||
|
||||
def active(self):
|
||||
self.is_active = True
|
||||
|
||||
def deactivate(self):
|
||||
self.is_active = False
|
||||
|
||||
def is_active(self):
|
||||
return self.is_active
|
||||
|
||||
def _draw(self, surface: Surface):
|
||||
if self.is_active:
|
||||
for child in self.children:
|
||||
if isinstance(child, Node2D):
|
||||
child._draw(surface)
|
||||
|
||||
def draw(self, surface: Surface):
|
||||
self._draw(surface)
|
||||
"""
|
||||
|
||||
class SceneTree:
|
||||
|
||||
def __init__(self, initial_scene: Node = None):
|
||||
self.root: Optional[Node] = None
|
||||
self.current_scene: Optional[Node] = initial_scene
|
||||
self._nodes_to_process: List[Node] = []
|
||||
self._nodes_to_add: List[Node] = []
|
||||
self._nodes_to_delete: List[Node] = []
|
||||
# self._physics_nodes: List[Node] = []
|
||||
|
||||
self._running = False
|
||||
self.timer: time.Clock = time.Clock()
|
||||
|
||||
def start(self, initial_scene: Node = None):
|
||||
self.root = Node("Root")
|
||||
self.current_scene = initial_scene if initial_scene else self.root\
|
||||
if self.current_scene is None else self.current_scene
|
||||
|
||||
self.root.add_child(self.current_scene)
|
||||
self.root.add_child(self.current_scene)
|
||||
|
||||
self.root._enter_tree()
|
||||
self.root._ready()
|
||||
|
||||
self._running = True
|
||||
|
||||
def change_scene(self, scene):
|
||||
self._running = False
|
||||
self.current_scene = scene
|
||||
self.root = scene.root
|
||||
self._running = True
|
||||
|
||||
def _process(self, delta: float):
|
||||
|
||||
pass
|
||||
|
||||
def process(self, delta: float):
|
||||
self.root._process(delta)
|
||||
|
||||
"""
|
||||
def physics_process(self, delta: float):
|
||||
self.root._physics_process(delta)
|
||||
"""
|
||||
|
||||
def update(self):
|
||||
for node in self._nodes_to_process:
|
||||
node.process()
|
||||
|
||||
def queue_delete(self, node: str):
|
||||
node = self.root.get_node(node)
|
||||
if node is None:
|
||||
return
|
||||
if node in self._nodes_to_delete:
|
||||
return
|
||||
if node in self._nodes_to_process:
|
||||
self._nodes_to_process.remove(node)
|
||||
self._nodes_to_delete.append(node)
|
||||
if node in self._nodes_to_add:
|
||||
self._nodes_to_add.remove(node)
|
||||
Loading…
Reference in new issue