{"action":"created","issue":{"url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/2","repository_url":"https://api.github.com/repos/renatoc8/Quadrion-Engine","labels_url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/2/labels{/name}","comments_url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/2/comments","events_url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/2/events","html_url":"https://github.com/renatoc8/Quadrion-Engine/issues/2","id":196522830,"number":2,"title":"Level And Scenes","user":{"login":"renatoc8","id":2717549,"avatar_url":"https://avatars.githubusercontent.com/u/2717549?v=3","gravatar_id":"","url":"https://api.github.com/users/renatoc8","html_url":"https://github.com/renatoc8","followers_url":"https://api.github.com/users/renatoc8/followers","following_url":"https://api.github.com/users/renatoc8/following{/other_user}","gists_url":"https://api.github.com/users/renatoc8/gists{/gist_id}","starred_url":"https://api.github.com/users/renatoc8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/renatoc8/subscriptions","organizations_url":"https://api.github.com/users/renatoc8/orgs","repos_url":"https://api.github.com/users/renatoc8/repos","events_url":"https://api.github.com/users/renatoc8/events{/privacy}","received_events_url":"https://api.github.com/users/renatoc8/received_events","type":"User","site_admin":false},"labels":[{"id":391769435,"url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/labels/design%20deficiency","name":"design deficiency","color":"d93f0b","default":false},{"id":22568277,"url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/labels/enhancement","name":"enhancement","color":"84b6eb","default":true}],"state":"open","locked":false,"assignee":{"login":"inkadnb","id":349044,"avatar_url":"https://avatars.githubusercontent.com/u/349044?v=3","gravatar_id":"","url":"https://api.github.com/users/inkadnb","html_url":"https://github.com/inkadnb","followers_url":"https://api.github.com/users/inkadnb/followers","following_url":"https://api.github.com/users/inkadnb/following{/other_user}","gists_url":"https://api.github.com/users/inkadnb/gists{/gist_id}","starred_url":"https://api.github.com/users/inkadnb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inkadnb/subscriptions","organizations_url":"https://api.github.com/users/inkadnb/orgs","repos_url":"https://api.github.com/users/inkadnb/repos","events_url":"https://api.github.com/users/inkadnb/events{/privacy}","received_events_url":"https://api.github.com/users/inkadnb/received_events","type":"User","site_admin":false},"assignees":[{"login":"inkadnb","id":349044,"avatar_url":"https://avatars.githubusercontent.com/u/349044?v=3","gravatar_id":"","url":"https://api.github.com/users/inkadnb","html_url":"https://github.com/inkadnb","followers_url":"https://api.github.com/users/inkadnb/followers","following_url":"https://api.github.com/users/inkadnb/following{/other_user}","gists_url":"https://api.github.com/users/inkadnb/gists{/gist_id}","starred_url":"https://api.github.com/users/inkadnb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inkadnb/subscriptions","organizations_url":"https://api.github.com/users/inkadnb/orgs","repos_url":"https://api.github.com/users/inkadnb/repos","events_url":"https://api.github.com/users/inkadnb/events{/privacy}","received_events_url":"https://api.github.com/users/inkadnb/received_events","type":"User","site_admin":false},{"login":"renatoc8","id":2717549,"avatar_url":"https://avatars.githubusercontent.com/u/2717549?v=3","gravatar_id":"","url":"https://api.github.com/users/renatoc8","html_url":"https://github.com/renatoc8","followers_url":"https://api.github.com/users/renatoc8/followers","following_url":"https://api.github.com/users/renatoc8/following{/other_user}","gists_url":"https://api.github.com/users/renatoc8/gists{/gist_id}","starred_url":"https://api.github.com/users/renatoc8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/renatoc8/subscriptions","organizations_url":"https://api.github.com/users/renatoc8/orgs","repos_url":"https://api.github.com/users/renatoc8/repos","events_url":"https://api.github.com/users/renatoc8/events{/privacy}","received_events_url":"https://api.github.com/users/renatoc8/received_events","type":"User","site_admin":false},{"login":"qpHalcy0n","id":3076260,"avatar_url":"https://avatars.githubusercontent.com/u/3076260?v=3","gravatar_id":"","url":"https://api.github.com/users/qpHalcy0n","html_url":"https://github.com/qpHalcy0n","followers_url":"https://api.github.com/users/qpHalcy0n/followers","following_url":"https://api.github.com/users/qpHalcy0n/following{/other_user}","gists_url":"https://api.github.com/users/qpHalcy0n/gists{/gist_id}","starred_url":"https://api.github.com/users/qpHalcy0n/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qpHalcy0n/subscriptions","organizations_url":"https://api.github.com/users/qpHalcy0n/orgs","repos_url":"https://api.github.com/users/qpHalcy0n/repos","events_url":"https://api.github.com/users/qpHalcy0n/events{/privacy}","received_events_url":"https://api.github.com/users/qpHalcy0n/received_events","type":"User","site_admin":false}],"milestone":null,"comments":13,"created_at":"2016-12-19T21:18:00Z","updated_at":"2016-12-21T12:09:56Z","closed_at":null,"body":"*Updated 12/21/2016 by Renato Ciuffo*\r\n\r\nThe loading of a level/scene needs to be pulled out of the gamestate. I propose moving the level/scene loading logic to a separate class that implements a format-independent interface, so that it may be re-used regardless of level format (BSP, JSON, etc) and location (filesystem, transmitted over a network, in-memory, etc).\r\n**Note:** The information in this Issue will be moved to a Wiki article once discussion about it has been finalized. \r\n\r\nIt is important to distinguish the difference between a level/scene loader and something like a scene manager. In order to properly describe this specific system, the following definitions are used:\r\n\r\n> **Level** or **World**\r\n> Refers to a series of entities (physical and non-physical, visible and non-visible), as they stand at the beginning of a scene. For example, a Level/World contains information about the location in which all of it's entities should be spawned, the angle that they should be start-out rotated by, as well as the initial value for all of it's properties. The terms \"Level\" and \"World\" may be used interchangeably, and for the sake of simplicity, the term \"level\" will be used from hereon.\r\n\r\n> **Level Loader**\r\nA class and/or sub-system who's only responsibility is to load a level's entity information from it's data source (generally from the filesystem, or from a server over the network), and add those entities to the Scene. The location of the data source, or the format of the level is an implementation detail, and should be handled within, and not exposed to the caller and/or users of the interface.\r\n\r\n> **Scene**\r\nRefers to a class or sub-system that holds information about a series of entities **(such as a scene graph)**, their current status (such as position, angle, and property values)~~, as well as information about their starting values~~. A scene keeps track of ~~which entities should be currently spawned, and which should be destroyed/removed, and uses the Entity Manager to accomplish these tasks~~ **a list of spawned (and active) entities and may contain all of the entities in a scene, or just a sub-set.** ~~The Scene is also in charge of simulation playback controls, such as Play, Pause, and Reset.~~\r\n>\r\n>It's important to distinguish the difference between a **Scene** and the **Entity Manager**, because their names imply similar functionality. The key difference is that the Scene does not store any entities by itself; it **uses** the Entity Manager to spawn, destroy, and interact with entities. ~~For example, when the scene is reset, it's the Scene's job to refer to the initial level information in order to determine which entities have been destroyed, spawned, and moved since the scene was last started and spawn, destroy, or move the entities so that the scene is identical to how it was when the level was loaded into the scene, and simulation was started.~~ **For example, when the game is started/restarted, the previously-active scene (if one exists) is destroyed, causing it's entities to be destroyed as well, and a new scene is created with the level information passed in.**\r\n\r\n> **Scene Manager**\r\nA factory class in charge of creating and destroying Scenes. A Scene should never be created directly, you should use the Scene Manager to create a new scene, or to lookup an existing scene instance. Generally a game would only have one scene at a time, however, you may choose to create multiple scenes and switch between them if the ability to switch back-and-forth between multiple scenes while maintaining their state, is desired.\r\n\r\nFor more up-to-date definitions for these as well as other terms, see the Wiki article titled \"Terminology\"."},"comment":{"url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/comments/268508054","html_url":"https://github.com/renatoc8/Quadrion-Engine/issues/2#issuecomment-268508054","issue_url":"https://api.github.com/repos/renatoc8/Quadrion-Engine/issues/2","id":268508054,"user":{"login":"renatoc8","id":2717549,"avatar_url":"https://avatars.githubusercontent.com/u/2717549?v=3","gravatar_id":"","url":"https://api.github.com/users/renatoc8","html_url":"https://github.com/renatoc8","followers_url":"https://api.github.com/users/renatoc8/followers","following_url":"https://api.github.com/users/renatoc8/following{/other_user}","gists_url":"https://api.github.com/users/renatoc8/gists{/gist_id}","starred_url":"https://api.github.com/users/renatoc8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/renatoc8/subscriptions","organizations_url":"https://api.github.com/users/renatoc8/orgs","repos_url":"https://api.github.com/users/renatoc8/repos","events_url":"https://api.github.com/users/renatoc8/events{/privacy}","received_events_url":"https://api.github.com/users/renatoc8/received_events","type":"User","site_admin":false},"created_at":"2016-12-21T12:09:56Z","updated_at":"2016-12-21T12:09:56Z","body":"Revised original comment to address concerns expressed in comments above."}}
{"actor":{"display_login":"renatoc8"}}