diff --git a/src/jsds.js b/src/jsds.js index 0985479..195cc25 100644 --- a/src/jsds.js +++ b/src/jsds.js @@ -1,87 +1,157 @@ { - function Creature(info,attributes,properties,drawinfo,battle){ - /* info: pname, cname,class, level, experience, race, size - * attributes: body, agility, spirit - * properties: strength, hardness, movement, skill, mind, aura - * drawinfo: x,y,w,h,col - */ - this.info = {"pname": info["pname"]+"", "experience": info["experience"]*1, "race":info["race"]+"", - "size":info["size"]*1}; - this.attributes = {"body": attributes["body"]*1, "agility": attributes["agility"]*1, - "spirit": attributes["spirit"]*1}; - this.properties = {"strength": properties["strength"]*1 , "hardness": info["hardness"]*1, - "movement": info["movement"]*1, "skill": properties["skill"]*1, - "mind": properties["mind"]*1, "aura": properties["aura"]*1}; - this.graphelement = Crafty.e("Creature").creature(this.info["pname"],drawinfo["x"],drawinfo["y"], - drawinfo["w"],drawinfo["h"],drawinfo["col"]); + // OOP-Setup + var reflection = {}; + + (function(){ + var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; - this.battle = {}; - if(battle) { - this.battle={"life": battle["life"], "defense": battle["defense"],"ini":battle["ini"], - "walk": battle["walk"], "melee": battle["melee"], "shoot": battle["shoot"], - "chant": battle["chant"], "shoot_chant": battle["shoot_chant"]}; - } - else { - this.battle["life"] = this.attributes.body + this.properties.strength + 10; - this.battle["defense"] = this.attributes.body + this.properties.hardness; - this.battle["ini"] = this.attributes.agility + this.properties.movement; - this.battle["walk"] = (this.attributes.agility / 2) +1; - this.battle["melee"] = this.attributes.body + this.properties.strength; - this.battle["shoot"] = this.attributes.agility + this.properties.mind; - this.battle["chant"] = this.attributes.spirit + this.properties.aura; - this.battle["shoot_chant"] = this.attributes.spirit + this.properties.skill; + // The base Class implementation (does nothing) + this.Class = function(){ }; + + // Create a new Class that inherits from this class + Class.extend = function(prop, ref_name) { + if(ref_name) + reflection[ref_name] = Class; + + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn) { + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) + this.init.apply(this, arguments); + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.prototype.constructor = Class; + + // And make this class extendable + Class.extend = arguments.callee; + + return Class; }; - this.life = this.battle["life"]*1; - }; - - Creature.prototype.attack = function(enem) { - console.log("attack"); - //console.log(this.cname+" greift "+enem.cname+" an!"); - //console.log("Ergebnis: " + this.melee + ( this.melee > enem.defense? " > " : " < ") + enem.defense); - }; - + })(); - function Player(info,attributes,properties,drawinfo,battle){ // x,y,w,h,col) { - /* info: pname, cname,class, level, experience, race, size - * attributes: body, agility, spirit - * properties: strength, hardness, movement, skill, mind, aura - * drawinfo: x,y,w,h,col - */ + var Creature = Class.extend({ + init: function(info,attributes,properties,drawinfo,battle){ + /* info: pname, cname,class, level, experience, race, size + * attributes: body, agility, spirit + * properties: strength, hardness, movement, skill, mind, aura + * drawinfo: x,y,w,h,col + */ + console.log("Creature called!"); + this.info = {"pname": info["pname"]+"", "experience": info["experience"]*1, "race":info["race"]+"", + "size":info["size"]*1}; + console.log("Creature Ready!"); + this.attributes = {"body": attributes["body"]*1, "agility": attributes["agility"]*1, + "spirit": attributes["spirit"]*1}; + console.log("Problem?"); + this.properties = {"strength": properties["strength"]*1 , "hardness": properties["hardness"]*1, + "movement": properties["movement"]*1, "skill": properties["skill"]*1, + "mind": properties["mind"]*1, "aura": properties["aura"]*1}; + this.graphelement = Crafty.e("Creature").creature(this.info["pname"],drawinfo["x"],drawinfo["y"], + drawinfo["w"],drawinfo["h"],drawinfo["col"]); + + this.battle = {}; + if(battle) { + this.battle={"life": battle["life"]*1, "defense": battle["defense"]*1,"ini":battle["ini"]*1, + "walk": battle["walk"]*1, "melee": battle["melee"]*1, "shoot": battle["shoot"]*1, + "chant": battle["chant"]*1, "shoot_chant": battle["shoot_chant"]*1}; + } + else { + this.battle["life"] = this.attributes.body + this.properties.strength + 10;; + this.battle["defense"] = this.attributes.body + this.properties.hardness; + this.battle["ini"] = this.attributes.agility + this.properties.movement; + this.battle["walk"] = (this.attributes.agility / 2) +1; + this.battle["melee"] = this.attributes.body + this.properties.strength; + this.battle["shoot"] = this.attributes.agility + this.properties.mind; + this.battle["chant"] = this.attributes.spirit + this.properties.aura; + this.battle["shoot_chant"] = this.attributes.spirit + this.properties.skill; + }; + this.life = this.battle["life"]*1; + }, + attack: function(enem) { + //console.log("attack"); + console.log(this.info.cname+" greift "+enem.info.cname+" an!"); + console.log("Ergebnis: " + this.battle.melee + ( this.battle.melee > enem.battle.defense ? " > " : " < ") + enem.battle.defense); + } + }); + + var Player = Creature.extend({ + init: function(info,attributes,properties,drawinfo,battle){ // x,y,w,h,col) { + /* info: pname, cname,class, level, experience, race, size + * attributes: body, agility, spirit + * properties: strength, hardness, movement, skill, mind, aura + * drawinfo: x,y,w,h,col + */ + this._super(info,attributes,properties,drawinfo,battle); + this.info["cname"]= info["cname"]+""; + this.info["class"]= info["class"]+""; + this.info["level"]= info["level"]*1; + + // Set default battle-propoerties. + this.extern = {"armor":0,"chant":0,"weapon":0}; + console.log(this.battle.defense); + this.battle.defense += this.extern.armor; + this.battle.melee += this.extern.weapon; + this.battle.shoot += this.extern.weapon; + this.battle.chant = this.battle.chant + this.extern.chant - this.extern.armor; + this.battle.shoot_chant = this.battle.chant + this.extern.chant - this.extern.armor; + }, + printoutput: function() { + $('#output').empty(); + $('#output').html(this.info.cname+"
"+this.info.pname); + } + }); - Creature.apply(this, arguments); - this.info["cname"]= info["cname"]+""; - this.info["class"]= info["class"]+""; - this.info["level"]= info["level"]*1; - - // Set default battle-propoerties. - this.extern = {"armor":0,"chant":0,"weapon":0}; - this.battle["defense"] += this.extern.armor; - this.battle.melee += this.extern.weapon; - this.battle.shoot += this.extern.weapon; - this.battle.chant = this.battle.chant + this.extern.chant - this.extern.armor; - this.battle.shoot_chant = this.battle.chant + this.extern.chant - this.extern.armor; - }; - Player.prototype = new Creature(); - - Player.prototype.printoutput = function() { - $('#output').empty(); - $('#output').html(this.info.cname+"
"+this.info.pname); - }; - - function Beast(info,attributes,properties,drawinfo,battle){ // x,y,w,h,col) { - /* info: pname, experience, race, size - * attributes: body, agility, spirit - * properties: strength, hardness, movement, skill, mind, aura - * drawinfo: x,y,w,h,col - * battle: life, defense,ini,walk,melee,shoot,chant,shoot_chant - */ - - Creature.apply(this,arguments); - this.info.cname=this.info.pname; - }; - - Beast.prototype.printoutput = function() { - $('#output').empty(); - $('#output').html(this.info.race+"
"+this.info.pname); - }; + var Beast = Creature.extend({ + init: function(info,attributes,properties,drawinfo,battle){ // x,y,w,h,col) { + /* info: pname, experience, race, size + * attributes: body, agility, spirit + * properties: strength, hardness, movement, skill, mind, aura + * drawinfo: x,y,w,h,col + * battle: life, defense,ini,walk,melee,shoot,chant,shoot_chant + */ + + this._super(info,attributes,properties,drawinfo,battle); + this.info.cname=this.info.pname; + }, + printoutput: function() { + $('#output').empty(); + $('#output').html(this.info.race+"
"+this.info.pname); + } + }); } diff --git a/src/jsds_crafty.js b/src/jsds_crafty.js index 98bc924..fad6d0c 100644 --- a/src/jsds_crafty.js +++ b/src/jsds_crafty.js @@ -78,8 +78,6 @@ this.enableControl(); }; if(e.mouseButton === Crafty.mouseButtons.RIGHT) { - console.log(player[this.id]); - console.log(cur_sel); cur_sel.attack(player[this.id]); }; });