gfx.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. def add_object(layer_id, obj_name):
  23. layer_id = lookup_node(layer_id)
  24. obj_id = api.add_node(obj_name, SceneNodeType.RENDER_OBJECT)
  25. add_property_f32(obj_id, "x")
  26. add_property_f32(obj_id, "y")
  27. add_property_f32(obj_id, "scale_x", 1.0)
  28. add_property_f32(obj_id, "scale_y", 1.0)
  29. add_property_bool(obj_id, "is_visible", True)
  30. link_node(obj_id, layer_id)
  31. return obj_id
  32. class Layer:
  33. def __init__(self, name):
  34. self.name = name
  35. clear_layer(name)
  36. self.id = add_layer(name)
  37. def resize(self, w, h):
  38. set_property_u32(self.id, "rect_w", w)
  39. set_property_u32(self.id, "rect_h", h)
  40. def add_obj(self, name):
  41. return add_object(self.id, name)