{ // OOP-Setup, thanks to Florian Rappl for this piece of Code // Source: // http://www.florian-rappl.de/Articles/Page/116/super-mario5-article var reflection = {}; (function(){ var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; // 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; }; })(); 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 */ 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": 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; this.att = "melee"; console.log("Attack: "+this.att); }, attack: function(enem) { //console.log("attack"); console.log(this.info.cname+" greift "+enem.info.cname+" an!"); console.log("Ergebnis: " + this.battle[this.att] + ( this.battle[this.att] > enem.battle.defense ? " > " : " < ") + enem.battle.defense); }, sel_att: function() { var outstr=""; outstr += "Angriffstyp?
"; outstr += ""; $('#ui').html(outstr); $('#att').bind("change", function() {cur_sel.att=this.value;}); $("#"+this.att).get(0).selected="true"; } }); 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(); $('#ui').empty(); $('#output').html(this.info.cname+"
"+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(); $('#ui').empty(); $('#output').html(this.info.race+"
"+this.info.pname); } }); }