-
-
Save IntelOrca/cf0a8083f1865ca8e6fa0516fd8c0263 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <reference path="C:/Users/Ted/Documents/GitHub/openrct2/distribution/openrct2.d.ts" /> | |
var LIFT_ACTION = "ted.liftelements"; | |
function liftStuffOnTile(tile, z, surfaceId) { | |
var lift = false; | |
for (i = 0; i < tile.numElements; i++) { | |
var element = tile.getElement(i); | |
if (element.type === 'surface') { | |
if (element.surfaceStyle === surfaceId) { | |
lift = true; | |
} else { | |
return; | |
} | |
} else if (lift) { | |
element.baseHeight += z; | |
} | |
} | |
} | |
function liftStuff(z, surfaceId) { | |
for (var y = 0; y < map.size.y; y++) { | |
for (var x = 0; x < map.size.y; x++) { | |
var tile = map.getTile(x, y); | |
if (tile) { | |
liftStuffOnTile(tile, z, surfaceId); | |
} | |
} | |
} | |
} | |
function queryOrExecuteLift(args, execute) { | |
if (args.amount == 0) { | |
return { | |
error: 1, | |
errorTitle: "Bad amount", | |
errorMessage: "A bad amount of height was specified." | |
}; | |
} | |
if (execute) { | |
liftStuff(args.amount, args.surface); | |
} | |
return {}; | |
} | |
var LIFT_MIN = -4; | |
var LIFT_MAX = 4; | |
var selectedTerrain = -1; | |
var spinnerValue = 1; | |
var magicLiftWindow; | |
function updateSpinner() { | |
if (magicLiftWindow) { | |
var widget = magicLiftWindow.findWidget("s"); | |
if (widget) { | |
widget.text = "by " + spinnerValue + " unit" + (Math.abs(spinnerValue) == 1 ? "" : "s"); | |
} | |
} | |
} | |
function openMagicLiftWindow() { | |
magicLiftWindow = ui.getWindow("magic_lift"); | |
if (magicLiftWindow) { | |
magicLiftWindow.bringToFront(); | |
return; | |
} | |
selectedTerrain = 0; | |
var terrainSurfaceNames = []; | |
var terrainSurfaces = context.getAllObjects("terrain_surface"); | |
for (var i = 0; i < terrainSurfaces.length; i++) { | |
var obj = terrainSurfaces[i]; | |
terrainSurfaceNames.push(obj.name); | |
if (obj.identifier == '#RCT2SIP') { | |
selectedTerrain = i; | |
} | |
} | |
magicLiftWindow = ui.openWindow({ | |
classification: "magic_lift", | |
title: "Magic Lift", | |
x: 100, | |
y: 100, | |
width: 162, | |
height: 98, | |
widgets: [ | |
{ | |
type: "groupbox", | |
x: 8, | |
y: 24, | |
width: 144, | |
height: 65, | |
text: "Raise / lower tiles" | |
}, | |
{ | |
type: "dropdown", | |
x: 16, | |
y: 40, | |
width: 128, | |
height: 11, | |
selectedIndex: selectedTerrain, | |
items: terrainSurfaceNames, | |
onChange: function(selectedIndex) { | |
selectedTerrain = selectedIndex; | |
} | |
}, | |
{ | |
name: "s", | |
type: "spinner", | |
x: 16, | |
y: 54, | |
width: 128, | |
height: 11, | |
text: spinnerValue.toString(), | |
onDecrement: function() { | |
if (spinnerValue > LIFT_MIN) { | |
spinnerValue--; | |
if (spinnerValue == 0) | |
spinnerValue--; | |
updateSpinner(); | |
} | |
}, | |
onIncrement: function() { | |
if (spinnerValue < LIFT_MAX) { | |
spinnerValue++; | |
if (spinnerValue == 0) | |
spinnerValue++; | |
updateSpinner(); | |
} | |
} | |
}, | |
{ | |
type: "button", | |
text: "Apply", | |
x: 75, | |
y: 68, | |
width: 70, | |
height: 13, | |
isDisabled: false, | |
onClick: function() { | |
context.executeAction(LIFT_ACTION, { | |
amount: spinnerValue, | |
surface: selectedTerrain | |
}); | |
} | |
} | |
] | |
}); | |
updateSpinner(); | |
} | |
var main = function () { | |
context.registerAction(LIFT_ACTION, | |
function(args) { return queryOrExecuteLift(args, false); }, | |
function(args) { return queryOrExecuteLift(args, true); }); | |
if (typeof ui === 'undefined') { | |
return; | |
} | |
ui.registerMenuItem("Magic Lift", function() { | |
openMagicLiftWindow(); | |
}); | |
}; | |
registerPlugin({ | |
name: 'Magic Lift', | |
version: '1.0', | |
authors: ['Ted'], | |
type: 'remote', | |
main: main | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment