gfx.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from pydrk import SceneNodeType, PropertyType, vertex, face
  2. from .api import *
  3. def clear_layer(layer_name):
  4. layer_id = api.lookup_node_id(f"/window/{layer_name}")
  5. if layer_id is None:
  6. return
  7. unlink_node(layer_id, "/window")
  8. for (_, child_id, child_type) in api.get_children(layer_id):
  9. api.unlink_node(child_id, layer_id)
  10. if child_type == SceneNodeType.RENDER_OBJECT:
  11. remove_node_recursive(child_id)
  12. api.remove_node(layer_id)
  13. def add_layer(layer_name):
  14. layer_id = api.add_node(layer_name, SceneNodeType.RENDER_LAYER)
  15. add_property_u32(layer_id, "rect_x")
  16. add_property_u32(layer_id, "rect_y")
  17. add_property_u32(layer_id, "rect_w")
  18. add_property_u32(layer_id, "rect_h")
  19. add_property_bool(layer_id, "is_visible", True)
  20. link_node(layer_id, "/window")
  21. return layer_id
  22. class Layer:
  23. def __init__(self, name):
  24. self.name = name
  25. clear_layer(name)
  26. self.id = add_layer(name)
  27. def resize(self, w, h):
  28. set_property_u32(self.id, "rect_w", w)
  29. set_property_u32(self.id, "rect_h", h)
  30. def add_obj(self, name):
  31. obj_id = api.add_node(name, SceneNodeType.RENDER_OBJECT)
  32. add_property_f32(obj_id, "x")
  33. add_property_f32(obj_id, "y")
  34. add_property_f32(obj_id, "scale_x", 1.0)
  35. add_property_f32(obj_id, "scale_y", 1.0)
  36. link_node(obj_id, self.id)