mirror of
https://github.com/rileyjshaw/terra.git
synced 2024-11-21 04:54:23 +00:00
Initialize with files from goal-009
This commit is contained in:
parent
5393155c01
commit
e261f14635
7319
dist/all.js
vendored
Normal file
7319
dist/all.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2
dist/all.min.js
vendored
Normal file
2
dist/all.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/all.min.js.map
vendored
Normal file
1
dist/all.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/main.css
vendored
Normal file
1
dist/main.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
body{text-align:center}p{display:inline-block}span{float:left;font-family:monospace;white-space:pre}
|
56
gulpfile.js
Normal file
56
gulpfile.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
var
|
||||||
|
gulp = require('gulp'),
|
||||||
|
jshint = require('gulp-jshint'),
|
||||||
|
mocha = require('gulp-mocha'),
|
||||||
|
stripDebug = require('gulp-strip-debug'),
|
||||||
|
concat = require('gulp-concat'),
|
||||||
|
uglify = require('gulp-uglify'),
|
||||||
|
rename = require('gulp-rename');
|
||||||
|
sass = require('gulp-ruby-sass'),
|
||||||
|
autoprefixer = require('gulp-autoprefixer'),
|
||||||
|
minifyCSS = require('gulp-minify-css');
|
||||||
|
|
||||||
|
var paths = {
|
||||||
|
src: {
|
||||||
|
firstScripts: [ 'node_modules/lodash/lodash.js', 'scripts/terra.js', 'scripts/terra.util.js' ],
|
||||||
|
scripts: 'scripts/*.js',
|
||||||
|
tests: 'tests/*.js',
|
||||||
|
stylesheets: 'stylesheets/*.sass'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
gulp.task('lint', function() {
|
||||||
|
return gulp.src(paths.src.scripts)
|
||||||
|
.pipe(jshint())
|
||||||
|
.pipe(jshint.reporter('default'));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('test', function() {
|
||||||
|
return gulp.src(paths.src.tests)
|
||||||
|
.pipe( mocha( { reporter: 'spec' } ) )
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('scripts', function() {
|
||||||
|
return gulp.src( [ paths.src.firstScripts[0], paths.src.firstScripts[1], paths.src.firstScripts[2], paths.src.scripts ] )
|
||||||
|
.pipe(stripDebug())
|
||||||
|
.pipe(concat('all.js'))
|
||||||
|
.pipe(gulp.dest('dist'))
|
||||||
|
.pipe(rename('all.min.js'))
|
||||||
|
.pipe(uglify( { outSourceMap: true } ))
|
||||||
|
.pipe(gulp.dest('dist'));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('sass', function () {
|
||||||
|
return gulp.src(paths.src.stylesheets)
|
||||||
|
.pipe(sass())
|
||||||
|
.pipe(autoprefixer())
|
||||||
|
.pipe(minifyCSS())
|
||||||
|
.pipe(gulp.dest('dist'))
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('watch', function() {
|
||||||
|
gulp.watch(paths.src.scripts, ['lint', 'scripts']);
|
||||||
|
gulp.watch(paths.src.stylesheets, ['sass']);
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task( 'default', [ 'lint', 'scripts', 'sass', 'watch' ] );
|
12
index.html
Normal file
12
index.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Awesome Terrarium!</title>
|
||||||
|
<link rel="stylesheet" href="dist/main.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p id='terra'>Life</p>
|
||||||
|
<script src="dist/all.min.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
32
package.json
Normal file
32
package.json
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "terra",
|
||||||
|
"version": "0.0.2",
|
||||||
|
"description": "A JavaScript framework for generating, analysing, and displaying simple biological interactions in an abstract, digital terrarium.",
|
||||||
|
"main": "scripts/terra.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"terrarium",
|
||||||
|
"simulator",
|
||||||
|
"cellular",
|
||||||
|
"automata"
|
||||||
|
],
|
||||||
|
"author": "rileyjshaw",
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"devDependencies": {
|
||||||
|
"gulp": "~3.5.2",
|
||||||
|
"gulp-rename": "~1.1.0",
|
||||||
|
"gulp-autoprefixer": "0.0.6",
|
||||||
|
"gulp-uglify": "~0.2.1",
|
||||||
|
"gulp-minify-css": "~0.3.0",
|
||||||
|
"gulp-strip-debug": "~0.1.1",
|
||||||
|
"gulp-jshint": "~1.4.2",
|
||||||
|
"gulp-concat": "~2.1.7",
|
||||||
|
"gulp-ruby-sass": "~0.3.1",
|
||||||
|
"gulp-mocha": "~0.4.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"lodash": "~2.4.1"
|
||||||
|
}
|
||||||
|
}
|
37
scripts/terra.create.js
Normal file
37
scripts/terra.create.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// consider changing name, adding ability to pause, reset, etc.
|
||||||
|
/*
|
||||||
|
terra.create = function ( selector, map, fps, steps ) {
|
||||||
|
|
||||||
|
// Imports...
|
||||||
|
Terrarium = terra.util.Terrarium;
|
||||||
|
|
||||||
|
if ( typeof selector !== 'string' ) {
|
||||||
|
throw new Error( 'You need to pass an element selector (string) as the first argument of terra.create (received "' + selector + '")');
|
||||||
|
}
|
||||||
|
|
||||||
|
map = map || terra.maps.mSmall( [ '*', 'C', ' ', '#' ] );
|
||||||
|
fps = fps || 60;
|
||||||
|
steps = steps || 1;
|
||||||
|
|
||||||
|
var startTick = function ( fn ) {
|
||||||
|
var tick = function () {
|
||||||
|
setTimeout( function () {
|
||||||
|
fn();
|
||||||
|
requestAnimationFrame( tick );
|
||||||
|
}, 1000 / fps );
|
||||||
|
};
|
||||||
|
|
||||||
|
requestAnimationFrame( tick );
|
||||||
|
};
|
||||||
|
|
||||||
|
var level = new Terrarium( map, selector );
|
||||||
|
|
||||||
|
startTick( function () {
|
||||||
|
for ( var i = steps; i; i-- ) {
|
||||||
|
level.step();
|
||||||
|
}
|
||||||
|
level.toDom();
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
*/
|
13
scripts/terra.creatures.js
Normal file
13
scripts/terra.creatures.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
;( function ( exports ) {
|
||||||
|
|
||||||
|
var creature = function ( config, my ) {
|
||||||
|
var
|
||||||
|
color = [ 230, 180, 25 ],
|
||||||
|
instance = {},
|
||||||
|
character = config.character,
|
||||||
|
energy = config.energy || 20,
|
||||||
|
speed = config.speed || 1;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
})( terra.creatures = terra.creatures || {} );
|
10
scripts/terra.js
Normal file
10
scripts/terra.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
;( function () {
|
||||||
|
if ( typeof terra !== 'undefined' &&
|
||||||
|
terra !== document.getElementsByName( 'terra' ) &&
|
||||||
|
terra !== document.getElementById( 'terra' )
|
||||||
|
) {
|
||||||
|
throw 'Variable "terra" already exists, that\'s a problem.';
|
||||||
|
} else {
|
||||||
|
terra = {}; // global
|
||||||
|
}
|
||||||
|
} )();
|
51
scripts/terra.maps.js
Normal file
51
scripts/terra.maps.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*;( function ( exports ) {
|
||||||
|
|
||||||
|
// Imports...
|
||||||
|
randomElement = terra.util.randomElement;
|
||||||
|
|
||||||
|
var mGameOfLife =
|
||||||
|
[ '############################',
|
||||||
|
'# L #',
|
||||||
|
'# L #',
|
||||||
|
'# L #',
|
||||||
|
'# #',
|
||||||
|
'# L #',
|
||||||
|
'# L #',
|
||||||
|
'# LLL #',
|
||||||
|
'# L #',
|
||||||
|
'# L #',
|
||||||
|
'# #',
|
||||||
|
'############################' ];
|
||||||
|
|
||||||
|
var mapGen = function ( height, width, characters ) {
|
||||||
|
var level = new Array('');
|
||||||
|
for ( var col = height - 1; col >= 0; col--) {
|
||||||
|
for ( var row = width - 1; row >= 0; row--) {
|
||||||
|
if ( row == width - 1 ) {
|
||||||
|
character = '';
|
||||||
|
level[ col ] = '#';
|
||||||
|
} else if ( !col || !row || col == height - 1 ) {
|
||||||
|
character = '#';
|
||||||
|
} else {
|
||||||
|
character = randomElement( characters );
|
||||||
|
}
|
||||||
|
level[ col ] += character;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return level;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.mGameOfLife = mGameOfLife;
|
||||||
|
exports.mSmall = function ( characters ) {
|
||||||
|
return mapGen( 24, 48, characters );
|
||||||
|
};
|
||||||
|
exports.mMedium = function ( characters ) {
|
||||||
|
return mapGen( 48, 96, characters );
|
||||||
|
};
|
||||||
|
exports.mBig = function ( characters ) {
|
||||||
|
return mapGen( 56, 144, characters );
|
||||||
|
};
|
||||||
|
exports.mapGen = mapGen;
|
||||||
|
|
||||||
|
})( terra.maps = terra.maps || {} );
|
||||||
|
*/
|
25
scripts/terra.util.js
Normal file
25
scripts/terra.util.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Utility and helper functions
|
||||||
|
;( function ( exports ) {
|
||||||
|
|
||||||
|
var arrayOfArrays = function ( height, width ) {
|
||||||
|
var instance;
|
||||||
|
|
||||||
|
if ( typeof height !== 'number' || typeof width !== 'number' ) {
|
||||||
|
throw 'Input error: arrayOfArrays() requires two numbers as inputs';
|
||||||
|
}
|
||||||
|
|
||||||
|
instance = new Array( height );
|
||||||
|
while( width-- ) {
|
||||||
|
instance[ width ] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
var grid = new arrayOfArrays(500, 800);
|
||||||
|
|
||||||
|
// grid.map
|
||||||
|
|
||||||
|
exports.grid = grid;
|
||||||
|
|
||||||
|
})( terra.util = terra.util || {} );
|
10
stylesheets/main.sass
Normal file
10
stylesheets/main.sass
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
body
|
||||||
|
text-align: center
|
||||||
|
|
||||||
|
p
|
||||||
|
display: inline-block
|
||||||
|
|
||||||
|
span
|
||||||
|
float: left
|
||||||
|
font-family: monospace
|
||||||
|
white-space: pre
|
9
tests/test.js
Normal file
9
tests/test.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
var assert = require("assert")
|
||||||
|
describe('Array', function(){
|
||||||
|
describe('#indexOf()', function(){
|
||||||
|
it('should return -1 when the value is not present', function(){
|
||||||
|
assert.equal(-1, [1,2,3].indexOf(5));
|
||||||
|
assert.equal(-1, [1,2,3].indexOf(0));
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user