Split out objects into own scripts
This commit is contained in:
parent
996dd96d50
commit
3b67b08683
12
ball.js
Normal file
12
ball.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Object.assign(self, {
|
||||||
|
collider: circle2d.clone(),
|
||||||
|
img: sprite.clone({path:"ball.png"}),
|
||||||
|
phys: 0,
|
||||||
|
elasticity: 1,
|
||||||
|
friction: 0,
|
||||||
|
scale: 10,
|
||||||
|
|
||||||
|
collide(hit) {
|
||||||
|
Sound.play("bump.wav");
|
||||||
|
},
|
||||||
|
});
|
|
@ -332,7 +332,7 @@ function gamegui() {
|
||||||
}).draw(Window.dimensions.scale([0.8,0.8]));
|
}).draw(Window.dimensions.scale([0.8,0.8]));
|
||||||
}
|
}
|
||||||
|
|
||||||
Register.gui.register(gamegui);
|
Register.gui.register(gamegui, this);
|
||||||
|
|
||||||
Player.players[0].control(gamepawn);
|
Player.players[0].control(gamepawn);
|
||||||
|
|
||||||
|
|
30
brick.js
Normal file
30
brick.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Object.assign(self, {
|
||||||
|
collider: polygon2d.clone(),
|
||||||
|
char: char2d.clone({
|
||||||
|
flash:Resources.load("brick.png"),
|
||||||
|
}),
|
||||||
|
|
||||||
|
points: 50,
|
||||||
|
|
||||||
|
getshot() {
|
||||||
|
this.kill();
|
||||||
|
},
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.char.stop();
|
||||||
|
this.flash();
|
||||||
|
this.char.color = Color.Rainbow.red;
|
||||||
|
},
|
||||||
|
|
||||||
|
flash() {
|
||||||
|
this.char.play("flash");
|
||||||
|
},
|
||||||
|
|
||||||
|
collide(hit) {
|
||||||
|
if (hit.obj.from !== 'ball')
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.powerup?.();
|
||||||
|
this.kill();
|
||||||
|
},
|
||||||
|
});
|
233
config.js
233
config.js
|
@ -1,17 +1,5 @@
|
||||||
gameobject.elasticity = 1;
|
gameobject.elasticity = 1;
|
||||||
|
|
||||||
gameobject.clone("ball", {
|
|
||||||
collider: circle2d.clone(),
|
|
||||||
img: sprite.clone(),
|
|
||||||
phys: 0,
|
|
||||||
elasticity: 1,
|
|
||||||
friction: 0,
|
|
||||||
|
|
||||||
collide(hit) {
|
|
||||||
Sound.play("bump.wav");
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
Color.Gameboy = {
|
Color.Gameboy = {
|
||||||
darkest: [15,56,15],
|
darkest: [15,56,15],
|
||||||
dark: [48,98,48],
|
dark: [48,98,48],
|
||||||
|
@ -27,224 +15,3 @@ Color.Rainbow = {
|
||||||
green: [0,153,1],
|
green: [0,153,1],
|
||||||
blue: [53,51,255]
|
blue: [53,51,255]
|
||||||
};
|
};
|
||||||
|
|
||||||
gameobject.clone("brick", {
|
|
||||||
collider: polygon2d.clone(),
|
|
||||||
char: char2d.clone({
|
|
||||||
flash:Resources.load("brick.png"),
|
|
||||||
}),
|
|
||||||
|
|
||||||
points: 50,
|
|
||||||
|
|
||||||
getshot() {
|
|
||||||
this.kill();
|
|
||||||
},
|
|
||||||
|
|
||||||
start() {
|
|
||||||
this.char.stop();
|
|
||||||
this.flash();
|
|
||||||
this.char.color = Color.Rainbow.red;
|
|
||||||
},
|
|
||||||
|
|
||||||
flash() {
|
|
||||||
this.char.play("flash");
|
|
||||||
},
|
|
||||||
|
|
||||||
collide(hit) {
|
|
||||||
if (hit.obj.from !== 'ball')
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.powerup?.();
|
|
||||||
this.kill();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
var act_x = Action.add_new("move");
|
|
||||||
act_x.inputs.push("axis_ljoy");
|
|
||||||
|
|
||||||
gameobject.clone("missile", {
|
|
||||||
collider: polygon2d.clone(),
|
|
||||||
phys: 1,
|
|
||||||
bwidth: 5,
|
|
||||||
bheight: 15,
|
|
||||||
speed: 200,
|
|
||||||
|
|
||||||
start() {
|
|
||||||
this.collider.points = Geometry.box(this.bwidth, this.bheight);
|
|
||||||
this.collider.sensor = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
collide(hit) {
|
|
||||||
if ('getshot' in hit.obj) {
|
|
||||||
hit.obj.getshot();
|
|
||||||
this.kill();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
draw() {
|
|
||||||
Debug.box(this.pos, [this.bwidth, this.bheight], Color.cyan);
|
|
||||||
},
|
|
||||||
|
|
||||||
update(dt) {
|
|
||||||
this.pos = this.pos.add([0,this.speed*dt]);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
var paddle = gameobject.clone("paddle", {
|
|
||||||
collider: polygon2d.clone(),
|
|
||||||
img: sprite.clone(),
|
|
||||||
phys: 1,
|
|
||||||
elasticity: 1,
|
|
||||||
|
|
||||||
speed: 1000,
|
|
||||||
|
|
||||||
length: 50,
|
|
||||||
height: 28,
|
|
||||||
lengths: [16,24,32,40,48],
|
|
||||||
growlvl: 1,
|
|
||||||
maxgrow: 5,
|
|
||||||
max_x: 0,
|
|
||||||
extents: 300,
|
|
||||||
|
|
||||||
frame_vel: [0,0],
|
|
||||||
|
|
||||||
update(dt) {
|
|
||||||
this.angle = 0;
|
|
||||||
var fpos = this.pos;
|
|
||||||
fpos.x += this.frame_vel.x * this.speed * dt;
|
|
||||||
fpos.x = Math.clamp(fpos.x,-this.max_x,this.max_x);
|
|
||||||
this.pos = fpos;
|
|
||||||
this.frame_vel = [0,0];
|
|
||||||
|
|
||||||
if (this.stickball)
|
|
||||||
this.stickball.pos = this.pos.add(this.stickpos);
|
|
||||||
},
|
|
||||||
|
|
||||||
physupdate(dt) { this.velocity = [0,0]; },
|
|
||||||
|
|
||||||
gamepad_ljoy_axis(v) {
|
|
||||||
v[1] = 0;
|
|
||||||
this.pos = this.pos.add(v.scale(this.speed*Yugine.dt));
|
|
||||||
},
|
|
||||||
|
|
||||||
setup() {
|
|
||||||
Player.players[0].control(this);
|
|
||||||
this.length = this.lengths[0];
|
|
||||||
},
|
|
||||||
|
|
||||||
grow() {
|
|
||||||
this.setgrow(this.growlvl + 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
setgrow(n) {
|
|
||||||
this.growlvl = Math.clamp(n,1,this.maxgrow);
|
|
||||||
this.length = this.lengths[this.growlvl];
|
|
||||||
this.img.path = "pill" + this.growlvl + ".png";
|
|
||||||
this.img.sync();
|
|
||||||
var d = this.img.dimensions;
|
|
||||||
this.collider.points = Geometry.box(d.x, d.y);
|
|
||||||
this.collider.sync();
|
|
||||||
|
|
||||||
this.max_x = this.extents - (d.x*this.scale)/2;
|
|
||||||
},
|
|
||||||
|
|
||||||
lasership() {
|
|
||||||
this.laser = true;
|
|
||||||
this.img.color = Color.Gameboy.light;
|
|
||||||
},
|
|
||||||
|
|
||||||
unlasership() {
|
|
||||||
this.laser = false;
|
|
||||||
this.img.color = Color.white;
|
|
||||||
},
|
|
||||||
|
|
||||||
shoot() {
|
|
||||||
var m1 = World.spawn(gameobjects['missile']);
|
|
||||||
var m2 = World.spawn(gameobjects['missile']);
|
|
||||||
m1.pos = this.pos.add([(this.length/2)-5,0]);
|
|
||||||
m2.pos = this.pos.add([5-(this.length/2),0]);
|
|
||||||
},
|
|
||||||
|
|
||||||
sticky: false,
|
|
||||||
stored_vel: [0,0],
|
|
||||||
stickball: {},
|
|
||||||
stickpos: [0,0],
|
|
||||||
|
|
||||||
start() {
|
|
||||||
this.collider.sensor = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
collide(hit) {
|
|
||||||
if (!(hit.obj.from === 'ball')) return;
|
|
||||||
|
|
||||||
var xdiff = hit.pos.x - this.pos.x;
|
|
||||||
var hitangle = (xdiff/this.length + 0.5) * Math.PI;
|
|
||||||
hitangle = Math.clamp(hitangle, Math.PI/6, 5*Math.PI/6);
|
|
||||||
var speed = Vector.length(hit.obj.velocity);
|
|
||||||
hit.obj.velocity = [Math.cos(hitangle)*speed, -Math.sin(hitangle)*speed];
|
|
||||||
hit.obj.velocity = hit.obj.velocity.scale(-1);
|
|
||||||
var oldvel = hit.obj.velocity;
|
|
||||||
var scaler = Math.max(Math.abs(xdiff)/30, 1.01);
|
|
||||||
hit.obj.velocity = hit.obj.velocity.scale(scaler);
|
|
||||||
|
|
||||||
if (this.sticky) {
|
|
||||||
this.stored_vel = hit.obj.velocity;
|
|
||||||
hit.obj.velocity = [0,0];
|
|
||||||
this.stickball = hit.obj;
|
|
||||||
this.stickpos = hit.obj.pos.sub(this.pos);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
paddle.inputs = {};
|
|
||||||
paddle.inputs.space = function() {
|
|
||||||
if (this.sticky && this.stickball) {
|
|
||||||
this.stickball.velocity = this.stored_vel;
|
|
||||||
this.stickball = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.laser) {
|
|
||||||
this.shoot();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
paddle.inputs.a = function(){};
|
|
||||||
paddle.inputs.a.down = function() {
|
|
||||||
this.frame_vel = this.frame_vel.add([-1,0]);
|
|
||||||
};
|
|
||||||
|
|
||||||
paddle.inputs.d = {};
|
|
||||||
paddle.inputs.d.down = function() {
|
|
||||||
this.frame_vel = this.frame_vel.add([1,0]);
|
|
||||||
};
|
|
||||||
|
|
||||||
gameobject.clone("upgrade_drop", {
|
|
||||||
fallspeed: 150,
|
|
||||||
tag: "ball",
|
|
||||||
upgrade: function() {},
|
|
||||||
size: 12,
|
|
||||||
phys:1,
|
|
||||||
collider: circle2d.clone(),
|
|
||||||
color: Color.Rainbow.blue,
|
|
||||||
|
|
||||||
start() {
|
|
||||||
this.collider.radius = this.size;
|
|
||||||
this.collider.sensor = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
draw() {
|
|
||||||
Shape.circle(this.pos,this.size,this.color);
|
|
||||||
},
|
|
||||||
|
|
||||||
collide(hit) {
|
|
||||||
if (!(hit.obj.from === 'paddle'))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.upgrade();
|
|
||||||
this.kill();
|
|
||||||
},
|
|
||||||
|
|
||||||
update(dt) {
|
|
||||||
this.pos = this.pos.add([0,-this.fallspeed*dt]);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
4
game.js
4
game.js
|
@ -1,2 +1,6 @@
|
||||||
|
//var b = prototypes.from_file("ball.js");
|
||||||
|
//var ball1 = b.make();
|
||||||
|
//Log.warn(ball1.from);
|
||||||
|
//var ball2 = ball1.dup({pos:[100,100]});
|
||||||
Window.icon("powerup.png");
|
Window.icon("powerup.png");
|
||||||
World.load("startmenu");
|
World.load("startmenu");
|
||||||
|
|
29
missile.js
Normal file
29
missile.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
var def = {
|
||||||
|
collider: polygon2d.clone(),
|
||||||
|
phys: 1,
|
||||||
|
bwidth: 5,
|
||||||
|
bheight: 15,
|
||||||
|
speed: 200,
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.collider.points = Geometry.box(this.bwidth, this.bheight);
|
||||||
|
this.collider.sensor = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
collide(hit) {
|
||||||
|
if ('getshot' in hit.obj) {
|
||||||
|
hit.obj.getshot();
|
||||||
|
this.kill();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
draw() {
|
||||||
|
Debug.box(this.pos, [this.bwidth, this.bheight], Color.cyan);
|
||||||
|
},
|
||||||
|
|
||||||
|
update(dt) {
|
||||||
|
this.pos = this.pos.add([0,this.speed*dt]);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.assign(self, def);
|
126
paddle.js
Normal file
126
paddle.js
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
Object.assign(self, {
|
||||||
|
collider: polygon2d.clone(),
|
||||||
|
img: sprite.clone(),
|
||||||
|
phys: 1,
|
||||||
|
elasticity: 1,
|
||||||
|
|
||||||
|
speed: 1000,
|
||||||
|
|
||||||
|
length: 50,
|
||||||
|
height: 28,
|
||||||
|
lengths: [16,24,32,40,48],
|
||||||
|
growlvl: 1,
|
||||||
|
maxgrow: 5,
|
||||||
|
max_x: 0,
|
||||||
|
extents: 300,
|
||||||
|
|
||||||
|
frame_vel: [0,0],
|
||||||
|
|
||||||
|
update(dt) {
|
||||||
|
this.angle = 0;
|
||||||
|
var fpos = this.pos;
|
||||||
|
fpos.x += this.frame_vel.x * this.speed * dt;
|
||||||
|
fpos.x = Math.clamp(fpos.x,-this.max_x,this.max_x);
|
||||||
|
this.pos = fpos;
|
||||||
|
this.frame_vel = [0,0];
|
||||||
|
|
||||||
|
if (this.stickball)
|
||||||
|
this.stickball.pos = this.pos.add(this.stickpos);
|
||||||
|
},
|
||||||
|
|
||||||
|
physupdate(dt) { this.velocity = [0,0]; },
|
||||||
|
|
||||||
|
gamepad_ljoy_axis(v) {
|
||||||
|
v[1] = 0;
|
||||||
|
this.pos = this.pos.add(v.scale(this.speed*Yugine.dt));
|
||||||
|
},
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
this.length = this.lengths[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
grow() {
|
||||||
|
this.setgrow(this.growlvl + 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
setgrow(n) {
|
||||||
|
this.growlvl = Math.clamp(n,1,this.maxgrow);
|
||||||
|
this.length = this.lengths[this.growlvl];
|
||||||
|
this.img.path = "pill" + this.growlvl + ".png";
|
||||||
|
this.img.sync();
|
||||||
|
var d = this.img.dimensions;
|
||||||
|
this.collider.points = Geometry.box(d.x, d.y);
|
||||||
|
this.collider.sync();
|
||||||
|
|
||||||
|
this.max_x = this.extents - (d.x*this.scale)/2;
|
||||||
|
},
|
||||||
|
|
||||||
|
lasership() {
|
||||||
|
this.laser = true;
|
||||||
|
this.img.color = Color.Gameboy.light;
|
||||||
|
},
|
||||||
|
|
||||||
|
unlasership() {
|
||||||
|
this.laser = false;
|
||||||
|
this.img.color = Color.white;
|
||||||
|
},
|
||||||
|
|
||||||
|
shoot() {
|
||||||
|
var m1 = World.spawn(gameobjects['missile']);
|
||||||
|
var m2 = World.spawn(gameobjects['missile']);
|
||||||
|
m1.pos = this.pos.add([(this.length/2)-5,0]);
|
||||||
|
m2.pos = this.pos.add([5-(this.length/2),0]);
|
||||||
|
},
|
||||||
|
|
||||||
|
sticky: false,
|
||||||
|
stored_vel: [0,0],
|
||||||
|
stickball: {},
|
||||||
|
stickpos: [0,0],
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.collider.sensor = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
collide(hit) {
|
||||||
|
if (!(hit.obj.from === 'ball')) return;
|
||||||
|
|
||||||
|
var xdiff = hit.pos.x - this.pos.x;
|
||||||
|
var hitangle = (xdiff/this.length + 0.5) * Math.PI;
|
||||||
|
hitangle = Math.clamp(hitangle, Math.PI/6, 5*Math.PI/6);
|
||||||
|
var speed = Vector.length(hit.obj.velocity);
|
||||||
|
hit.obj.velocity = [Math.cos(hitangle)*speed, -Math.sin(hitangle)*speed];
|
||||||
|
hit.obj.velocity = hit.obj.velocity.scale(-1);
|
||||||
|
var oldvel = hit.obj.velocity;
|
||||||
|
var scaler = Math.max(Math.abs(xdiff)/30, 1.01);
|
||||||
|
hit.obj.velocity = hit.obj.velocity.scale(scaler);
|
||||||
|
|
||||||
|
if (this.sticky) {
|
||||||
|
this.stored_vel = hit.obj.velocity;
|
||||||
|
hit.obj.velocity = [0,0];
|
||||||
|
this.stickball = hit.obj;
|
||||||
|
this.stickpos = hit.obj.pos.sub(this.pos);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
self.inputs = {};
|
||||||
|
self.inputs.space = function() {
|
||||||
|
if (this.sticky && this.stickball) {
|
||||||
|
this.stickball.velocity = this.stored_vel;
|
||||||
|
this.stickball = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.laser) {
|
||||||
|
this.shoot();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
self.inputs.a = function(){};
|
||||||
|
self.inputs.a.down = function() {
|
||||||
|
this.frame_vel = this.frame_vel.add([-1,0]);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.inputs.d = {};
|
||||||
|
self.inputs.d.down = function() {
|
||||||
|
this.frame_vel = this.frame_vel.add([1,0]);
|
||||||
|
};
|
|
@ -1,9 +1,11 @@
|
||||||
var startgame = function()
|
var startgame = function()
|
||||||
{
|
{
|
||||||
|
self.kill();
|
||||||
run("breakout.js");
|
run("breakout.js");
|
||||||
scene.kill();
|
|
||||||
// Player.players[0].uncontrol(startcontroller);
|
// Player.players[0].uncontrol(startcontroller);
|
||||||
//Register.gui.unregister(startmenu,this);
|
//Register.gui.unregister(startmenu,this);
|
||||||
|
// Register.gui.unregister_obj(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
var exitgame = function()
|
var exitgame = function()
|
||||||
|
@ -71,7 +73,7 @@ function startmenu() {
|
||||||
GUI.image_fn({path:"coin.png", anchor: [1,0.5]}).draw([item.bb.l, (item.bb.b + item.bb.t)/2].add([-3,1]));
|
GUI.image_fn({path:"coin.png", anchor: [1,0.5]}).draw([item.bb.l, (item.bb.b + item.bb.t)/2].add([-3,1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
Register.gui.register(startmenu, scene);
|
Register.gui.register(startmenu, this);
|
||||||
|
|
||||||
var startcontroller = {};
|
var startcontroller = {};
|
||||||
startcontroller.inputs = {};
|
startcontroller.inputs = {};
|
||||||
|
@ -89,7 +91,7 @@ startcontroller.inputs.w = function() {
|
||||||
item.selected = true;
|
item.selected = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
startcontroller.inputs.enter = function() { Log.warn("TEST"); item.action(); };
|
startcontroller.inputs.enter = function() { item.action(); };
|
||||||
|
|
||||||
Player.players[0].control(startcontroller);
|
Player.players[0].control(startcontroller);
|
||||||
Game.play();
|
Game.play();
|
||||||
|
|
30
upgrade_drop.js
Normal file
30
upgrade_drop.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Object.assign(self, {
|
||||||
|
fallspeed: 150,
|
||||||
|
tag: "ball",
|
||||||
|
upgrade: function() {},
|
||||||
|
size: 12,
|
||||||
|
phys:1,
|
||||||
|
collider: circle2d.clone(),
|
||||||
|
color: Color.Rainbow.blue,
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.collider.radius = this.size;
|
||||||
|
this.collider.sensor = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
draw() {
|
||||||
|
Shape.circle(this.pos,this.size,this.color);
|
||||||
|
},
|
||||||
|
|
||||||
|
collide(hit) {
|
||||||
|
if (!(hit.obj.from === 'paddle'))
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.upgrade();
|
||||||
|
this.kill();
|
||||||
|
},
|
||||||
|
|
||||||
|
update(dt) {
|
||||||
|
this.pos = this.pos.add([0,-this.fallspeed*dt]);
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in a new issue