<!DOCTYPE html>
<html ng-app="LedMatrixGenerator">
<head>
<meta charset="utf-8" />
<title>LED Matrix Sprite Generator</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.10/angular.min.js" data-semver="1.2.10"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MatrixController">
<div class="container">
<div class="row">
<div class="col-lg-12">
<h1>LED Matrix Sprite Generator <small>Created By swiggles</small></h1>
<p>Inspired by Miro Božík <a target="_blank" href="http://embed.plnkr.co/3VUsekP3jC5xwSIQDVHx/">http://embed.plnkr.co/3VUsekP3jC5xwSIQDVHx/</a></p>
<!-- Generated Code -->
<div sprite-builder></div>
</div>
</div>
</div>
</body>
</html>
let app = angular.module('LedMatrixGenerator', []);
let string = `string!`;
console.log(string);
app.controller('MatrixController', function($scope) {
$scope.matrixConfig = {
rows: 8,
cols: 8,
}
});
app.directive('testBuilder', function() {
return {
templateUrl: 'test-tpl.html',
}
});
app.directive('spriteBuilder', function(spriteService){
return {
controller: function($scope) {
$scope.codeArray = [];
$scope.codeString = '';
$scope.spriteName = "SPRITE";
$scope.matrix = spriteService.buildMatrix($scope.matrixConfig.cols, $scope.matrixConfig.rows);
$scope.updateMatrix = function() {
$scope.matrix = spriteService.buildMatrix(
$scope.matrixConfig.rows,
$scope.matrixConfig.cols
);
}
},
link: function(scope, element, attrs, ctrl) {
scope.updateMatrix = function() {
scope.matrix = spriteService.buildMatrix(
scope.matrixConfig.rows,
scope.matrixConfig.cols
);
};
scope.setVal = function(btn) {
if (btn.value == '0') {
btn.value = '1';
} else {
btn.value = '0';
}
};
scope.reset = function(){
spriteService.resetMatrix(scope.matrix);
};
// Add a code to the code array
scope.addCode = function(){
var codeOutput = spriteService.generateCode(scope.matrix, scope.spriteName);
scope.codeArray.push({
'name': scope.spriteName,
'code': codeOutput
});
scope.updateCodeString();
}
// Remove a specific code from the code array
scope.removeCode = function(codeToRemove) {
var index = scope.codeArray.indexOf(codeToRemove);
scope.codeArray.splice(index, 1);
scope.updateCodeString();
};
// Update codestring by concatonating all codes in codearray
scope.updateCodeString = function() {
var array = scope.codeArray;
var codeString = '';
angular.forEach(array, function(val, key) {
codeString += val.code + '\n';
});
scope.codeString = codeString;
};
// scope.$watch('spriteName', function(newValue, oldValue) {
// if (newValue != oldValue) {
// scope.generateCode();
// }
// }, true);
},
templateUrl: 'sprite-builder-tpl.html'
};
});
app.service('spriteService', function(){
var LedButton = function() {
return {
value: '0',
column: 0,
row: 0
};
};
var service = {};
service.buildMatrix = function(rows, cols){
var ledMatrixRows = [];
for (var rowIndex = 0; rowIndex < rows; rowIndex++) {
var ledMatrixRow = [];
for (var columnIndex = 0; columnIndex < cols; columnIndex++) {
var lb = new LedButton();
lb.column = columnIndex;
lb.row = rowIndex;
ledMatrixRow.push(lb);
}
ledMatrixRows.push(ledMatrixRow);
}
return ledMatrixRows;
};
service.generateCode = function(matrix, spriteName){
var code = "byte " + spriteName + "[] = {";
angular.forEach(matrix, function(val, key) {
var codePart = "B";
angular.forEach(val, function(col, key) {
codePart += col.value;
});
code += codePart;
if(key!=(val.length-1)){
code += ",";
}
});
code += "};";
return code;
};
service.resetMatrix = function(matrix){
angular.forEach(matrix, function(val, key) {
angular.forEach(val, function(col, key) {
col.value = '0';
});
});
};
return service;
});
/* Put your css in here */
.btn, .btn:hover {
border-radius: 0;
}
.code-list {
list-style: none;
padding: 0;
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
font-size: 90%;
}
.code-list .btn-danger {
padding-bottom: 2px;
text-decoration: none;
position: absolute;
left: 0;
}
.code-list li {
padding-left: 10px;
padding-bottom: 1px;
}
.help-inline.small {
font-style: oblique;
color: #404040;
}
<p>
<form class="form-inline">
<!-- Rows -->
<div class="form-group">
<label for="rows">Rows</label>
<input class="form-control" ng-model="matrixConfig.rows" type="number" ng-pattern="/^(\d*)$/" required />
</div>
<!-- Columns -->
<div class="form-group">
<label for="cols">Cols</label>
<input class="form-control" ng-model="matrixConfig.cols" type="number" ng-pattern="/^(\d*)$/" required />
</div>
<div class="form-group">
<button ng-click="updateMatrix()" class="btn btn-danger">Update Matrix</button>
</div>
</form>
</p>
<p>
<form name="spriteBuilder">
<div class="form-group">
<label class="control-label">LED Sprite</label>
<span class="help-inline small">Click to draw the pattern for your sprite</span>
<table>
<tr ng-repeat="row in matrix">
<td ng-repeat="col in row"><button class="btn btn-default" ng-class="{'btn-danger': col.value=='1'}" ng-click="setVal(col)">{{col.value}}</button></td>
</tr>
</table>
</div>
<div class="form-group">
<button ng-click="reset()" class="btn btn-warning">Reset</button>
</div>
</form>
</p>
<p>
<form class="form-inline">
<div class="form-group">
<label for="spriteName" class="control-label">Sprite name</label>
<input type="text" id="spriteName" class="form-control" ng-model="spriteName" />
</div>
<div class="form-group">
<button ng-click="addCode()" class="btn btn-success">+ Add</button>
</div>
</form>
</p>
<p>
<form>
<div class="form-group">
<label class="control-label">Saved sprite list</label>
<span class="help-inline small">Click the red X to remove a sprite</span>
</div>
<ul class="code-list">
<li ng-repeat="codeItem in codeArray">
<a class="btn-danger" href="" ng-click="removeCode(codeItem)">[X]</a>
{{codeItem.code}}
</li>
</ul>
<div class="form-group">
<label for="code">Sprite code</label>
<span class="help-inline small">Copy and paste the code from here</span>
<textarea ng-model="codeString" id="code" class="form-control textarea" rows="10">{{code}}</textarea>
</div>
</form>
</p>