Jump to content

Implementing Entity Components from Tiled file issue


EoghanGibbons
 Share

Recommended Posts

Hi, in a game I'm developing I'm trying to implement the entity component model in such a way that I can have units get their components information from the tiledMap file, I load the components from the Json like so

if (object.properties.components !== "") {
            object.properties.components.split(",").forEach(function (componentName) {
                entity.addComponent(new FYP.Components[componentName](this));
            }, this);
        }

FYP.Entity.prototype.addComponent = function (component) {
    'use strict';
    // Add component data to the entity
    // NOTE: The component must have a name property (which is defined as 
    // a prototype protoype of a component function)
    this.components[component.name] = component.name;
    return this;
};
FYP.Components.PlayerInputComponent = function () {
    'use strict';
    
    this.cursors = null;
    
    return this;
};

FYP.Components.PlayerInputComponent.prototype = new FYP.Components.PlayerInputComponent();
FYP.Components.PlayerInputComponent.prototype.name = 'PlayerInputComponent';
FYP.Components.PlayerInputComponent.prototype.type = 'Input';
FYP.Components.PlayerInputComponent.prototype.constructor = FYP.Components.PlayerInputComponent;

FYP.Components.PlayerInputComponent.prototype.initialize = function (actor) {
    'use strict';
    this.cursors = actor.game.keyboard.createCursorKeys();
    this.cursors.leftHand = this.keyboard.addKey(Phaser.Keyboard.X);
    this.cursors.rightHand = this.keyboard.addKey(Phaser.Keyboard.Z);
    this.cursors.pause = this.keyboard.addKey(Phaser.Keyboard.P);
};
FYP.Entity = function (game, position, spriteKey) {
	'use strict';
    Phaser.Sprite.call(this, game, position.x, position.y, spriteKey);

    this.commands = [];
    this.components = [];
    
    // Set the pivot point for this sprite to the center
    this.anchor.setTo(0.5, 0.5);
    
    return this;
};

FYP.Entity.prototype = Object.create(Phaser.Sprite.prototype);
FYP.Entity.prototype.constructor = FYP.Entity;

FYP.Entity.prototype.update = function () {
	'use strict';
    if (this.components) {
        this.components.forEach(function (component) {
            component.update();
            console.log(component);
        }, this);
    }

this does not work however, and even though Entity.components seems to contain all the appropriate components the array always seems to have a length of 0 so I can't traverse it to execute the update functions

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...