Files
JuegoSim/Assets/_Project/Scripts/Code/CommandLayer/CommandHandler.cs
T
2026-07-21 08:56:10 +03:00

112 lines
2.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CommandHandler : MonoBehaviour
{
private static CommandHandler instance;
private CommandManager commandManager;
private Environment environment;
public static CommandHandler getInstance()
{
if (instance == null)
{
instance = FindObjectOfType<CommandHandler>();
if (instance == null)
{
GameObject commandHandlerObject = new GameObject("CommandHandler");
instance = commandHandlerObject.AddComponent<CommandHandler>();
}
}
return instance;
}
private void Awake()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
commandManager = CommandManager.getInstance();
environment = Environment.getInstance();
}
private void Update()
{
// Detect Ctrl+Z for undo and Ctrl+Y for redo
bool ctrl = Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl);
if (ctrl)
{
if (Input.GetKeyDown(KeyCode.Z))
{
Debug.Log("Ctrl+Z detected: Undo action");
undoAction();
}
else if (Input.GetKeyDown(KeyCode.Y))
{
Debug.Log("Ctrl+Y detected: Redo action");
redoAction();
}
}
}
public void createBlock(string prefabId, Vector3 position, Quaternion rotation)
{
ICommand createCommand = new CreateBlockCommand(prefabId, position, rotation);
commandManager.executeCommand(createCommand);
}
public void moveBlock(string blockId, Vector3 prePosition, Vector3 newPosition, Quaternion preRotation, Quaternion newRotation)
{
ICommand moveCommand = new MoveBlockCommand(blockId, prePosition, newPosition, preRotation, newRotation);
commandManager.executeCommand(moveCommand);
}
public void removeBlock(string blockId)
{
ICommand deleteCommand = new DeleteBlockCommand(blockId);
commandManager.executeCommand(deleteCommand);
}
public void removeGroup(List<string> blockIds)
{
ICommand deleteCommand = new DeleteGroupCommand(blockIds);
commandManager.executeCommand(deleteCommand);
}
public void rotateBlock(string blockId, Quaternion newRotation)
{
ICommand rotateCommand = new RotateblockCommand(blockId, newRotation);
commandManager.executeCommand(rotateCommand);
}
public void undoAction()
{
commandManager.undo();
}
public void redoAction()
{
commandManager.redo();
}
public void clearHistory()
{
commandManager.clearHistory();
}
}