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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

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