Skip to content

Instantly share code, notes, and snippets.

@IntelOrca
Last active May 12, 2020 20:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IntelOrca/cf0a8083f1865ca8e6fa0516fd8c0263 to your computer and use it in GitHub Desktop.
Save IntelOrca/cf0a8083f1865ca8e6fa0516fd8c0263 to your computer and use it in GitHub Desktop.
/// <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