js/GameplayKit/GKScene.js
'use strict'
import NSObject from '../ObjectiveC/NSObject'
//import GKSceneRootNodeType from './GKSceneRootNodeType'
//import GKEntity from './GKEntity'
//import GKGraph from './GKGraph'
/**
* A container for associating GameplayKit objects with a SpriteKit scene.
* @access public
* @extends {NSObject}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene
*/
export default class GKScene extends NSObject {
/**
* constructor
* @access public
* @constructor
*/
constructor() {
super()
// Accessing the SpriteKit Scene
/**
* The SpriteKit scene managed by this GKScene object.
* @type {?GKSceneRootNodeType}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640947-rootnode
*/
this.rootNode = null
// Managing Entities and Components
this._entities = []
// Managing Pathfinding Graphs
this._graphs = {}
}
// Loading a Scene File
/**
* Loads the specified SpriteKit scene file, creating a GKScene object containing the SpriteKit scene and associated GameplayKit objects.
* @access public
* @param {string} filename - The name of a scene file in your app’s main bundle.
* @returns {void}
* @desc Use this initializer to load SpriteKit scenes (.sks files) created in the Xcode SpriteKit scene editor that contain associated GameplayKit entities, components, and pathfinding graphs.
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640935-init
*/
static sceneWithFileNamed(filename) {
const scene = new GKScene()
// TODO: implement
return scene
}
// Managing Entities and Components
/**
* Adds a GameplayKit entity to the list of entities managed by the scene.
* @access public
* @param {GKEntity} entity - The entity to be added to the scene.
* @returns {void}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640954-addentity
*/
addEntity(entity) {
if(this._entities.indexOf(entity) < 0){
this._entities.push(entity)
}
}
/**
* Removes a GameplayKit entity from the list of entities managed by the scene.
* @access public
* @param {GKEntity} entity - The entity to be removed from the scene.
* @returns {void}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640686-removeentity
*/
removeEntity(entity) {
const index = this._entities.indexOf(entity)
this._entities.splice(index, 1)
}
/**
* The list of GameplayKit entities managed by the scene.
* @type {GKEntity[]}
* @desc When you add entities (and their components) to a scene in the Xcode SpriteKit scene editor, Xcode automatically adds them to this array.
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640795-entities
*/
get entities() {
return this._entities.slice()
}
// Managing Pathfinding Graphs
/**
* Removes a pathfinding graph from the list of graphs managed by the scene.
* @access public
* @param {string} name -
* @returns {void}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640663-removegraph
*/
removeGraph(name) {
if(this._graphs[name]){
delete this._graphs[name]
}
}
/**
* The list of pathfinding graph objects managed by the scene.
* @type {Map<string, GKGraph>}
* @desc When you define pathfinding graphs in the Xcode SpriteKit scene editor, Xcode automatically adds them to this array.
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/1640940-graphs
*/
get graphs() {
return this._graphs
}
// Instance Methods
/**
*
* @access public
* @param {GKGraph} graph -
* @param {string} name -
* @returns {void}
* @see https://developer.apple.com/documentation/gameplaykit/gkscene/2143063-addgraph
*/
addGraph(graph, name) {
this._graphs[name] = graph
}
}