{"action":"created","comment":{"url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/comments/232572319","pull_request_review_id":173788579,"id":232572319,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMjU3MjMxOQ==","diff_hunk":"@@ -0,0 +1,147 @@\n+\n+\n+import { mat4 } from 'gl-matrix';\n+\n+import { SceneNodeComponent } from './scenenodecomponent';\n+\n+\n+/**\n+ * @todo add description\n+ */\n+export class SceneNode {\n+\n+    /** @see {@link name} */\n+    protected _name: string;\n+\n+    /** @see {@link parent} */\n+    protected _parent: SceneNode | undefined;\n+\n+    /** @see {@link nodes} */\n+    protected _nodes = new Array<SceneNode>();\n+\n+    /** @see {@link transform} */\n+    protected _transform: mat4;\n+\n+    /** @see {@link components} */\n+    protected _components = new Array<SceneNodeComponent>();\n+\n+\n+    /**\n+     * @todo comment\n+     * @param parent - @todo comment\n+     */\n+    constructor(name: string) {\n+        this._name = name;\n+        this._parent = undefined;\n+    }\n+\n+\n+    /**\n+     * @todo comment\n+     */\n+    traverse(callback: SceneNode.NodeCallback): void {\n+        callback(this);\n+\n+        /* Forwarding traversal. */\n+        for (const child of this._nodes) {\n+            child.traverse(callback);\n+        }\n+    }\n+\n+\n+    /**\n+     * @todo comment\n+     * @param node - @todo comment\n+     */\n+    addNode(node: SceneNode): SceneNode {\n+        node._parent = this;\n+        this._nodes.push(node);\n+\n+        return node;\n+    }\n+\n+    /**\n+     * @todo comment\n+     * @param component - @todo comment\n+     */\n+    addComponent(component: SceneNodeComponent): SceneNodeComponent {\n+        this._components.push(component);\n+\n+        return component;\n+    }\n+\n+    /**\n+     * @todo comment\n+     * @param type - @todo comment\n+     */\n+    componentsOfType(type: string): Array<SceneNodeComponent> {\n+        return this._components.filter((component: SceneNodeComponent) => type === component.type);\n+    }\n+\n+\n+    /**\n+     * Read-only access to ... @todo comment\n+     */\n+    get name(): string {\n+        return this._name;\n+    }\n+\n+    /**\n+     * Read-only access to ... @todo comment\n+     */\n+    get parent(): SceneNode | undefined {\n+        return this._parent;\n+    }\n+\n+    /**\n+     * Read-only access to ... @todo comment\n+     */\n+    get nodes(): Array<SceneNode> | undefined {\n+        return this._nodes;\n+    }\n+\n+    /**\n+     * Read-only access to ... @todo comment\n+     */\n+    get transform(): mat4 {","path":"source/scene/scenenode.ts","position":106,"original_position":106,"commit_id":"316805d4be008bf35846a07698d596301fe892f6","original_commit_id":"316805d4be008bf35846a07698d596301fe892f6","user":{"login":"cgcostume","id":3909980,"node_id":"MDQ6VXNlcjM5MDk5ODA=","avatar_url":"https://avatars1.githubusercontent.com/u/3909980?v=4","gravatar_id":"","url":"https://api.github.com/users/cgcostume","html_url":"https://github.com/cgcostume","followers_url":"https://api.github.com/users/cgcostume/followers","following_url":"https://api.github.com/users/cgcostume/following{/other_user}","gists_url":"https://api.github.com/users/cgcostume/gists{/gist_id}","starred_url":"https://api.github.com/users/cgcostume/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgcostume/subscriptions","organizations_url":"https://api.github.com/users/cgcostume/orgs","repos_url":"https://api.github.com/users/cgcostume/repos","events_url":"https://api.github.com/users/cgcostume/events{/privacy}","received_events_url":"https://api.github.com/users/cgcostume/received_events","type":"User","site_admin":false},"body":"we could also think about multi parent relation ships... currently there is only one. We should redesign this as early as possible.","created_at":"2018-11-12T08:50:24Z","updated_at":"2018-11-12T08:51:38Z","html_url":"https://github.com/cginternals/webgl-operate/pull/142#discussion_r232572319","pull_request_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/comments/232572319"},"html":{"href":"https://github.com/cginternals/webgl-operate/pull/142#discussion_r232572319"},"pull_request":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142"}},"in_reply_to_id":232571288},"pull_request":{"url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142","id":230051157,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMwMDUxMTU3","html_url":"https://github.com/cginternals/webgl-operate/pull/142","diff_url":"https://github.com/cginternals/webgl-operate/pull/142.diff","patch_url":"https://github.com/cginternals/webgl-operate/pull/142.patch","issue_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/142","number":142,"state":"open","locked":false,"title":"WIP: Scene","user":{"login":"cgcostume","id":3909980,"node_id":"MDQ6VXNlcjM5MDk5ODA=","avatar_url":"https://avatars1.githubusercontent.com/u/3909980?v=4","gravatar_id":"","url":"https://api.github.com/users/cgcostume","html_url":"https://github.com/cgcostume","followers_url":"https://api.github.com/users/cgcostume/followers","following_url":"https://api.github.com/users/cgcostume/following{/other_user}","gists_url":"https://api.github.com/users/cgcostume/gists{/gist_id}","starred_url":"https://api.github.com/users/cgcostume/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgcostume/subscriptions","organizations_url":"https://api.github.com/users/cgcostume/orgs","repos_url":"https://api.github.com/users/cgcostume/repos","events_url":"https://api.github.com/users/cgcostume/events{/privacy}","received_events_url":"https://api.github.com/users/cgcostume/received_events","type":"User","site_admin":false},"body":"do not merge (yet) - this PR is for continuous review","created_at":"2018-11-12T08:22:28Z","updated_at":"2018-11-12T08:51:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"21e0cf6deaaafcf34cc39305f9ced088aa61372d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142/commits","review_comments_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142/comments","review_comment_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/142/comments","statuses_url":"https://api.github.com/repos/cginternals/webgl-operate/statuses/316805d4be008bf35846a07698d596301fe892f6","head":{"label":"cginternals:scene","ref":"scene","sha":"316805d4be008bf35846a07698d596301fe892f6","user":{"login":"cginternals","id":13125552,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTI1NTUy","avatar_url":"https://avatars2.githubusercontent.com/u/13125552?v=4","gravatar_id":"","url":"https://api.github.com/users/cginternals","html_url":"https://github.com/cginternals","followers_url":"https://api.github.com/users/cginternals/followers","following_url":"https://api.github.com/users/cginternals/following{/other_user}","gists_url":"https://api.github.com/users/cginternals/gists{/gist_id}","starred_url":"https://api.github.com/users/cginternals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cginternals/subscriptions","organizations_url":"https://api.github.com/users/cginternals/orgs","repos_url":"https://api.github.com/users/cginternals/repos","events_url":"https://api.github.com/users/cginternals/events{/privacy}","received_events_url":"https://api.github.com/users/cginternals/received_events","type":"Organization","site_admin":false},"repo":{"id":117073650,"node_id":"MDEwOlJlcG9zaXRvcnkxMTcwNzM2NTA=","name":"webgl-operate","full_name":"cginternals/webgl-operate","private":false,"owner":{"login":"cginternals","id":13125552,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTI1NTUy","avatar_url":"https://avatars2.githubusercontent.com/u/13125552?v=4","gravatar_id":"","url":"https://api.github.com/users/cginternals","html_url":"https://github.com/cginternals","followers_url":"https://api.github.com/users/cginternals/followers","following_url":"https://api.github.com/users/cginternals/following{/other_user}","gists_url":"https://api.github.com/users/cginternals/gists{/gist_id}","starred_url":"https://api.github.com/users/cginternals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cginternals/subscriptions","organizations_url":"https://api.github.com/users/cginternals/orgs","repos_url":"https://api.github.com/users/cginternals/repos","events_url":"https://api.github.com/users/cginternals/events{/privacy}","received_events_url":"https://api.github.com/users/cginternals/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cginternals/webgl-operate","description":"A TypeScript based WebGL rendering framework.","fork":false,"url":"https://api.github.com/repos/cginternals/webgl-operate","forks_url":"https://api.github.com/repos/cginternals/webgl-operate/forks","keys_url":"https://api.github.com/repos/cginternals/webgl-operate/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cginternals/webgl-operate/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cginternals/webgl-operate/teams","hooks_url":"https://api.github.com/repos/cginternals/webgl-operate/hooks","issue_events_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/events{/number}","events_url":"https://api.github.com/repos/cginternals/webgl-operate/events","assignees_url":"https://api.github.com/repos/cginternals/webgl-operate/assignees{/user}","branches_url":"https://api.github.com/repos/cginternals/webgl-operate/branches{/branch}","tags_url":"https://api.github.com/repos/cginternals/webgl-operate/tags","blobs_url":"https://api.github.com/repos/cginternals/webgl-operate/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cginternals/webgl-operate/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cginternals/webgl-operate/git/refs{/sha}","trees_url":"https://api.github.com/repos/cginternals/webgl-operate/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cginternals/webgl-operate/statuses/{sha}","languages_url":"https://api.github.com/repos/cginternals/webgl-operate/languages","stargazers_url":"https://api.github.com/repos/cginternals/webgl-operate/stargazers","contributors_url":"https://api.github.com/repos/cginternals/webgl-operate/contributors","subscribers_url":"https://api.github.com/repos/cginternals/webgl-operate/subscribers","subscription_url":"https://api.github.com/repos/cginternals/webgl-operate/subscription","commits_url":"https://api.github.com/repos/cginternals/webgl-operate/commits{/sha}","git_commits_url":"https://api.github.com/repos/cginternals/webgl-operate/git/commits{/sha}","comments_url":"https://api.github.com/repos/cginternals/webgl-operate/comments{/number}","issue_comment_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/comments{/number}","contents_url":"https://api.github.com/repos/cginternals/webgl-operate/contents/{+path}","compare_url":"https://api.github.com/repos/cginternals/webgl-operate/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cginternals/webgl-operate/merges","archive_url":"https://api.github.com/repos/cginternals/webgl-operate/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cginternals/webgl-operate/downloads","issues_url":"https://api.github.com/repos/cginternals/webgl-operate/issues{/number}","pulls_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls{/number}","milestones_url":"https://api.github.com/repos/cginternals/webgl-operate/milestones{/number}","notifications_url":"https://api.github.com/repos/cginternals/webgl-operate/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cginternals/webgl-operate/labels{/name}","releases_url":"https://api.github.com/repos/cginternals/webgl-operate/releases{/id}","deployments_url":"https://api.github.com/repos/cginternals/webgl-operate/deployments","created_at":"2018-01-11T08:44:50Z","updated_at":"2018-11-06T14:25:35Z","pushed_at":"2018-11-12T08:22:28Z","git_url":"git://github.com/cginternals/webgl-operate.git","ssh_url":"git@github.com:cginternals/webgl-operate.git","clone_url":"https://github.com/cginternals/webgl-operate.git","svn_url":"https://github.com/cginternals/webgl-operate","homepage":"https://webgl-operate.org","size":2430,"stargazers_count":20,"watchers_count":20,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":33,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7,"open_issues":33,"watchers":20,"default_branch":"master"}},"base":{"label":"cginternals:master","ref":"master","sha":"4ab7004a60391e0db8dd8e76f87a55d7c72667f1","user":{"login":"cginternals","id":13125552,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTI1NTUy","avatar_url":"https://avatars2.githubusercontent.com/u/13125552?v=4","gravatar_id":"","url":"https://api.github.com/users/cginternals","html_url":"https://github.com/cginternals","followers_url":"https://api.github.com/users/cginternals/followers","following_url":"https://api.github.com/users/cginternals/following{/other_user}","gists_url":"https://api.github.com/users/cginternals/gists{/gist_id}","starred_url":"https://api.github.com/users/cginternals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cginternals/subscriptions","organizations_url":"https://api.github.com/users/cginternals/orgs","repos_url":"https://api.github.com/users/cginternals/repos","events_url":"https://api.github.com/users/cginternals/events{/privacy}","received_events_url":"https://api.github.com/users/cginternals/received_events","type":"Organization","site_admin":false},"repo":{"id":117073650,"node_id":"MDEwOlJlcG9zaXRvcnkxMTcwNzM2NTA=","name":"webgl-operate","full_name":"cginternals/webgl-operate","private":false,"owner":{"login":"cginternals","id":13125552,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTI1NTUy","avatar_url":"https://avatars2.githubusercontent.com/u/13125552?v=4","gravatar_id":"","url":"https://api.github.com/users/cginternals","html_url":"https://github.com/cginternals","followers_url":"https://api.github.com/users/cginternals/followers","following_url":"https://api.github.com/users/cginternals/following{/other_user}","gists_url":"https://api.github.com/users/cginternals/gists{/gist_id}","starred_url":"https://api.github.com/users/cginternals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cginternals/subscriptions","organizations_url":"https://api.github.com/users/cginternals/orgs","repos_url":"https://api.github.com/users/cginternals/repos","events_url":"https://api.github.com/users/cginternals/events{/privacy}","received_events_url":"https://api.github.com/users/cginternals/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cginternals/webgl-operate","description":"A TypeScript based WebGL rendering framework.","fork":false,"url":"https://api.github.com/repos/cginternals/webgl-operate","forks_url":"https://api.github.com/repos/cginternals/webgl-operate/forks","keys_url":"https://api.github.com/repos/cginternals/webgl-operate/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cginternals/webgl-operate/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cginternals/webgl-operate/teams","hooks_url":"https://api.github.com/repos/cginternals/webgl-operate/hooks","issue_events_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/events{/number}","events_url":"https://api.github.com/repos/cginternals/webgl-operate/events","assignees_url":"https://api.github.com/repos/cginternals/webgl-operate/assignees{/user}","branches_url":"https://api.github.com/repos/cginternals/webgl-operate/branches{/branch}","tags_url":"https://api.github.com/repos/cginternals/webgl-operate/tags","blobs_url":"https://api.github.com/repos/cginternals/webgl-operate/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cginternals/webgl-operate/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cginternals/webgl-operate/git/refs{/sha}","trees_url":"https://api.github.com/repos/cginternals/webgl-operate/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cginternals/webgl-operate/statuses/{sha}","languages_url":"https://api.github.com/repos/cginternals/webgl-operate/languages","stargazers_url":"https://api.github.com/repos/cginternals/webgl-operate/stargazers","contributors_url":"https://api.github.com/repos/cginternals/webgl-operate/contributors","subscribers_url":"https://api.github.com/repos/cginternals/webgl-operate/subscribers","subscription_url":"https://api.github.com/repos/cginternals/webgl-operate/subscription","commits_url":"https://api.github.com/repos/cginternals/webgl-operate/commits{/sha}","git_commits_url":"https://api.github.com/repos/cginternals/webgl-operate/git/commits{/sha}","comments_url":"https://api.github.com/repos/cginternals/webgl-operate/comments{/number}","issue_comment_url":"https://api.github.com/repos/cginternals/webgl-operate/issues/comments{/number}","contents_url":"https://api.github.com/repos/cginternals/webgl-operate/contents/{+path}","compare_url":"https://api.github.com/repos/cginternals/webgl-operate/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cginternals/webgl-operate/merges","archive_url":"https://api.github.com/repos/cginternals/webgl-operate/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cginternals/webgl-operate/downloads","issues_url":"https://api.github.com/repos/cginternals/webgl-operate/issues{/number}","pulls_url":"https://api.github.com/repos/cginternals/webgl-operate/pulls{/number}","milestones_url":"https://api.github.com/repos/cginternals/webgl-operate/milestones{/number}","notifications_url":"https://api.github.com/repos/cginternals/webgl-operate/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cginternals/webgl-operate/labels{/name}","releases_url":"https://api.github.com/repos/cginternals/webgl-operate/releases{/id}","deployments_url":"https://api.github.com/repos/cginternals/webgl-operate/deployments","created_at":"2018-01-11T08:44:50Z","updated_at":"2018-11-06T14:25:35Z","pushed_at":"2018-11-12T08:22:28Z","git_url":"git://github.com/cginternals/webgl-operate.git","ssh_url":"git@github.com:cginternals/webgl-operate.git","clone_url":"https://github.com/cginternals/webgl-operate.git","svn_url":"https://github.com/cginternals/webgl-operate","homepage":"https://webgl-operate.org","size":2430,"stargazers_count":20,"watchers_count":20,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":33,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7,"open_issues":33,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142"},"html":{"href":"https://github.com/cginternals/webgl-operate/pull/142"},"issue":{"href":"https://api.github.com/repos/cginternals/webgl-operate/issues/142"},"comments":{"href":"https://api.github.com/repos/cginternals/webgl-operate/issues/142/comments"},"review_comments":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142/comments"},"review_comment":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cginternals/webgl-operate/pulls/142/commits"},"statuses":{"href":"https://api.github.com/repos/cginternals/webgl-operate/statuses/316805d4be008bf35846a07698d596301fe892f6"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"cgcostume"}}