Sorry to bring this back up. I'm not sure if this is appropriate to talk about here or if I should ask these questions on the other forum.
I've been reviewing the water script and I finally got to a point where I somewhat understand what is happening. I tried to add on draining functionality (which works) but it is definitely hacked together. Do you have any advice on how to clean this up?
// setting variables and giving the object a name
function onCreated() { this.waterWidth = 24; this.waterHeight = 8; this.boundaryWidth = 2; this.boundaryHeight = 2; this.level.foobar = this; }
// designed to show proper water level if the player were to log off. // using client variable to save status
function onPlayerEnters() { if (client.waterfilled = true) { this.showpoly(200, {this.x, this.y, this.x + this.waterWidth, this.y, this.x + this.waterWidth, this.y + this.waterHeight, this.x, this.y + this.waterHeight}); this.changeimgcolors(200,0,0,1,0.75); this.changeimgvis(200,1); } else this.hideimg(200); }
// triggering public function from a switch in the level. // using it this way so I can break a nested timeout.
public function watercheck() { if (client.waterfilled == true) { this.filledHeight = 0; this.filledWidth = 0; } else { this.filledHeight = this.waterHeight; this.filledWidth = this.waterWidth; } setTimer(0.05); }
function onTimeout() { waterAction(); setTimer(0.1); }
function waterAction() {
// the truly hacked part // enabling and disabling the movement and breaking the timeout once the water is finished it's thing
if (client.waterfilled == true) { if (this.waterWidth == this.filledWidth && this.waterHeight == this.filledHeight) { disablescriptmovement = false; return; } else disablescriptmovement = true; } if (client.waterfilled == false) { if (this.filledWidth <= 0 && this.filledHeight <= 0) { disablescriptmovement = false; return; } else disablescriptmovement = true; } temp.w = this.waterWidth - (this.boundaryWidth * 2); temp.h = this.waterHeight - (this.boundaryHeight * 2); this.xIncrease = 50; this.yIncrease = 50; if (this.boundaryWidth > 0) { if (this.waterWidth - this.filledWidth <= this.boundaryWidth * 2) { temp.w = this.boundaryWidth; this.xIncrease /= 2; } if (this.waterHeight - this.filledHeight <= this.boundaryHeight * 2) { temp.h = this.boundaryHeight; this.yIncrease /= 2; } } this.xIncrease = (temp.w / this.xIncrease); this.yIncrease = (temp.h / this.yIncrease);
// checking whether to flood or empty the room
if (client.waterfilled = true) { this.filledWidth = min(this.waterWidth, this.filledWidth + this.xIncrease); this.filledHeight = min(this.waterHeight, this.filledHeight + this.yIncrease); } else { this.filledWidth = min(this.waterWidth, this.filledWidth - this.xIncrease); this.filledHeight = min(this.waterHeight, this.filledHeight - this.yIncrease); } updatePoly(); }
// drawing the polygon
function updatePoly() { temp.x = this.x + this.getWaterX(); temp.y = this.y + this.getWaterY(); this.showpoly(200, {temp.x, temp.y, temp.x + this.filledWidth, temp.y, temp.x + this.filledWidth, temp.y + this.filledHeight, temp.x, temp.y + this.filledHeight}); this.changeimgcolors(200,0,0,1,0.75); this.changeimgvis(200,1); }
function getWaterX() { return (this.waterWidth - this.filledWidth) / 2; }
function getWaterY() { return (this.waterHeight - this.filledHeight) / 2; }
|