Skip to content

Commit

Permalink
Project initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
Tornado-Technology committed Mar 13, 2023
1 parent 24367cc commit 0cbfe53
Show file tree
Hide file tree
Showing 14 changed files with 488 additions and 0 deletions.
94 changes: 94 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
Tree structures is a package for your project, with a handy implementation of trees for GameMaker Studio 2 using constructors.
The package was originally written for the personal work of TornadoTech projects, but was uploaded to GitHub for the convenience of all developers.

Also, the root can have a value, but you can simply not declare a value, then it will default to `undefined`.
To create a tree just write:

```js
var tree = new Tree();
show_debug_message(tree.value); // undefined

var tree2 = new Tree("Same data");
show_debug_message(tree2.value); // "Same data"
```

You can add nodes to the root of the tree as well as to other nodes. To add a node, write,<br>
`add(key, value)` and to turn it into a string you need to call the `to_string()` method

```js
tree = new Tree();

// Layer 1
var node_a = tree.add("node_a", 10);
var node_b = tree.add("node_b", 7);

// Layer 2
var node_a2 = node_a.add("node_a2", 3);
var node_a3 = node_a.add("node_a3", 3);
var node_a4 = node_a.add("node_a4", 3);

// Layer 3
var node_c = node_a2.add("node_c", 20);
var node_d = node_a4.add("node_d", 37);

show_debug_message(tree.to_string());

// Result:
// [root]: undefined
// _ [node_a]: 10
// _ _ [node_a2]: 3
// _ _ _ [node_c]: 20
// _ _ [node_a3]: 3
// _ _ [node_a4]: 3
// _ _ _ [node_d]: 37
// _ [node_b]: 7
```

You can use `exists(key)` to check if a node exists, and `remove(key)` to remove it.

```js
tree = new Tree();
// Layer 1
var node_a = tree.add("node_a", 23);
var node_b = tree.add("node_b", 29);

// Layer 2
var node_c = node_a.add("node_c", 48);

tree.exists("node_a"); // true
tree.exists("node_c"); // true
tree.exists("node_j"); // false

tree.remove("node_a");

tree.exists("node_a"); // false
tree.exists("node_c"); // false
```

And the main thing is of course you can get the `find(key)` node, which will return the tree structure.
And to read and write information, you can refer to the `key` and `value` fields. And to get the parent, refer to `parent`.

```js
tree = new Tree();

// Layer 1
var node_a = tree.add("node_a", 10);
var node_b = tree.add("node_b", 7);

// Layer 2
var node_a2 = node_a.add("node_a2", 3);
var node_a3 = node_a.add("node_a3", 3);
var node_a4 = node_a.add("node_a4", 3);

// Layer 3
var node_c = node_a2.add("node_c", 20);
var node_d = node_a4.add("node_d", 37);

var node = tree.find("node_d");
show_debug_message(node.value); // 37
show_debug_message(node.key); // "node_d"

// node.parent - reference to "node_a4"
show_debug_message(node.parent.value); // 3
show_debug_message(node.parent.key); // "node_a4"
```
8 changes: 8 additions & 0 deletions Tree structures.resource_order
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"FolderOrderSettings": [
{"name":"Objects","order":8,"path":"folders/Objects.yy",},
{"name":"Rooms","order":9,"path":"folders/Rooms.yy",},
{"name":"Scripts","order":4,"path":"folders/Scripts.yy",},
],
"ResourceOrderSettings": [],
}
35 changes: 35 additions & 0 deletions Tree structures.yyp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions objects/obj_tests/Create_0.gml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
tree = new Tree();

// Layer 1
var node_a = tree.add("node_a", 10);
var node_b = tree.add("node_b", 7);

// Layer 2
var node_a2 = node_a.add("node_a2", 3);
var node_a3 = node_a.add("node_a3", 3);
var node_a4 = node_a.add("node_a4", 3);

// Layer 3
var node_c = node_a2.add("node_c", 20);
var node_d = node_a4.add("node_d", 37);

show_debug_message("\n");
show_debug_message("new Tree().to_string(); method");
show_debug_message(tree.to_string());

show_debug_message("new Tree().exists(key); method");
show_debug_message("Node \"node_c\" exists - {0}", tree.exists("node_c") ? "true" : "false");
show_debug_message("Node \"node_a3\" exists - {0}", tree.exists("node_a3") ? "true" : "false");
show_debug_message("Node \"node_g\" exists - {0}", tree.exists("node_g") ? "true" : "false");
show_debug_message("\n");

show_debug_message("new Tree().remove(key); method");
tree.remove("node_a2");
show_debug_message("Remove \"node_a2\"");
show_debug_message(tree.to_string());

show_debug_message("new Tree().find(key); method");
var node = tree.find("node_d");
show_debug_message("Node \"node_d\" - key: {0}, value: {1}", node.key, node.value);
show_debug_message("Parent \"node_d\" - key: {0}, value: {1}", node.parent.key, node.parent.value);
show_debug_message("\n");
12 changes: 12 additions & 0 deletions objects/obj_tests/Draw_64.gml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
var width = display_get_gui_width();
var height = display_get_gui_height();

draw_set_halign(fa_left);
draw_set_valign(fa_top);

draw_text(16, 16, "Tree preview:\n\n" + tree.to_string());

draw_set_halign(fa_center);
draw_set_valign(fa_middle);

draw_text(width / 2, height / 2, "Open window \"Otput\",\n and see examples in `obj_tests`");
34 changes: 34 additions & 0 deletions objects/obj_tests/obj_tests.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions options/linux/options_linux.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions options/mac/options_mac.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions options/main/options_main.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions options/operagx/options_operagx.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions options/windows/options_windows.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 0cbfe53

Please sign in to comment.