<!DOCTYPE html>
<html ng-app="nx">
<head>
<link data-require="bootstrap-css@*" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<link data-require="font-awesome@*" data-semver="4.3.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
<script data-require="angular.js@1.4.0-rc.2" data-semver="1.4.0-rc.2" src="https://code.angularjs.org/1.4.0-rc.2/angular.js"></script>
<script data-require="ui-bootstrap@*" data-semver="0.13.3" src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.1/ui-bootstrap.min.js"></script>
<script data-require="chance@*" data-semver="0.5.3" src="http://chancejs.com/chance.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="AppController as vc">
<div class="container">
<form name="vc.form" ng-submit="vc.calcCombat()" class="form-horizontal">
<section>
<table class="table">
<thead>
<tr>
<th><button type="button" class="btn btn-warning btn-xs" ng-click="vc.reset()">
<span class="fa fa-refresh"></span>
</button></th>
<th>num ships</th>
<th>attack points</th>
<th>defense points</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<h5>Attacking</h5>
</td>
<td>
<input ng-model="vc.af.num" type="number" min="0" class="form-control" placeholder="#" />
</td>
<td>
<input ng-model="vc.af.ap" type="number" min="1" class="form-control" placeholder="ap" />
</td>
<td>
<input ng-model="vc.af.dp" type="number" min="1" class="form-control" placeholder="dp" ng-show="vc.selFunc.dp"/>
<span ng-hide="vc.selFunc.dp">n/a</span>
</td>
</tr>
<tr>
<td>
<h5>Defending</h5>
</td>
<td>
<input ng-model="vc.df.num" type="number" min="0" class="form-control" placeholder="#" />
</td>
<td>
<input ng-model="vc.df.ap" type="number" min="1" class="form-control" placeholder="ap" />
</td>
<td>
<input ng-model="vc.df.dp" type="number" min="1" class="form-control" placeholder="dp" ng-show="vc.selFunc.dp" />
<span ng-hide="vc.selFunc.dp">n/a</span>
</td>
</tr>
<tr>
<th colspan="3">
<label for="df-strike">Formula: {{vc.selFunc.name}}</label>
</th>
<th>
<div class="btn-group" dropdown="">
<button id="split-button" type="button" class="btn btn-primary" ng-click="vc.calcCombat()">Calculate</button>
<button type="button" class="btn btn-info" dropdown-toggle="">
<span class="caret"></span>
<span class="sr-only">Split button!</span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="split-button">
<li role="menuitem" ng-repeat="li in vc.funcs">
<a ng-click="vc.selFunc = li">{{li.name}}</a>
</li>
</ul>
</div>
</th>
</tr>
</tbody>
</table>
</section>
</form>
<pre>{{vc.log}}</pre>
</div>
</body>
</html>
/* Styles go here */
#
calcCombat_np = (a, b)->
while a.num > 0 and b.num > 0
a.num -= b.ap + 1
if a.num > 0
b.num -= a.ap
check a, b
@report a, b
[a, b]
calcCombat_fm = (a, b)->
while a.num > 0 and b.num > 0
Δa = b.ap * b.num
Δb = a.ap * a.num
a.num -= Δa
b.num -= Δb
check a, b
@report a, b
[a, b]
calcCombat_scm = (a, b)->
while a.num > 0 and b.num > 0
[Δa, Δb] = calcSalvo_scm a.num, a.ap, a.dp, b.num, b.ap, b.dp
a.num += Δa
b.num += Δb
check a, b
@report a, b
calcSalvo_scm = (A, α, y, B, β, z)->
ΔA = -(β * B - y * A)
ΔB = -(α * A - z * B)
# begin mod
ΔA *= -1 if ΔA > 0
ΔB *= -1 if ΔB > 0
# end mod
[ΔA, ΔB]
check = (a, b)->
a.num = 0 if a.num < 0
b.num = 0 if b.num < 0
angular.module 'nx', ['ui.bootstrap']
.controller 'AppController', class AppController
funcs: [
{name:'Triton', func:calcCombat_np, dp:false}
{name:'Force Multiplier', func:calcCombat_fm, dp:false}
{name:'Salvo Model', func:calcCombat_scm, dp:true}
]
report: (a, b)->
s = "Fleet A has #{a.num} ships left : Fleet B has #{b.num} ships left\n"
console.log s
@log += s
reset: ->
@log = ''
@af = {num: 0, ap: 1, dp: 1 }
@df = {num: 0, ap: 1, dp: 1 }
constructor: ->
@reset()
@selFunc = @funcs[0]
calcCombat: ->
@log = ''
@selFunc.func.call @, @af, @df