mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
Cleanup click detector code
This commit is contained in:
parent
fd70130ec4
commit
2dec257dd9
@ -1,70 +0,0 @@
|
|||||||
import { STOP_PROPAGATION } from "../core/signal";
|
|
||||||
import { GameRoot } from "./root";
|
|
||||||
import { ClickDetector } from "../core/click_detector";
|
|
||||||
import { createLogger } from "../core/logging";
|
|
||||||
|
|
||||||
const logger = createLogger("canvas_click_interceptor");
|
|
||||||
|
|
||||||
export class CanvasClickInterceptor {
|
|
||||||
/**
|
|
||||||
* @param {GameRoot} root
|
|
||||||
*/
|
|
||||||
constructor(root) {
|
|
||||||
this.root = root;
|
|
||||||
|
|
||||||
this.root.signals.postLoadHook.add(this.initialize, this);
|
|
||||||
this.root.signals.aboutToDestruct.add(this.cleanup, this);
|
|
||||||
|
|
||||||
/** @type {Array<object>} */
|
|
||||||
this.interceptors = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
initialize() {
|
|
||||||
this.clickDetector = new ClickDetector(this.root.canvas, {
|
|
||||||
applyCssClass: null,
|
|
||||||
captureTouchmove: false,
|
|
||||||
targetOnly: true,
|
|
||||||
preventDefault: true,
|
|
||||||
maxDistance: 13,
|
|
||||||
clickSound: null,
|
|
||||||
});
|
|
||||||
this.clickDetector.click.add(this.onCanvasClick, this);
|
|
||||||
this.clickDetector.rightClick.add(this.onCanvasRightClick, this);
|
|
||||||
|
|
||||||
if (this.root.hud.parts.buildingPlacer) {
|
|
||||||
this.interceptors.push(this.root.hud.parts.buildingPlacer);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.log("Registered", this.interceptors.length, "interceptors");
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup() {
|
|
||||||
if (this.clickDetector) {
|
|
||||||
this.clickDetector.cleanup();
|
|
||||||
}
|
|
||||||
this.interceptors = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
onCanvasClick(position, event, cancelAction = false) {
|
|
||||||
if (!this.root.gameInitialized) {
|
|
||||||
logger.warn("Skipping click outside of game initiaization!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.root.hud.hasBlockingOverlayOpen()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < this.interceptors.length; ++i) {
|
|
||||||
const interceptor = this.interceptors[i];
|
|
||||||
if (interceptor.onCanvasClick(position, cancelAction) === STOP_PROPAGATION) {
|
|
||||||
// log(this, "Interceptor", interceptor.constructor.name, "catched click");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onCanvasRightClick(position, event) {
|
|
||||||
this.onCanvasClick(position, event, true);
|
|
||||||
}
|
|
||||||
}
|
|
@ -17,7 +17,6 @@ import { SavegameSerializer } from "../savegame/savegame_serializer";
|
|||||||
import { AutomaticSave } from "./automatic_save";
|
import { AutomaticSave } from "./automatic_save";
|
||||||
import { MetaHubBuilding } from "./buildings/hub";
|
import { MetaHubBuilding } from "./buildings/hub";
|
||||||
import { Camera } from "./camera";
|
import { Camera } from "./camera";
|
||||||
import { CanvasClickInterceptor } from "./canvas_click_interceptor";
|
|
||||||
import { EntityManager } from "./entity_manager";
|
import { EntityManager } from "./entity_manager";
|
||||||
import { GameSystemManager } from "./game_system_manager";
|
import { GameSystemManager } from "./game_system_manager";
|
||||||
import { HubGoals } from "./hub_goals";
|
import { HubGoals } from "./hub_goals";
|
||||||
@ -98,7 +97,6 @@ export class GameCore {
|
|||||||
root.logic = new GameLogic(root);
|
root.logic = new GameLogic(root);
|
||||||
root.hud = new GameHUD(root);
|
root.hud = new GameHUD(root);
|
||||||
root.time = new GameTime(root);
|
root.time = new GameTime(root);
|
||||||
root.canvasClickInterceptor = new CanvasClickInterceptor(root);
|
|
||||||
root.automaticSave = new AutomaticSave(root);
|
root.automaticSave = new AutomaticSave(root);
|
||||||
root.soundProxy = new SoundProxy(root);
|
root.soundProxy = new SoundProxy(root);
|
||||||
|
|
||||||
|
@ -243,20 +243,10 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
|
|||||||
* @param {boolean} cancelAction
|
* @param {boolean} cancelAction
|
||||||
*/
|
*/
|
||||||
onCanvasClick(mousePos, cancelAction = false) {
|
onCanvasClick(mousePos, cancelAction = false) {
|
||||||
if (cancelAction) {
|
// Prevent any other canvas clicks
|
||||||
if (this.currentMetaBuilding.get()) {
|
if (this.currentMetaBuilding.get()) {
|
||||||
this.currentMetaBuilding.set(null);
|
|
||||||
} else {
|
|
||||||
this.deleteBelowCursor();
|
|
||||||
}
|
|
||||||
return STOP_PROPAGATION;
|
return STOP_PROPAGATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.currentMetaBuilding.get()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return STOP_PROPAGATION;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -479,13 +469,18 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Deletion
|
// Deletion
|
||||||
if (button === enumMouseButton.right && !this.currentMetaBuilding.get()) {
|
if (button === enumMouseButton.right && !metaBuilding) {
|
||||||
this.currentlyDragging = true;
|
this.currentlyDragging = true;
|
||||||
this.currentlyDeleting = true;
|
this.currentlyDeleting = true;
|
||||||
this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace();
|
this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace();
|
||||||
this.currentMetaBuilding.set(null);
|
this.currentMetaBuilding.set(null);
|
||||||
return STOP_PROPAGATION;
|
return STOP_PROPAGATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cancel placement
|
||||||
|
if (button === enumMouseButton.right && metaBuilding) {
|
||||||
|
this.currentMetaBuilding.set(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,7 +19,6 @@ import { SoundProxy } from "./sound_proxy";
|
|||||||
import { Savegame } from "../savegame/savegame";
|
import { Savegame } from "../savegame/savegame";
|
||||||
import { GameLogic } from "./logic";
|
import { GameLogic } from "./logic";
|
||||||
import { ShapeDefinitionManager } from "./shape_definition_manager";
|
import { ShapeDefinitionManager } from "./shape_definition_manager";
|
||||||
import { CanvasClickInterceptor } from "./canvas_click_interceptor";
|
|
||||||
import { HubGoals } from "./hub_goals";
|
import { HubGoals } from "./hub_goals";
|
||||||
import { BufferMaintainer } from "../core/buffer_maintainer";
|
import { BufferMaintainer } from "../core/buffer_maintainer";
|
||||||
import { ProductionAnalytics } from "./production_analytics";
|
import { ProductionAnalytics } from "./production_analytics";
|
||||||
@ -110,9 +109,6 @@ export class GameRoot {
|
|||||||
/** @type {BufferMaintainer} */
|
/** @type {BufferMaintainer} */
|
||||||
this.buffers = null;
|
this.buffers = null;
|
||||||
|
|
||||||
/** @type {CanvasClickInterceptor} */
|
|
||||||
this.canvasClickInterceptor = null;
|
|
||||||
|
|
||||||
/** @type {AutomaticSave} */
|
/** @type {AutomaticSave} */
|
||||||
this.automaticSave = null;
|
this.automaticSave = null;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user