rendered paste bodystop();
this.test = "";
this.speed = 15;
this.jumpVelocity = 80;
this.jumpTime = 0;
this.startAltitude = 0;
this.jumping = false;
this.a = -10;
this.bottomY = this._height;
this.bottomXMin = 0;
this.bottomXMax = this._width;
this.altitude;
this.onEnterFrame = function() {
this._y = Math.floor(this._y);
this._x = Math.floor(this._x);
UpdateStats();
UpdatePosition();
}
function UpdateStats() {
this.altitude = _root.stageHeight - Math.floor(this._y) - Math.floor(this._height);
}
function UpdatePosition() {
if (Key.isDown(Key.LEFT)) {
var check = CheckLeftWall(this._x, this._x-speed);
if (check.bool) {
this._x = Math.floor(check.wallX);
} else {
this._x -= speed;
}
} if (Key.isDown(Key.RIGHT)) {
var width = Math.floor(this._width);
var check = CheckRightWall(this._x+width, this._x+width+speed);
if (check.bool) {
this._x = Math.floor(check.wallX) - width;
} else {
this._x += speed;
}
} if (Key.isDown(Key.SPACE) && !jumping) {
StartJump();
}
var goingUp = (CalculateJump(jumpTime) < CalculateJump(jumpTime+1));
if (goingUp) {
var sh = _root.stageHeight;
var h = Math.floor(this._height);
var check = CheckCieling(sh-h-CalculateJump(jumpTime), sh-h-CalculateJump(jumpTime+1));
if (check.bool) {
SetAltitude(sh-h-check.cielingY);
jumping = false;
}
}
if (jumping) {
jumpTime++;
SetAltitude(CalculateJump(jumpTime));
var check = CheckGround(CalculateJump(jumpTime), CalculateJump(jumpTime+1));
if (check.bool) {
jumping = false;
SetAltitude(check.floorAlt);
}
} else {
var check = CheckGround(altitude, altitude-1);
if (!check.bool) {
jumping = true;
jumpTime = (-jumpVelocity)/(2*a);
startAltitude = altitude-150;
}
}
}
function CheckGround(current, next) {
var ret = {bool: false, floorAlt: 0};
var x = Math.floor(this._x);
for (var a = x; a < (this.bottomXMax+x); a++) {
for (var b = _root.currentArena.Floors[a].Points.length-1; b >= 0; b--) {
var floorUnderneath = _root.currentArena.Floors[a].Points[b];
if (floorUnderneath <= current && floorUnderneath >= next) {
ret.bool = true;
ret.floorAlt = floorUnderneath;
break;
}
}
}
return ret;
}
function CheckCieling(current, next) {
var ret = {bool: false, cielingY: 0}
var x = Math.floor(this._x);
var y = Math.floor(this._y);
var height = Math.floor(this._height);
for (var a = x; a < this.bottomXMax+x; a++) {
for (var b = 0; b < _root.currentArena.Cielings[a].Points.length; b++) {
var cieling = _root.currentArena.Cielings[a].Points[b];
if (cieling >= next && cieling <= current) {
ret.bool = true;
ret.cielingY = cieling;
}
}
}
return ret;
}
function CheckLeftWall(current, next) {
var ret = {bool: false, wallX: 0};
var y = Math.floor(this._y);
var height = Math.floor(this._height);
for (var a = y; a < (height+y); a++) {
for (var b = 0; b < _root.currentArena.Walls[a].Points.length; b++) {
var wall = _root.currentArena.Walls[a].Points[b];
if (wall <= current && wall >= next) {
ret.bool = true;
ret.wallX = wall;
}
}
}
return ret;
}
function CheckRightWall(current, next) {
var ret = {bool: false, wallX: 0};
var y = Math.floor(this._y);
var height = Math.floor(this._height);
for (var a = y; a < (height+y); a++) {
for (var b = 0; b < _root.currentArena.Walls[a].Points.length; b++) {
var wall = _root.currentArena.Walls[a].Points[b];
if (wall >= current && wall <= next) {
ret.bool = true;
ret.wallX = wall;
}
}
}
return ret;
}
this.SetAltitude = function(num) {
this._y = _root.stageHeight - Math.floor(this._height) - num;
this.altitude = _root.stageHeight - Math.floor(this._y) - Math.floor(this._height);
}
function StartJump() {
startAltitude = altitude;
jumping = true;
jumpTime = 0;
}
function CalculateJump(time) {
return a*Math.pow(time, 2) + jumpVelocity*time + startAltitude
}