123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # author: Ethosa
- ## The base of other 2D nodes.
- import
- ../thirdparty/opengl,
- ../core/vector2,
- ../core/rect2,
- ../core/anchor,
- ../core/input,
- ../core/enums,
- ../nodes/node,
- ../nodes/canvas
- type
- Node2DObj* = object of CanvasObj
- centered*: bool
- rotation*: float
- scale*: Vector2Obj
- timed_position*: Vector2Obj
- relative_z_index*: bool
- z_index*, z_index_global*: float
- Node2DRef* = ref Node2DObj
- template node2dpattern*: untyped =
- result.centered = false
- result.timed_position = Vector2()
- result.rect_size = Vector2()
- result.rect_min_size = Vector2()
- result.position = Vector2()
- result.global_position = Vector2()
- result.anchor = Anchor(0, 0, 0, 0)
- result.size_anchor = Vector2()
- result.z_index = 0f
- result.z_index_global = 0f
- result.relative_z_index = true
- result.type_of_node = NODE_TYPE_2D
- proc Node2D*(name: string = "Node2D"): Node2DRef =
- ## Creates a new Node2D.
- ##
- ## Arguments:
- ## - `name` is a node name.
- runnableExamples:
- var node = Node2D("Node2D")
- nodepattern(Node2DRef)
- node2dpattern()
- result.scale = Vector2(1, 1)
- result.rotation = 0f
- result.kind = NODE2D_NODE
- method calcGlobalPosition*(self: Node2DRef) =
- ## Returns global node position.
- self.global_position = self.position
- var current: CanvasRef = self
- self.z_index_global = self.z_index
- while current.parent != nil:
- current = current.parent.CanvasRef
- self.global_position += current.position
- if self.relative_z_index and current.type_of_node == NODE_TYPE_2D:
- self.z_index_global += current.Node2DRef.z_index
- method draw*(self: Node2DRef, w, h: GLfloat) =
- ## this method uses in the `window.nim`.
- {.warning[LockLevel]: off.}
- self.position = self.timed_position
- self.calcGlobalPosition()
- if self.centered:
- self.position -= self.rect_size/2
- method move*(self: Node2DRef, x, y: float) =
- ## Moves Node2D object by `x` and `y`.
- self.timed_position.x += x
- self.timed_position.y += y
- self.position = self.timed_position
- method move*(self: Node2DRef, vec2: Vector2Obj) =
- ## Moves Node2D object by `vec2`.
- self.timed_position += vec2
- self.position = self.timed_position
- method duplicate*(self: Node2DRef): Node2DRef {.base.} =
- ## Duplicates Node2D object and create a new Node2D.
- self.deepCopy()
- method getGlobalMousePosition*(self: Node2DRef): Vector2Obj {.base, inline.} =
- ## Returns mouse position.
- Vector2Obj(x: last_event.x, y: last_event.y)
- method setZIndex*(self: Node2DRef, z_index: int) {.base.} =
- ## Changes Z index.
- self.z_index = z_index.float
|