xxxxxxxxxx
197
//defaultCameraMotion=true;
var enemies = newGroup();
var near = newGroup();
var stars = newGroup();
var grid = newGroup();
var spawners = newGroup();
// Creates a group of objects
var smdl;
var song;
var ani;
var player;
defaultCameraMotion = false;
function loadscene() {
smdl = createModel('assets/star.obj');
song = createSound('assets/sound.mp3');
// Loads the models.
}
function setscene() {
camra.setPosition(0,-30,50);
camra.tilt(20);
newLight(1000, 1000, 1000, 100, 50, 0);
player = newShape("box",0,0,0,10);
player.shape.stroke = false;
player.shape.material = "specular";
player.shape.materialData = "rgba(255,0,0,0.9)";
newGrid(0,0);
newGrid(1,0);
newGrid(0,1);
newGrid(-1,0);
newGrid(0,-1);
newGrid(1,1);
newGrid(-1,1);
newGrid(1,-1);
newGrid(-1,-1);
setSkyboxTexture('assets/sky.png');
for (var i = 0; i < 1200; i++) {
update();
}
}
function newGrid(x,y) {
var g = newShape("box",x*15,y*15,0,15);
g.shape.depth = 0;
g.shape.stroke = rgb(0,0,0,0.02);
g.shape.fill=false;
grid.add(g);
}
var frames = -10;
var mspeed = 0.5;
var loss = false;
var num_stars = 0;
var total_stars = 0;
if (getStore("stars") != undefined) {
total_stars = getStore("stars");
}
var colorArray = ["red","orange","yellow","lime","cyan","magenta"];
var colors = {"red":rgb(255,0,0,0.9),"orange":rgb(255,165,0,0.9),"yellow":rgb(255,255,0,0.9),"lime":rgb(50,205,50,0.9),"cyan":rgb(0,255,255,0.9),"magenta":rgb(255,0,255,0.9)};
var notes = {"red":72,"orange":68,"yellow":62,"lime":78,"cyan":64,"magenta":69};
function draw3D() {
if (loss == true) {
fill(rgb(0,0,0,0.5));
rect(-wWidth/2,-wHeight/2,wWidth,wHeight);
fill(255);
textAlign(CENTER);
drawingContext.shadowBlur=10;
for (var i = 0; i < 5; i++) {
drawingContext.shadowColor="red";
textSize(60);
text("Game Over",0,-30);
textSize(20);
drawingContext.shadowColor="lime";
text("Stars Collected: "+num_stars,0,0);
drawingContext.shadowColor="cyan";
text("Total Stars Collected: "+total_stars,0,30);
}
drawingContext.shadowBlur=0.01;
drawingContext.shadowColor="grey";
if (keyWentDown(13)) {
loss = false;
player.recover();
player.x = 0;
player.y = 0;
enemies.destroyEach();
near.destroyEach();
stars.destroyEach();
frames = -10;
num_stars = 0;
mspeed = 0.5;
for (var i = 0; i < 1200; i++) {
update();
}
}
} else {
update();
keybind();
}
}
function update() {
frames++;
if (frames % round(50/mspeed) == 0) {
mspeed+=0.025;
var rand = randomNumber(0,grid.length-1);
var s = grid.get(rand);
var enemy;
if (s != undefined) {
var rlength = randomNumber(1,5)*10;
enemy = newShape("box",s.x,s.y,s.z-1000,10);
enemy.shape.depth = rlength;
enemy.collider.depth = rlength;
enemy.shape.stroke = false;
enemy.shape.material = "emissive";
var strRand = colorArray[randomNumber(0,colorArray.length-1)]
enemy.strRand = strRand
enemy.shape.materialData = colors[strRand];
enemies.add(enemy);
}
var rng = randomNumber(1,10);
if (rng == 1) {
var rand = randomNumber(0,grid.length-1);
var s = grid.get(rand);
if (s != undefined) {
var star = newShape("model",s.x,s.y,s.z-1000,10);
while (0 > -1) {
if (star.intersect(enemy)) {
rand = randomNumber(0,grid.length-1);
s = grid.get(rand);
star.x = s.x;
star.y = s.y;
} else {break;}
}
star.shape.model = smdl;
star.shape.radius = 1;
star.shape.rotx = -90;
star.shape.stroke = false;
star.shape.material = "specular";
star.shape.materialData = colors[colorArray[randomNumber(0,colorArray.length-1)]];
stars.add(star);
}
}
}
for (var i = 0; i < enemies.length; i++) {
enemies.get(i).z += mspeed;
if (enemies.get(i).z > -100) {
near.add(enemies.get(i))
}
}
for (var i = 0; i < near.length; i++) {
var int = grid.intersect(near.get(i))
if (int != undefined) {
if (int.intersect(player) && player.shape.materialData != near.get(i).shape.materialData) {
player.destroy();
loss = true;
}
}
if (near.get(i).z > 100) {
near.get(i).destroy();
}
if (grid.intersect(near.get(i))) {
var note = midiToFreq(notes[near.get(i).strRand]);
monoSynth.play(note);
}
}
for (var i = 0; i < stars.length; i++) {
stars.get(i).z += mspeed;
var int = grid.intersect(stars.get(i))
if (int != undefined) {
if (int.intersect(player)) {
num_stars++;
total_stars++;
store("stars",total_stars);
player.shape.materialData = stars.get(i).shape.materialData;
stars.get(i).destroy();
}
}
}
}
function keybind() {
// Keys from https://keycode.info/
var sx = player.x;
var sy = player.y;
if (keyWentDown(87) || keyWentDown(38)) {
player.y-=15;
}
if (keyWentDown(65) || keyWentDown(37)) {
player.x-=15;
}
if (keyWentDown(83) || keyWentDown(40)) {
player.y+=15;
}
if (keyWentDown(68) || keyWentDown(39)) {
player.x+=15;
}
if (!grid.intersect(player) || (enemies.intersect(player) && player.shape.materialData != enemies.intersect(player) .shape.materialData)) {
player.x = sx;
player.y = sy;
}
}