ソースを参照

add engine folder, fix small bugs

SakiKawasaki 4 年 前
コミット
dfa81a36a4

+ 4 - 0
engine/README.md

@@ -0,0 +1,4 @@
+<div align="center">
+  <h1>The GUI wrapper for nodesnim</h1>
+
+</div>

BIN
engine/assets/project_default_icon.jpg


+ 19 - 0
engine/main.nim

@@ -0,0 +1,19 @@
+# author: Ethosa
+import
+  nodesnim,
+  scenes/projects
+
+
+Window("NodesNim engine", 720, 480)
+
+projects.init()
+
+
+if not hasProject("Hello, world!"):
+  addNewProject("Hello, world!")
+else:
+  loadProjects()
+
+
+addMainScene(projects_scene)
+windowLaunch()

+ 1 - 0
engine/nim.cfg

@@ -0,0 +1 @@
+--path:"../src"

+ 106 - 0
engine/scenes/projects.nim

@@ -0,0 +1,106 @@
+# author: Ethosa
+import
+  os,
+  nodesnim
+
+
+var
+  projects_scene* = Scene("Projects")
+
+  scroll_box* = Scroll()
+  projects_box* = VBox()
+  project_template* = ColorRect("Project")
+  project_template_title* = Label("Title")
+  project_template_icon* = TextureRect("Icon")
+
+  default_icon*: GlTextureObj
+
+
+
+projects_scene.addChild(scroll_box)
+
+scroll_box.addChild(projects_box)
+scroll_box.setBackgroundColor(Color(0x1d242aff))
+
+projects_box.setChildAnchor(0, 0, 0, 0)
+projects_box.resize(720, 480)
+projects_box.separator = 0
+
+project_template.resize(10, 48)
+project_template.setSizeAnchor(1, 0)
+project_template.addChilds(project_template_title, project_template_icon)
+
+project_template_title.setText("Template title")
+project_template_title.setTextColor(Color(0xf2f2f7ff'u32))
+project_template_title.move(-2, 2)
+project_template_title.resize(128, 20)
+project_template_title.setSizeAnchor(1, 0)
+project_template_title.setTextAlign(1, 0, 1, 0)
+project_template_title.mousemode = MOUSEMODE_IGNORE
+project_template_title.setFont(GLUT_BITMAP_HELVETICA_18, 18)
+
+project_template_icon.resize(42, 42)
+project_template_icon.move(3, 3)
+project_template_icon.texture_mode = TEXTURE_KEEP_ASPECT_RATIO
+
+
+
+scroll_box@on_process(self):
+  scroll_box.viewport_w = projects_scene.rect_size.x
+  scroll_box.viewport_h = projects_scene.rect_size.y
+  scroll_box.rect_size.x = scroll_box.viewport_w
+  projects_box.rect_size.x = projects_scene.rect_size.x
+  if scroll_box.rect_size.y < scroll_box.viewport_h:
+    scroll_box.rect_size.y = scroll_box.viewport_h
+  for child in scroll_box.getChildIter():
+    child.calcPositionAnchor()
+
+project_template@on_process(self):
+  var s = self.ColorRectRef
+  if s.pressed and s.focused:
+    s.color = Color(0x4e606eff)
+  elif s.hovered and not mouse_pressed:
+    s.color = Color(0x3a4652ff)
+  else:
+    s.color = Color(0x1d242aff)
+
+
+
+proc init* =
+  default_icon = load("assets/project_default_icon.jpg")
+
+proc addNewProject*(name: string) =
+  if not existsDir(nodesnim_folder / name):
+    # files and folders
+    createDir(nodesnim_folder / name)
+    createDir(nodesnim_folder / name / "assets")
+    copyFile("assets/project_default_icon.jpg", nodesnim_folder / name / "icon.jpg")
+    var readme = open(nodesnim_folder / name / "README.md", fmWrite)
+    readme.write("# " & name)
+    readme.close()
+    var gitignore = open(nodesnim_folder / name / ".gitignore", fmWrite)
+    gitignore.write("nimcache/\nnimblecache/\nhtmldocs/\n\n*.exe\n*.log")
+    gitignore.close()
+
+    var new_project = project_template.duplicate()
+    new_project.name = name
+    new_project.getNode("Title").LabelRef.setText(name)
+    new_project.getNode("Icon").TextureRectRef.setTexture(default_icon)
+    projects_box.addChild(new_project)
+
+proc loadProject*(name: string) =
+  var
+    new_project = project_template.duplicate()
+    project_icon = load(nodesnim_folder / name / "icon.jpg")
+  new_project.name = name
+  new_project.getNode("Title").LabelRef.setText(name)
+  new_project.getNode("Icon").TextureRectRef.setTexture(project_icon)
+  projects_box.addChild(new_project)
+
+proc loadProjects* =
+  for kind, path in walkDir(nodesnim_folder):
+    if existsDir(path) and path != nodesnim_folder / "saves":
+      loadProject(path.lastPathPart())
+
+proc hasProject*(name: string): bool =
+  existsDir(nodesnim_folder / name)

+ 1 - 4
src/nodesnim/core/image.nim

@@ -7,9 +7,6 @@ import
   ../core/vector2
 
 
-when defined(debug):
-  import logging
-
 discard image.init()
 
 
@@ -29,7 +26,7 @@ proc load*(file: cstring, x, y: var float, mode: Glenum = GL_RGB): Gluint =
     textureid: Gluint
   when defined(debug):
     if surface == nil:
-      error("image \"", file, "\" not loaded!")
+      echo("image \"", file, "\" not loaded!")
   x = surface.w.float
   y = surface.h.float
 

+ 9 - 0
src/nodesnim/nodescontrol/label.nim

@@ -110,6 +110,11 @@ method duplicate*(self: LabelRef): LabelRef {.base.} =
   ## Duplicates Label object and create a new Label.
   self.deepCopy()
 
+method setFont*(self: LabelRef, font: pointer, size: float) {.base.} =
+  ## Changes font to other GLUT font.
+  self.font = font
+  self.size = size 
+
 method setTextAlign*(self: LabelRef, align: AnchorRef) {.base.} =
   ## Changes text alignment.
   self.text_align = align
@@ -118,6 +123,10 @@ method setTextAlign*(self: LabelRef, x1, y1, x2, y2: float) {.base.} =
   ## Changes text alignment.
   self.text_align = Anchor(x1, y1, x2, y2)
 
+method setTextColor*(self: LabelRef, color: ColorRef) {.base.} =
+  ## Changes text color.
+  self.color = color
+
 method setText*(self: LabelRef, value: string) {.base.} =
   ## Changes Label text.
   self.text = value

+ 4 - 0
src/nodesnim/nodescontrol/scroll.nim

@@ -198,12 +198,16 @@ method handle*(self: ScrollRef, event: InputEvent, mouse_on: var NodeRef) =
   if (mouse_in_y and mouse_pressed and event.kind == MOUSE) or self.thumb_y_has_mouse:
     self.thumb_y_has_mouse = true
     self.scrollBy(0, -event.yrel)
+    mouse_on = self
   if not mouse_pressed and self.thumb_y_has_mouse:
     self.thumb_y_has_mouse = false
+    mouse_on = nil
 
   # Mouse X
   if (mouse_in_x and mouse_pressed and event.kind == MOUSE) or self.thumb_x_has_mouse:
     self.thumb_x_has_mouse = true
     self.scrollBy(-event.xrel, 0)
+    mouse_on = self
   if not mouse_pressed and self.thumb_x_has_mouse:
     self.thumb_x_has_mouse = false
+    mouse_on = nil

+ 0 - 1
src/nodesnim/nodescontrol/vbox.nim

@@ -56,7 +56,6 @@ method addChild*(self: VBoxRef, child: NodeRef) =
   ## - `child`: other node.
   self.children.add(child)
   child.parent = self
-  self.rect_size = self.getChildSize()
 
 
 method draw*(self: VBoxRef, w, h: GLfloat) =