diff --git a/client/home/home.jsx b/client/home/home.jsx new file mode 100644 index 0000000..21c2025 --- /dev/null +++ b/client/home/home.jsx @@ -0,0 +1,29 @@ +var React = require('react'); +var _ = require('lodash'); +var cx = require('classnames'); + + + + +//var Icon = require('naturalcrit/icon.svg.jsx'); +//var Logo = require('naturalcrit/logo/logo.jsx'); + +//var HomebrewIcon = require('naturalcrit/homebrewIcon.svg.jsx'); +//var CombatIcon = require('naturalcrit/combatIcon.svg.jsx'); + +var Home = React.createClass({ + + navigate : function(){ + + }, + + render : function(){ + return( +
+ +
+ ); + } +}); + +module.exports = Home; diff --git a/client/naturalCrit/home/home.less b/client/home/home.less similarity index 92% rename from client/naturalCrit/home/home.less rename to client/home/home.less index 165d5f3..ec02809 100644 --- a/client/naturalCrit/home/home.less +++ b/client/home/home.less @@ -1,3 +1,16 @@ +@import 'naturalcrit/styles/reset.less'; +//@import 'naturalcrit/styles/elements.less'; +@import 'naturalcrit/styles/animations.less'; +@import 'naturalcrit/styles/colors.less'; +@import 'naturalcrit/styles/tooltip.less'; + +html,body, #reactContainer{ + min-height: 100vh; + height: 100vh; + margin: 0; + font-family : 'Open Sans', sans-serif; +} + .home{ height : 100vh; diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx new file mode 100644 index 0000000..b1647ec --- /dev/null +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -0,0 +1,14 @@ +var React = require('react'); +var _ = require('lodash'); +var cx = require('classnames'); + +var COM = React.createClass({ + + render : function(){ + return
+ COM Ready! +
+ } +}); + +module.exports = COM; diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less new file mode 100644 index 0000000..6bb4bdf --- /dev/null +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -0,0 +1,3 @@ +.COM{ + +} \ No newline at end of file diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 94ebe55..8bb19e0 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -4,9 +4,9 @@ var cx = require('classnames'); var CreateRouter = require('pico-router').createRouter; -var HomePage = require('./homePage/homePage.jsx'); -var EditPage = require('./editPage/editPage.jsx'); -var SharePage = require('./sharePage/sharePage.jsx'); +var HomePage = require('./pages/homePage/homePage.jsx'); +var EditPage = require('./pages/editPage/editPage.jsx'); +var SharePage = require('./pages/sharePage/sharePage.jsx'); var Router; var Homebrew = React.createClass({ diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index 9fe5e25..231bd3f 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -9,7 +9,6 @@ html,body, #reactContainer{ height: 100vh; margin: 0; font-family : 'Open Sans', sans-serif; - //overflow: hidden; } .homebrew{ @@ -26,7 +25,7 @@ html,body, #reactContainer{ .content{ flex: auto; position: relative; - height: calc(~"100% - 29px"); + height: calc(~"100% - 29px"); //Navbar height } } diff --git a/client/homebrew/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx similarity index 86% rename from client/homebrew/editPage/editPage.jsx rename to client/homebrew/pages/editPage/editPage.jsx index ad3188c..2496bcc 100644 --- a/client/homebrew/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -2,11 +2,11 @@ var React = require('react'); var _ = require('lodash'); var cx = require('classnames'); -var Statusbar = require('../statusbar/statusbar.jsx'); -var PageContainer = require('../pageContainer/pageContainer.jsx'); -var Editor = require('../editor/editor.jsx'); +var Statusbar = require('../../statusbar/statusbar.jsx'); +var PageContainer = require('../../pageContainer/pageContainer.jsx'); +var Editor = require('../../editor/editor.jsx'); -var FullClassGen = require('../editor/snippets/fullclass.gen.js'); +var FullClassGen = require('../../editor/snippets/fullclass.gen.js'); var request = require("superagent"); diff --git a/client/homebrew/editPage/editPage.less b/client/homebrew/pages/editPage/editPage.less similarity index 100% rename from client/homebrew/editPage/editPage.less rename to client/homebrew/pages/editPage/editPage.less diff --git a/client/homebrew/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx similarity index 88% rename from client/homebrew/homePage/homePage.jsx rename to client/homebrew/pages/homePage/homePage.jsx index becfa05..0297c5a 100644 --- a/client/homebrew/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -3,23 +3,23 @@ var _ = require('lodash'); var cx = require('classnames'); //var Statusbar = require('../statusbar/statusbar.jsx'); -var PageContainer = require('../pageContainer/pageContainer.jsx'); +//var PageContainer = require('../pageContainer/pageContainer.jsx'); //var Editor = require('../editor/editor.jsx'); var Nav = require('naturalcrit/nav/nav.jsx'); -var Navbar = require('../navbar/navbar.jsx'); +var Navbar = require('../../navbar/navbar.jsx'); -var RedditShare = require('../navbar/redditShare.navitem.jsx'); +var RedditShare = require('../../navbar/redditShare.navitem.jsx'); -var SplitPane = require('../splitPane/splitPane.jsx'); +var SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); //var CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); -var Editor = require('../editor/editor.jsx'); +var Editor = require('../../editor/editor.jsx'); diff --git a/client/homebrew/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less similarity index 100% rename from client/homebrew/homePage/homePage.less rename to client/homebrew/pages/homePage/homePage.less diff --git a/client/homebrew/homePage/welcome_msg.txt b/client/homebrew/pages/homePage/welcome_msg.txt similarity index 100% rename from client/homebrew/homePage/welcome_msg.txt rename to client/homebrew/pages/homePage/welcome_msg.txt diff --git a/client/homebrew/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx similarity index 84% rename from client/homebrew/sharePage/sharePage.jsx rename to client/homebrew/pages/sharePage/sharePage.jsx index a097ed7..b5a9bdf 100644 --- a/client/homebrew/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -2,9 +2,9 @@ var React = require('react'); var _ = require('lodash'); var cx = require('classnames'); -var Statusbar = require('../statusbar/statusbar.jsx'); +var Statusbar = require('../../statusbar/statusbar.jsx'); -var PageContainer = require('../pageContainer/pageContainer.jsx'); +var PageContainer = require('../../pageContainer/pageContainer.jsx'); var SharePage = React.createClass({ getDefaultProps: function() { diff --git a/client/homebrew/sharePage/sharePage.less b/client/homebrew/pages/sharePage/sharePage.less similarity index 100% rename from client/homebrew/sharePage/sharePage.less rename to client/homebrew/pages/sharePage/sharePage.less diff --git a/client/naturalCrit/favicon.ico b/client/main/favicon.ico similarity index 100% rename from client/naturalCrit/favicon.ico rename to client/main/favicon.ico diff --git a/client/main/main.jsx b/client/main/main.jsx new file mode 100644 index 0000000..54bd35d --- /dev/null +++ b/client/main/main.jsx @@ -0,0 +1,46 @@ +var React = require('react'); +var _ = require('lodash'); +var cx = require('classnames'); + +var Router = require('pico-router'); + +var Main = React.createClass({ + + render : function(){ + return
+ + + +
+ +

Top-tier tools for the discerning DM

+
+ +
+ + {/* Replace with anchor tag */} + +
+
+ {/**/} +

The Homebrewery

+

Make authentic-looking 5e homebrews using Markdown

+
+
+ + {/* +
+
+ +

Combat Manager

+

Easily create and manage complex encouters for your party

+
+
+ */} +
+ +
+ } +}); + +module.exports = Main; diff --git a/client/main/main.less b/client/main/main.less new file mode 100644 index 0000000..66d0da3 --- /dev/null +++ b/client/main/main.less @@ -0,0 +1,178 @@ +@import 'naturalcrit/styles/reset.less'; +//@import 'naturalcrit/styles/elements.less'; +@import 'naturalcrit/styles/animations.less'; +@import 'naturalcrit/styles/colors.less'; +@import 'naturalcrit/styles/tooltip.less'; + +html,body, #reactContainer{ + min-height: 100vh; + height: 100vh; + margin: 0; + font-family : 'Open Sans', sans-serif; +} + + +.main{ + height : 100vh; + background-color : white; + .top{ + .fadeInTop(1s); + .delay(0.5); + margin-bottom : 100px; + padding-top : 100px; + text-align : center; + .logo{ + font-size : 4em; + color : black; + svg{ + fill : black; + } + } + p{ + margin-top : 10px; + font-size : 1.3em; + font-style : italic; + color : @grey; + } + } + .tools{ + width : 100%; + text-align : center; + .toolContainer{ + .sequentialDelay(0.5s, 1s); + .fadeInDown(1s); + .keep(); + display : inline-block; + cursor : pointer; + opacity : 0; + text-align : center; + border-right : 1px solid #333; + &:last-child{ + border : none; + } + .content{ + .addSketch(360px); + .animateAll(0.5s); + position : relative; + width : 500px; + padding : 40px; + &:hover{ + svg, h2{ + .transform(scale(1.3)); + } + } + h2{ + .animateAll(0.5s); + font-family : 'CodeBold'; + font-size : 2em; + } + p{ + max-width : 300px; + margin : 20px auto; + line-height : 1.5em; + } + svg{ + .animateAll(0.5s); + height : 10em; + } + } + //Proejct specific styles + &.homebrew{ + .content:hover{ + background-color : fade(@teal, 20%); + } + } + &.combat{ + .content:hover{ + background-color : fade(@red, 20%); + } + } + //Under Construction styles + &.underConstruction{ + cursor : initial; + .content{ + &:hover{ + svg, h2{ + .transform(scale(1.0)); + } + } + svg, h2{ + opacity : 0.3; + } + &:after{ + .animateAll(); + content : "Under Construction"; + position : absolute; + display : block; + top : 120px; + left : 0px; + width : 100%; + padding : 10px 0px; + //opacity : 0; + background-color : fade(@grey, 50%); + font-size : 2em; + font-weight : 800; + text-align : center; + text-transform : uppercase; + } + &:before{ + content : ""; + position : absolute; + display : block; + top : 130px; + right : 30px; + height : 50px; + width : 40px; + //opacity : 0; + background-image : url('/assets/naturalCrit/home/bulldozer.png'); + background-repeat : no-repeat; + background-size : contain; + animation-iteration-count : infinite; + } + } + } + } + } +} +.addSketch(@length, @color : black){ + path, line, polyline, circle, rect, polygon { + .sketch(@length, @color, 4s); + stroke-dasharray : @length; + stroke-dashoffset : 0px; + stroke : @color; + stroke-width : 0.5px; + fill : @color; + //.animateAll(3s); + } +} +.sketch(@length, @color : black, @duration : 3s, @easing : @defaultEasing){ + .createAnimation(sketch, @duration, @easing); + .sketchKeyFrames(){ + 0% { stroke-dashoffset : @length; fill: transparent;} + 50% { stroke-dashoffset : @length; fill: transparent;} + 80% { stroke-dashoffset : 0px; fill: transparent;} + 100% { stroke-dashoffset : 0px; fill:@color;} + } + @-webkit-keyframes sketch {.sketchKeyFrames();} + @-moz-keyframes sketch {.sketchKeyFrames();} + @-ms-keyframes sketch {.sketchKeyFrames();} + @-o-keyframes sketch {.sketchKeyFrames();} + @keyframes sketch {.sketchKeyFrames();} +} +/* +.sketch(@length, @color : black, @duration : 3s, @easing : @defaultEasing){ + .createAnimation(bounce, @duration, @easing); + .sketchKeyFrames(){ + 0% { stroke-dashoffset : 0px; fill:@color;} + 15% { stroke-dashoffset : 0px; fill : transparent} + 50% { stroke-dashoffset : @length; fill: transparent} + 85% { stroke-dashoffset : 0px; fill:transparent;} + 100% { stroke-dashoffset : 0px; fill:@color;} + } + @-webkit-keyframes bounce {.sketchKeyFrames();} + @-moz-keyframes bounce {.sketchKeyFrames();} + @-ms-keyframes bounce {.sketchKeyFrames();} + @-o-keyframes bounce {.sketchKeyFrames();} + @keyframes bounce {.sketchKeyFrames();} +} +*/ \ No newline at end of file diff --git a/client/naturalCrit/combatManager/combatManager.jsx b/client/naturalCrit/combatManager/combatManager.jsx deleted file mode 100644 index fbb8c64..0000000 --- a/client/naturalCrit/combatManager/combatManager.jsx +++ /dev/null @@ -1,165 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var Sidebar = require('./sidebar/sidebar.jsx'); -var Encounter = require('./encounter/encounter.jsx'); - -var encounters = [ - { - name : 'The Big Bad', - desc : 'The big fight!', - reward : 'gems', - enemies : ['goblin', 'goblin'], - reserve : ['goblin'], - }, - { - name : 'Demon Goats', - desc : 'Gross fight', - reward : 'curved horn, goat sac', - enemies : ['demon_goat', 'demon_goat', 'demon_goat'], - unique : { - demon_goat : { - "hp" : 140, - "ac" : 16, - "attr" : { - "str" : 8, - "con" : 8, - "dex" : 8, - "int" : 8, - "wis" : 8, - "cha" : 8 - }, - "attacks" : { - "charge" : { - "atk" : "1d20+5", - "dmg" : "1d8+5", - "type" : "bludge" - } - }, - "abilities" : ["charge"], - } - } - }, - -]; - -var defaultMonsterManual = require('naturalcrit/defaultMonsterManual.js'); - -var attrMod = function(attr){ - return Math.floor(attr/2) - 5; -} - - -var Store = require('naturalcrit/combat.store'); -var Actions = require('naturalcrit/combat.actions'); - - - -var CombatManager = React.createClass({ - mixins : [Store.mixin()], - - - getInitialState: function() { - var self = this; - return { - selectedEncounterIndex : 0, - encounters : JSON.parse(localStorage.getItem('encounters')) || encounters, - monsterManual : JSON.parse(localStorage.getItem('monsterManual')) || defaultMonsterManual, - - players : localStorage.getItem('players') || 'jasper 13\nzatch 19', - - - }; - }, - - onStoreChange : function(){ - console.log('STORE CAHNGE', Store.getInc()); - this.setState({ - inc : Store.getInc() - }) - }, - - - handleEncounterJSONChange : function(encounterIndex, json){ - this.state.encounters[encounterIndex] = json; - this.setState({ - encounters : this.state.encounters - }) - localStorage.setItem("encounters", JSON.stringify(this.state.encounters)); - }, - handleMonsterManualJSONChange : function(json){ - this.setState({ - monsterManual : json - }); - localStorage.setItem("monsterManual", JSON.stringify(this.state.monsterManual)); - }, - handlePlayerChange : function(e){ - this.setState({ - players : e.target.value - }); - localStorage.setItem("players", e.target.value); - }, - handleSelectedEncounterChange : function(encounterIndex){ - console.log(encounterIndex); - this.setState({ - selectedEncounterIndex : encounterIndex - }); - }, - handleRemoveEncounter : function(encounterIndex){ - this.state.encounters.splice(encounterIndex, 1); - this.setState({ - encounters : this.state.encounters - }); - localStorage.setItem("encounters", JSON.stringify(this.state.encounters)); - }, - - renderSelectedEncounter : function(){ - var self = this; - - if(this.state.selectedEncounterIndex != null && this.state.encounters[this.state.selectedEncounterIndex]){ - var selectedEncounter = this.state.encounters[this.state.selectedEncounterIndex] - return - } - - return null; - }, - - temp : function(){ - Actions.setInc(++this.state.inc); - }, - - - render : function(){ - var self = this; - return( -
- - - - {this.renderSelectedEncounter()} - - - -
- ); - } -}); - -module.exports = CombatManager; diff --git a/client/naturalCrit/combatManager/combatManager.less b/client/naturalCrit/combatManager/combatManager.less deleted file mode 100644 index 63bb121..0000000 --- a/client/naturalCrit/combatManager/combatManager.less +++ /dev/null @@ -1,8 +0,0 @@ -.combatManager{ - - .encounterContainer{ - display: inline-block; - vertical-align: top; - } - -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/encounter/encounter.jsx b/client/naturalCrit/combatManager/encounter/encounter.jsx deleted file mode 100644 index 406a432..0000000 --- a/client/naturalCrit/combatManager/encounter/encounter.jsx +++ /dev/null @@ -1,162 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var Store = require('naturalcrit/combat.store.js'); - -var MonsterCard = require('./monsterCard/monsterCard.jsx'); - - - -var attrMod = function(attr){ - return Math.floor(attr/2) - 5; -} - -var Encounter = React.createClass({ - mixins : [Store.mixin()], - getInitialState: function() { - return { - enemies: this.createEnemies(this.props) - }; - }, - - onStoreChange : function(){ - var players = Store.getplayersText(); - - }, - - getDefaultProps: function() { - return { - name : '', - desc : '', - reward : '', - enemies : [], - players : '', - unique : {}, - - monsterManual : {} - }; - }, - - - - componentWillReceiveProps: function(nextProps) { - this.setState({ - enemies : this.createEnemies(nextProps) - }) - }, - - createEnemies : function(props){ - var self = this; - return _.indexBy(_.map(props.enemies, function(type, index){ - return self.createEnemy(props, type, index) - }), 'id') - }, - - createEnemy : function(props, type, index){ - var stats = props.unique[type] || props.monsterManual[type]; - if(!stats) return; - return _.extend({ - id : type + index, - name : type, - currentHP : stats.hp, - initiative : _.random(1,20) + attrMod(stats.attr.dex) - }, stats); - }, - - - 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 - }); - }, - - - getPlayerObjects : function(){ - return _.reduce(this.props.players.split('\n'), function(r, line){ - var parts = line.split(' '); - if(parts.length != 2) return r; - r.push({ - name : parts[0], - initiative : parts[1] * 1, - isPC : true - }) - return r; - },[]) - }, - - - renderEnemies : function(){ - var self = this; - - var sortedEnemies = _.sortBy(_.union(_.values(this.state.enemies), this.getPlayerObjects()), function(e){ - if(e && e.initiative) return -e.initiative; - return 0; - }); - - return _.map(sortedEnemies, function(enemy){ - if(enemy.isPC){ - return - } - - return - }) - }, - - render : function(){ - var self = this; - - var reward; - if(this.props.reward){ - reward =
- Rewards: {this.props.reward} -
- } - - return( -
-
-

{this.props.name}

-

{this.props.desc}

- {reward} -
- -
- {this.renderEnemies()} -
-
- ); - } -}); - -module.exports = Encounter; - - -var PlayerCard = React.createClass({ - - getDefaultProps: function() { - return { - name : '', - initiative : 0 - }; - }, - render : function(){ - return
- {_.startCase(this.props.name)} - {this.props.initiative} -
- }, - -}) \ No newline at end of file diff --git a/client/naturalCrit/combatManager/encounter/encounter.less b/client/naturalCrit/combatManager/encounter/encounter.less deleted file mode 100644 index e458274..0000000 --- a/client/naturalCrit/combatManager/encounter/encounter.less +++ /dev/null @@ -1,36 +0,0 @@ - -.mainEncounter{ - box-sizing : border-box; - overflow : hidden; - width : auto; - - &>.info{ - - margin-left: 10px; - padding-bottom : 10px; - border-bottom: 1px solid #ddd; - h1{ - font-size: 2em; - font-weight: 800; - margin-bottom: 5px; - } - p{ - margin-left: 10px; - font-size: 0.8em; - line-height: 1.5em; - max-width: 600px; - } - .reward{ - font-size: 0.8em; - font-weight: 800; - margin-top: 5px; - i{ - margin-right: 5px; - } - } - - } - - - -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.jsx b/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.jsx deleted file mode 100644 index 274cd29..0000000 --- a/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.jsx +++ /dev/null @@ -1,101 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var RollDice = require('naturalcrit/rollDice'); - -var AttackSlot = React.createClass({ - getDefaultProps: function() { - return { - name : '', - uses : null - }; - }, - - getInitialState: function() { - return { - lastRoll: {}, - usedCount : 0 - }; - }, - - rollDice : function(key, notation){ - var res = RollDice(notation); - this.state.lastRoll[key] = res - this.state.lastRoll[key + 'key'] = _.uniqueId(key); - this.setState({ - lastRoll : this.state.lastRoll - }) - }, - - renderUses : function(){ - var self = this; - if(!this.props.uses) return null; - - return _.times(this.props.uses, function(index){ - var atCount = index < self.state.usedCount; - return - }) - }, - updateCount : function(used){ - this.setState({ - usedCount : this.state.usedCount + (used ? -1 : 1) - }); - }, - - renderNotes : function(){ - var notes = _.omit(this.props, ['name', 'atk', 'dmg', 'uses', 'heal']); - return _.map(notes, function(text, key){ - return
{key + ': ' + text}
- }); - }, - - renderRolls : function(){ - var self = this; - - return _.map(['atk', 'dmg', 'heal'], function(type){ - if(!self.props[type]) return null; - return
- - - {self.state.lastRoll[type]} -
- }) - - }, - - - render : function(){ - var self = this; - return( -
-
-
{this.props.name}
-
- {this.renderUses()} -
-
- {this.renderNotes()} -
- -
-
- {this.renderRolls()} -
-
- ); - } -}); - -module.exports = AttackSlot; diff --git a/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.less b/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.less deleted file mode 100644 index 0a5ee42..0000000 --- a/client/naturalCrit/combatManager/encounter/monsterCard/attackSlot/attackSlot.less +++ /dev/null @@ -1,71 +0,0 @@ - -.attackSlot{ - //border : 1px solid black; - border-bottom: 1px solid #eee; - margin-bottom : 5px; - font-size : 0.8em; - .info, .rolls{ - display : inline-block; - vertical-align : top; - } - .info{ - width : 40%; - .name{ - font-weight : 800; - margin-bottom: 3px; - } - .notes{ - font-size : 0.8em; - } - .uses{ - cursor : pointer; - //font-size: 0.8em; - //margin-top: 3px; - } - } - .rolls{ - .roll{ - margin-bottom : 2px; - &>span{ - font-weight: 800; - .fadeInLeft(); - } - button{ - width : 70px; - margin-right : 5px; - cursor : pointer; - font-size : 0.7em; - font-weight : 800; - text-align : left; - border : none; - outline : 0; - i{ - width : 15px; - margin-right : 5px; - border-right : 1px solid white; - } - &:hover{ - //text-align: right; - } - } - &.atk{ - button{ - background-color : fade(@blue, 40%); - i { border-color: @blue} - } - } - &.dmg{ - button{ - background-color : fade(@red, 40%); - i { border-color: @red} - } - } - &.heal{ - button{ - background-color : fade(@green, 40%); - i { border-color: @green} - } - } - } - } -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.jsx b/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.jsx deleted file mode 100644 index fdded94..0000000 --- a/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.jsx +++ /dev/null @@ -1,202 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var AttackSlot = require('./attackSlot/attackSlot.jsx'); - -var MonsterCard = React.createClass({ - getDefaultProps: function() { - return { - name : '', - hp : 1, - currentHP : 1, - ac: 1, - move : 30, - attr : { - str : 8, - con : 8, - dex : 8, - int : 8, - wis : 8, - cha : 8 - }, - attacks : {}, - spells : {}, - abilities : [], - items : [], - - updateHP : function(){}, - remove : function(){}, - }; - }, - - getInitialState: function() { - return { - status : 'normal', - usedItems : [], - lastRoll : { }, - mousePos : null, - tempHP : 0 - }; - }, - - componentDidMount: function() { - window.addEventListener('mousemove', this.handleMouseDrag); - window.addEventListener('mouseup', this.handleMouseUp); - }, - - handleMouseDown : function(e){ - this.setState({ - mousePos : { - x : e.pageX, - y : e.pageY, - } - }); - e.stopPropagation() - e.preventDefault() - }, - handleMouseUp : function(e){ - if(!this.state.mousePos) return; - - - this.props.updateHP(this.props.currentHP + this.state.tempHP); - this.setState({ - mousePos : null, - tempHP : 0 - }); - }, - - handleMouseDrag : function(e){ - if (!this.state.mousePos) return; - var distance = Math.sqrt(Math.pow(e.pageX - this.state.mousePos.x, 2) + Math.pow(e.pageY - this.state.mousePos.y, 2)); - var mult = (e.pageY > this.state.mousePos.y ? -1 : 1) - - this.setState({ - tempHP : Math.floor(distance * mult/25) - }) - }, - - addUsed : function(item, shouldRemove){ - if(!shouldRemove) this.state.usedItems.push(item); - if(shouldRemove) this.state.usedItems.splice(this.state.usedItems.indexOf(item), 1); - - this.setState({ - usedItems : this.state.usedItems - }); - }, - - - renderHPBox : function(){ - var self = this; - - var tempHP - if(this.state.tempHP){ - var sign = (this.state.tempHP > 0 ? '+' : ''); - tempHP = {['(',sign,this.state.tempHP,')'].join('')} - } - - return
-
- {tempHP} {this.props.currentHP} -
- {self.renderStats()} -
- }, - - renderStats : function(){ - var stats = { - 'fa fa-shield' : this.props.ac, - //'fa fa-hourglass-2' : this.props.initiative, - } - return _.map(stats, function(val, icon){ - return
{val}
- }) - }, - - renderAttacks : function(){ - var self = this; - return _.map(this.props.attacks, function(attack, name){ - return - }) - }, - - renderSpells : function(){ - var self = this; - return _.map(this.props.spells, function(spell, name){ - return - }) - }, - - renderAbilities : function(){ - return _.map(this.props.abilities, function(text, name){ - return
- {name}: {text} -
- }); - }, - - renderItems : function(){ - var self = this; - var usedItems = this.state.usedItems.slice(0); - return _.map(this.props.items, function(item, index){ - var used = _.contains(usedItems, item); - if(used){ - usedItems.splice(usedItems.indexOf(item), 1); - } - return - {item} - - }); - }, - - render : function(){ - var self = this; - var condition = '' - if(this.props.currentHP + this.state.tempHP > this.props.hp) condition='overhealed'; - if(this.props.currentHP + this.state.tempHP <= this.props.hp * 0.5) condition='hurt'; - if(this.props.currentHP + this.state.tempHP <= this.props.hp * 0.2) condition='last_legs'; - if(this.props.currentHP + this.state.tempHP <= 0) condition='dead'; - - - return( -
-
-
- - - {this.renderHPBox()} -
- {this.props.name} -
- -
- {this.renderAttacks()} -
-
- {this.renderSpells()} -
- -
- {this.renderAbilities()} -
-
- - {this.renderItems()} -
-
- ); - } -}); - -module.exports = MonsterCard; - -/* - - -{this.props.initiative} - - -*/ \ No newline at end of file diff --git a/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.less b/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.less deleted file mode 100644 index fd82263..0000000 --- a/client/naturalCrit/combatManager/encounter/monsterCard/monsterCard.less +++ /dev/null @@ -1,129 +0,0 @@ - -@marginSize : 10px; -.playerCard{ - display : inline-block; - box-sizing : border-box; - margin : @marginSize; - padding : 10px; - background-color : white; - border : 1px solid #bbb; - .name{ - margin-right : 20px; - } - .initiative{ - font-size : 0.8em; - i{ - font-size : 0.8em; - } - } - &:nth-child(5n + 1){ background-color: fade(@blue, 25%); } - &:nth-child(5n + 2){ background-color: fade(@purple, 25%); } - &:nth-child(5n + 3){ background-color: fade(@steel, 25%); } - &:nth-child(5n + 4){ background-color: fade(@green, 25%); } - &:nth-child(5n + 5){ background-color: fade(@orange, 25%); } -} -.monsterCard{ - position : relative; - display : inline-block; - vertical-align : top; - box-sizing : border-box; - width : 220px; - margin : @marginSize; - padding : 10px; - background-color : white; - border : 1px solid #bbb; - .healthbar{ - position : absolute; - top : 0px; - left : 0px; - z-index : 50; - height : 3px; - max-width : 100%; - background-color : @green; - } - .overhealbar{ - position : absolute; - top : 0px; - left : 0px; - z-index : 100; - height : 3px; - max-width : 100%; - background-color : @blueLight; - } - &.hurt{ - .healthbar{ - background-color : orange; - } - } - &.last_legs{ - background-color : lighten(@red, 49%); - .healthbar{ - background-color : red; - } - } - &.dead{ - opacity : 0.3; - } - &>.info{ - margin-bottom : 10px; - .name{ - margin-right : 10px; - font-size : 1.5em; - } - .stat{ - margin-right : 5px; - font-size : 0.7em; - i{ - font-size : 0.7em; - } - } - } - .hpBox{ - .noselect(); - position : absolute; - top : 5px; - right : 5px; - cursor : pointer; - text-align : right; - .currentHP{ - font-size : 2em; - font-weight : 800; - line-height : 0.8em; - .tempHP{ - vertical-align : top; - font-size : 0.4em; - line-height : 0.8em; - } - } - .stat{ - font-size : 0.8em; - } - .hpText{ - font-size : 0.6em; - font-weight : 800; - } - } - .abilitiesContainer{ - margin-top : 10px; - .ability{ - font-size: 0.7em; - .name{ - font-weight: 800; - } - } - } - .itemContainer{ - margin-top : 10px; - i{ - font-size : 0.7em; - } - span{ - margin-right : 5px; - cursor : pointer; - font-size : 0.7em; - &.used{ - text-decoration : line-through; - } - } - } -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/sidebar/CODE Bold.otf b/client/naturalCrit/combatManager/sidebar/CODE Bold.otf deleted file mode 100644 index 50dd77d..0000000 Binary files a/client/naturalCrit/combatManager/sidebar/CODE Bold.otf and /dev/null differ diff --git a/client/naturalCrit/combatManager/sidebar/CODE Light.otf b/client/naturalCrit/combatManager/sidebar/CODE Light.otf deleted file mode 100644 index 1ff9d87..0000000 Binary files a/client/naturalCrit/combatManager/sidebar/CODE Light.otf and /dev/null differ diff --git a/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.jsx b/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.jsx deleted file mode 100644 index c5773f7..0000000 --- a/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.jsx +++ /dev/null @@ -1,59 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var RollDice = require('naturalcrit/rollDice'); - -var DmDice = React.createClass({ - - getInitialState: function() { - return { - lastRoll:{ }, - diceNotation : { - a : "1d20", - b : "6d6 + 3", - c : "1d20 - 1" - } - - }; - }, - - roll : function(id){ - this.state.lastRoll[id] = RollDice(this.state.diceNotation[id]); - this.setState({ - lastRoll : this.state.lastRoll - }); - }, - handleChange : function(id, e){ - this.state.diceNotation[id] = e.target.value; - this.setState({ - diceNotation : this.state.diceNotation - }); - - e.stopPropagation(); - e.preventDefault(); - }, - - renderRolls : function(){ - var self = this; - return _.map(['a', 'b', 'c'], function(id){ - return
- - - {self.state.lastRoll[id]} -
- }) - }, - - render : function(){ - var self = this; - return( -
-

DM Dice

- {this.renderRolls()} -
- ); - } -}); - -module.exports = DmDice; diff --git a/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.less b/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.less deleted file mode 100644 index e3428c5..0000000 --- a/client/naturalCrit/combatManager/sidebar/dmDice/dmDice.less +++ /dev/null @@ -1,32 +0,0 @@ -.dmDice{ - - h3{ - color : white; - background-color: @teal; - } - - .roll{ - cursor: pointer; - .noselect(); - input[type="text"]{ - margin-left: 10px; - margin-bottom: 6px; - margin-top: 6px; - width : 60px; - font-family: monospace; - padding : 5px; - } - i.fa-random{ - font-size: 0.8em; - margin: 0 10px; - } - span{ - font-weight: 800; - .fadeInLeft(); - } - - &:hover{ - background-color: fade(@teal, 20%); - } - } -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/sidebar/encounters/encounters.jsx b/client/naturalCrit/combatManager/sidebar/encounters/encounters.jsx deleted file mode 100644 index 5bcf839..0000000 --- a/client/naturalCrit/combatManager/sidebar/encounters/encounters.jsx +++ /dev/null @@ -1,100 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var JSONFileEditor = require('naturalcrit/jsonFileEditor/jsonFileEditor.jsx'); - -//var GetRandomEncounter = require('naturalcrit/randomEncounter.js'); - -var Store = require('naturalcrit/combat.store.js'); -var Actions = require('naturalcrit/combat.actions.js'); - - -var Encounters = React.createClass({ - mixins : [Store.mixin()], - onStoreChange : function(){ - this.setState({ - encounters : Store.getEncounters(), - selectedEncounter : Store.getSelectedEncounterIndex() - }); - }, - getInitialState: function() { - return { - encounters : Store.getEncounters(), - selectedEncounter : Store.getSelectedEncounterIndex() - }; - }, - /* - getDefaultProps: function() { - return { - encounters : [], - selectedEncounter : 0, - - onJSONChange : function(encounterIndex, json){}, - onSelectEncounter : function(encounterIndex){}, - onRemoveEncounter : function(encounterIndex){} - }; - }, - */ - handleJSONChange : function(encounterIndex, json){ - //this.props.onJSONChange(encounterIndex, json); - Actions.updateEncounter(encounterIndex, json); - }, - handleSelectEncounter : function(encounterIndex){ - //this.props.onSelectEncounter(encounterIndex); - Actions.selectEncounter(encounterIndex); - }, - handleRemoveEncounter : function(encounterIndex){ - //this.props.onRemoveEncounter(encounterIndex); - Actions.removeEncounter(encounterIndex); - }, - addRandomEncounter : function(){ - Actions.addEncounter(); - }, - - - renderEncounters : function(){ - var self = this; - return _.map(this.state.encounters, function(encounter, index){ - - var isSelected = self.state.selectedEncounter == index; - return
- - - - - - - -
- }) - }, - - render : function(){ - var self = this; - return( -
-

- Encounters - -

- {this.renderEncounters()} - -
- -
-
- ); - } -}); - -module.exports = Encounters; diff --git a/client/naturalCrit/combatManager/sidebar/encounters/encounters.less b/client/naturalCrit/combatManager/sidebar/encounters/encounters.less deleted file mode 100644 index 371ec57..0000000 --- a/client/naturalCrit/combatManager/sidebar/encounters/encounters.less +++ /dev/null @@ -1,53 +0,0 @@ - -.encounters{ - margin-bottom : 20px; - h3{ - background-color : @red; - color : white; - button{ - .animate(color); - float : right; - cursor : pointer; - background-color : transparent; - border : none; - outline : none; - &:hover{ - color : white; - } - } - } - .encounter{ - position : relative; - padding-left : 15px; - border-left : 0px solid @teal; - .animateAll(); - &:hover{ - i.remove{ - opacity : 1; - } - } - i.remove{ - .animate(opacity); - position : absolute; - top : 3px; - right : 3px; - cursor : pointer; - opacity : 0; - font-size : 0.6em; - color : #333; - &:hover{ - color : @red; - } - } - i.select{ - cursor : pointer; - } - .jsonFileEditor{ - display : inline-block; - } - &.selected{ - //background-color : fade(@green, 30%); - border-left : 8px solid @teal; - } - } -} \ No newline at end of file diff --git a/client/naturalCrit/combatManager/sidebar/sidebar.jsx b/client/naturalCrit/combatManager/sidebar/sidebar.jsx deleted file mode 100644 index c5daa37..0000000 --- a/client/naturalCrit/combatManager/sidebar/sidebar.jsx +++ /dev/null @@ -1,76 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var JSONFileEditor = require('naturalcrit/jsonFileEditor/jsonFileEditor.jsx'); - -var DMDice = require('./dmDice/dmDice.jsx'); -var Encounters = require('./encounters/encounters.jsx'); - -var Store = require('naturalcrit/combat.store.js'); -var Actions = require('naturalcrit/combat.actions.js'); - - -var Sidebar = React.createClass({ - mixins : [Store.mixin()], - - getInitialState: function() { - return { - hide : false, - - monsterManual : Store.getMonsterManual(), - players : Store.getPlayersText() - }; - }, - - onStoreChange : function(){ - this.setState({ - players : Store.getPlayersText(), - monsterManual : Store.getMonsterManual() - }) - }, - - handleLogoClick : function(){ - this.setState({ - hide : !this.state.hide - }) - }, - handleMonsterManualChange : function(json){ - Actions.updateMonsterManual(json); - }, - handlePlayerChange : function(e){ - Actions.updatePlayers(e.target.value); - }, - - render : function(){ - var self = this; - return( -
-
- - -
NaturalCrit
- Combat Manager -
-
-
-
- -
- -
-

Players

-