mirror of
https://github.com/tobspr/shapez.io.git
synced 2025-12-17 04:01:51 +00:00
added inverse cycling for buildings and variants
This commit is contained in:
parent
a2ee16589f
commit
81ce894103
@ -381,7 +381,7 @@ export class HUDBuildingPlacer extends BaseHUDPart {
|
|||||||
index >= 0,
|
index >= 0,
|
||||||
"Current variant was invalid: " + this.currentVariant.get() + " out of " + availableVariants
|
"Current variant was invalid: " + this.currentVariant.get() + " out of " + availableVariants
|
||||||
);
|
);
|
||||||
const newIndex = (index + 1) % availableVariants.length;
|
const newIndex = this.calculateNewVariantCycleIndex(index, availableVariants.length);
|
||||||
const newVariant = availableVariants[newIndex];
|
const newVariant = availableVariants[newIndex];
|
||||||
this.currentVariant.set(newVariant);
|
this.currentVariant.set(newVariant);
|
||||||
|
|
||||||
@ -389,6 +389,28 @@ export class HUDBuildingPlacer extends BaseHUDPart {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {number} index the current variant index
|
||||||
|
* @param {number} availableVariantsLength the number of available variants
|
||||||
|
* @returns {number} index for next variant
|
||||||
|
*/
|
||||||
|
calculateNewVariantCycleIndex(index, availableVariantsLength) {
|
||||||
|
let indexModifier = 0;
|
||||||
|
if (
|
||||||
|
this.root.keyMapper.getBinding(KEYMAPPINGS.placementModifiers.cycleInverse).isCurrentlyPressed()
|
||||||
|
) {
|
||||||
|
if (index - 1 < 0) indexModifier = availableVariantsLength - 1;
|
||||||
|
else indexModifier -= 1;
|
||||||
|
} else {
|
||||||
|
indexModifier += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(indexModifier);
|
||||||
|
console.log(index);
|
||||||
|
return (index + indexModifier) % availableVariantsLength;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tries to rotate
|
* Tries to rotate
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -109,20 +109,41 @@ export class HUDBuildingsToolbar extends BaseHUDPart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cycleBuildings() {
|
cycleBuildings() {
|
||||||
|
const actionMapper = this.root.keyMapper;
|
||||||
let newIndex = this.lastSelectedIndex;
|
let newIndex = this.lastSelectedIndex;
|
||||||
|
|
||||||
|
if (actionMapper.getBinding(KEYMAPPINGS.placementModifiers.cycleInverse).isCurrentlyPressed()) {
|
||||||
|
for (let i = 0; i < toolbarBuildings.length; --i, --newIndex) {
|
||||||
|
if (newIndex < 0) newIndex = newIndex + toolbarBuildings.length;
|
||||||
|
newIndex %= toolbarBuildings.length;
|
||||||
|
|
||||||
|
if (this.isCycledBuildingSelectable(newIndex)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
for (let i = 0; i < toolbarBuildings.length; ++i, ++newIndex) {
|
for (let i = 0; i < toolbarBuildings.length; ++i, ++newIndex) {
|
||||||
newIndex %= toolbarBuildings.length;
|
newIndex %= toolbarBuildings.length;
|
||||||
const metaBuilding = gMetaBuildingRegistry.findByClass(toolbarBuildings[newIndex]);
|
if (this.isCycledBuildingSelectable(newIndex)) {
|
||||||
const handle = this.buildingHandles[metaBuilding.id];
|
|
||||||
if (!handle.selected && handle.unlocked) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const metaBuildingClass = toolbarBuildings[newIndex];
|
const metaBuildingClass = toolbarBuildings[newIndex];
|
||||||
const metaBuilding = gMetaBuildingRegistry.findByClass(metaBuildingClass);
|
const metaBuilding = gMetaBuildingRegistry.findByClass(metaBuildingClass);
|
||||||
this.selectBuildingForPlacement(metaBuilding);
|
this.selectBuildingForPlacement(metaBuilding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isCycledBuildingSelectable(toolbarIndex) {
|
||||||
|
const metaBuilding = gMetaBuildingRegistry.findByClass(toolbarBuildings[toolbarIndex]);
|
||||||
|
const handle = this.buildingHandles[metaBuilding.id];
|
||||||
|
if (!handle.selected && handle.unlocked) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {MetaBuilding} metaBuilding
|
* @param {MetaBuilding} metaBuilding
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -72,6 +72,7 @@ export const KEYMAPPINGS = {
|
|||||||
placementDisableAutoOrientation: { keyCode: 17 }, // CTRL
|
placementDisableAutoOrientation: { keyCode: 17 }, // CTRL
|
||||||
placeMultiple: { keyCode: 16 }, // SHIFT
|
placeMultiple: { keyCode: 16 }, // SHIFT
|
||||||
placeInverse: { keyCode: 18 }, // ALT
|
placeInverse: { keyCode: 18 }, // ALT
|
||||||
|
cycleInverse: { keyCode: 16 }, // SHIFT
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user