0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-01 10:52:46 +00:00
Files
homebrewery/client/naturalCrit/naturalCrit.jsx
2015-11-14 18:29:51 -05:00

157 lines
2.6 KiB
JavaScript

var React = require('react');
var _ = require('lodash');
var cx = require('classnames');
var MonsterCard = require('./monsterCard/monsterCard.jsx');
var encounter = {
name : 'The Big Bad',
enemies : ['goblin', 'goblin'],
reserve : ['goblin'],
}
var MonsterManual = {
'goblin' : {
"hp" : 40,
"mov": 30,
"ac" : 13,
"attr" : {
"str" : 8,
"con" : 8,
"dex" : 8,
"int" : 8,
"wis" : 8,
"cha" : 8
},
"attacks" : {
"dagger" : {
"atk" : "1d20-5",
"dmg" : "1d4+5",
"type" : "pierce",
"notes" : "Super cool"
},
"bow" : {
"atk" : "1d20+2",
"dmg" : "6d6",
"rng" : "30"
}
},
"spells" : {
"fireball": {
"dmg" : "6d6",
"uses" : 4
},
"healing_bolt" : {
"heal" : "2d8+4",
"uses" : 6
}
},
"abilities" : ["pack tactics"],
"items" : ['healing_potion', 'healing_potion', 'ring']
}
}
var attrMod = function(attr){
return Math.floor(attr/2) - 5;
}
var NaturalCrit = React.createClass({
getInitialState: function() {
var self = this;
return {
enemies: _.indexBy(_.map(encounter.enemies, function(type, index){
return self.createEnemy(type, index)
}), 'id')
};
},
createEnemy : function(type, index){
var stats = MonsterManual[type]
return _.extend({
id : type + index,
name : type,
currentHP : stats.hp,
initiative : _.random(1,20) + attrMod(stats.attr.dex)
}, stats);
},
addPC : function(name, initiative){
this.state.enemies[name] = {
name : name,
id : name,
initiative : initiative,
isPC : true
};
this.setState({
enemies : this.state.enemies
})
},
addRandomPC : function(){
this.addPC(
_.sample(['zatch', 'jasper', 'el toro', 'tulik']) + _.random(1,1000),
_.random(1,25)
)
},
updateHP : function(enemyId, newHP){
this.state.enemies[enemyId].currentHP = newHP;
this.setState({
enemies : this.state.enemies
});
},
removeEnemy : function(enemyId){
delete this.state.enemies[enemyId];
this.setState({
enemies : this.state.enemies
});
},
render : function(){
var self = this;
console.log();
var sortedEnemies = _.sortBy(this.state.enemies, function(e){
return -e.initiative;
});
var cards = _.map(sortedEnemies, function(enemy){
return <MonsterCard
{...enemy}
key={enemy.id}
updateHP={self.updateHP.bind(self, enemy.id)}
remove={self.removeEnemy.bind(self, enemy.id)} />
})
return(
<div className='naturalCrit'>
<button className='rollInitiative' onClick={this.addRandomPC}> rollInitiative</button>
Project Ready!
{cards}
</div>
);
}
});
module.exports = NaturalCrit;