health, health_max, stamina, stamina_max, lvl, attack, defence, magicAttack, magicDefense ) {
this.name = name;
this.id_name = id_name;
this.xp = xp;
this.health = health;
this.health_max = health_max;
this.stamina = stamina;
this.stamina_max = stamina_max;
this.lvl = lvl;
this.battle = {
attack: attack,
defence: defence,
magicAttack: magicAttack,
magicDefense: magicDefense
};
}
}
window.Enemy = Enemy; // attach to the global scope
class Goblin extends Enemy {
constructor(name, id_name, xp, health, health_max, stamina, stamina_max, lvl, attack, defence, magicAttack, magicDefense) {
super(name, id_name, xp, health, health_max, stamina, stamina_max, lvl, attack, defence, magicAttack, magicDefense);
this.kind = 'goblin';
this.xp ??= 20;
this.health ??= random(25,35);
this.health_max ??= random(25,35);
this.stamina ??= random(50,70);
this.stamina_max ??= random(50,70);
this.lvl ??= random(1,2);
this.battle.attack ??= random(1,2);
this.battle.defence ??= random(0,1);
this.battle.magicAttack ??= 0;
this.battle.magicDefense ??= 0;
}
}
window.Goblin = Goblin; // attach to the global scope
----------------------------------------
// First option
let goblin2 = new Goblin('Super goblin', 'goblin2', random(100, 200), 100, 100, 5, 5, 5, 5, 5);
// Second option
let temp_goblin3 = {
name: 'Generic goblin',
id_name: 'goblin2',
xp: 40,
...
}
$wolf2 = new Goblin(temp_goblin3.name, temp_goblin3.id_name, temp_goblin3.xp ...);
Можешь передавать все параметры как объект, будет легче использовать, потому что сразу видно какой параметр устанавливаешь. class Enemy { constructor (config) { const defaultConfig = { healthMax: random(25,35), // ...etc }; this.cfg = { ...defaultConfig, ...config, } } } const enemy = new Enemy({ healthMax: 40, }); Так же можешь задать дефолтный конфиг и переписывать его переданным конфигом. Если передано свойство healthMax, то будет использоваться оно, а если нет то дефолтное. Но при таком подходе внутри класса придётся обращаться как this.cfg.healthMax.
Обсуждают сегодня