aqualogue/level/Rescuee.js

103 lines
No EOL
2.3 KiB
JavaScript

Rescuee = function(level, data, dolphin) {
var rescuee = Entity(level, data.position.x, data.position.y, data.position.z);
rescuee.addSprite("spr", Renderer.sprite(data.sprite));
rescuee.currentSprite("spr");
if (data.dead) {
rescuee.activeSprite.rotation = Math.PI;
} else if (!data.post) {
rescuee.bubble = Entity(level, data.position.x, data.position.y, data.position.z);
rescuee.bubble.addSprite("spr", Renderer.sprite("bubble"));
rescuee.bubble.currentSprite("spr");
rescuee.barrier = Entity(level, dolphin.position.x, dolphin.position.y, 20);
rescuee.barrier.addSprite("spr", Renderer.animation([
"barrier1","barrier2","barrier3","barrier2"
]).speed(10));
rescuee.barrier.currentSprite("spr");
rescuee.barrier.think = function() {
rescuee.barrier.position.x = dolphin.position.x;
rescuee.barrier.position.y = dolphin.position.y;
}
rescuee.barrier.bbox = {
x: 200,
y: 200,
z: 6,
tag: "geometry"
};
}
var flt = 0;
rescuee.think = function() {
flt += Math.PI / 90;
var bob = Math.cos(flt);
rescuee.position.z += bob/9;
if (!data.dead) {
rescuee.activeSprite.rotation = bob/7;
}
// Check burst
var xd, yd, zd;
xd = dolphin.position.x - data.position.x;
yd = dolphin.position.y - data.position.y;
zd = dolphin.position.z - data.position.z;
if (xd * xd + yd * yd + zd * zd < 40*40) {
if (rescuee.bubble) {
rescuee.bubble.position.x = -99999;
rescuee.bubble.activeSprite.visible = false;
SFX.play("key");
}
rescuee.think = cutscene;
level.saveData.rescued = true;
}
}
var cutsceneLine = -1;
var cutsceneTimer = 250;
var text;
function cutscene() {
flt += Math.PI / 90;
var bob = Math.cos(flt);
rescuee.position.z += bob/9;
if (!data.dead) {
rescuee.activeSprite.rotation = bob/7;
}
cutsceneTimer++;
if (cutsceneTimer >= 300) {
cutsceneTimer = 0;
cutsceneLine++;
var line = data.lines[cutsceneLine];
if (text) {
level.stage.removeChild(text);
}
if (line) {
text = Renderer.typewriterText(line, 30, 220);
level.stage.addChild(text);
} else if (rescuee.barrier) {
rescuee.barrier.position.x = -99999;
rescuee.barrier.activeSprite.visible = false;
rescuee.barrier.think = undefined;
}
}
}
return rescuee;
}