diff --git a/.idea/.idea.ExpressElevator/.idea/workspace.xml b/.idea/.idea.ExpressElevator/.idea/workspace.xml
index cfc4ed2..07a1676 100644
--- a/.idea/.idea.ExpressElevator/.idea/workspace.xml
+++ b/.idea/.idea.ExpressElevator/.idea/workspace.xml
@@ -4,7 +4,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -42,7 +54,7 @@
"Attach to Unity Editor.Attach to Unity Editor.executor": "Debug",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
- "git-widget-placeholder": "Feature-6-UsingStatePattern",
+ "git-widget-placeholder": "Feature-6-CommanPattern",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
@@ -81,13 +93,15 @@
-
+
-
+
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 4d8422e..4060af7 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -147,14 +147,14 @@ RectTransform:
m_GameObject: {fileID: 133261010}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.65895814, y: 3.6083734, z: 2.0473042}
+ m_LocalScale: {x: 0.71134526, y: 3.8952389, z: 2.2100646}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 221982703}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 671.8, y: -124.7}
+ m_AnchoredPosition: {x: 675.4, y: -123.5}
m_SizeDelta: {x: 109.8411, y: 21.2261}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &133261012
@@ -239,6 +239,126 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 133261010}
m_CullTransparentMesh: 1
+--- !u!1 &136626621
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 136626622}
+ - component: {fileID: 136626625}
+ - component: {fileID: 136626624}
+ - component: {fileID: 136626623}
+ m_Layer: 5
+ m_Name: Undo Button
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &136626622
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 136626621}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.51014125, y: 2.7934704, z: 1.5849478}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 221982703}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 675.4002, y: -475.4}
+ m_SizeDelta: {x: 109.8411, y: 21.2261}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &136626623
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 136626621}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: -1644469932529679544, guid: 2fbcf72e5debc9a4e9d7664a76b378ef, type: 3}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 136626624}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &136626624
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 136626621}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 934592570805267804, guid: 8f41e9100ef952c468e6bde2c6bb48c9, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &136626625
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 136626621}
+ m_CullTransparentMesh: 1
--- !u!1 &221982702
GameObject:
m_ObjectHideFlags: 0
@@ -270,14 +390,15 @@ RectTransform:
m_Children:
- {fileID: 732320779}
- {fileID: 2120192488}
+ - {fileID: 136626622}
- {fileID: 751619573}
- {fileID: 465397682}
- {fileID: 133261011}
m_Father: {fileID: 1552064758}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -960, y: 540}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &221982704
@@ -296,6 +417,7 @@ MonoBehaviour:
_firstButton: {fileID: 751619574}
_secondButton: {fileID: 465397683}
_thirdButton: {fileID: 133261012}
+ _undoButton: {fileID: 136626623}
--- !u!1001 &288834280
PrefabInstance:
m_ObjectHideFlags: 0
@@ -381,14 +503,14 @@ RectTransform:
m_GameObject: {fileID: 465397681}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.65895814, y: 3.6083734, z: 2.0473042}
+ m_LocalScale: {x: 0.71134526, y: 3.8952389, z: 2.2100646}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 221982703}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 671.8, y: -213.7}
+ m_AnchoredPosition: {x: 674, y: -213.7}
m_SizeDelta: {x: 109.8411, y: 21.2261}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &465397683
@@ -653,7 +775,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_Sprite: {fileID: -7358055287198136362, guid: 68632c519531ba842801917f64f8b609, type: 3}
+ m_Sprite: {fileID: -8367254710825533528, guid: 5a2e4ed0564466b4c94c62ad161b0406, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
@@ -699,14 +821,14 @@ RectTransform:
m_GameObject: {fileID: 751619572}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.65895814, y: 3.6083734, z: 2.0473042}
+ m_LocalScale: {x: 0.71134526, y: 3.8952389, z: 2.2100646}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 221982703}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 671.8, y: -301.3}
+ m_AnchoredPosition: {x: 674.9, y: -306.2}
m_SizeDelta: {x: 109.8411, y: 21.2261}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &751619574
@@ -2188,14 +2310,14 @@ RectTransform:
m_GameObject: {fileID: 2120192487}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.65895814, y: 3.6083734, z: 2.0473042}
+ m_LocalScale: {x: 0.71134526, y: 3.8952389, z: 2.2100646}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 221982703}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 671.8, y: -390.66687}
+ m_AnchoredPosition: {x: 676.8, y: -398.6}
m_SizeDelta: {x: 109.8411, y: 21.2261}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2120192489
diff --git a/Assets/Scripts/Command.meta b/Assets/Scripts/Command.meta
new file mode 100644
index 0000000..2ce8793
--- /dev/null
+++ b/Assets/Scripts/Command.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 617af9c7d6f6728429ff2f99a22d5c63
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Command/AbstractCommand.meta b/Assets/Scripts/Command/AbstractCommand.meta
new file mode 100644
index 0000000..3f5337f
--- /dev/null
+++ b/Assets/Scripts/Command/AbstractCommand.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 96e2fa2e0ee408349b0bfd37cce72436
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Command/AbstractCommand/ICommand.cs b/Assets/Scripts/Command/AbstractCommand/ICommand.cs
new file mode 100644
index 0000000..36dfd5c
--- /dev/null
+++ b/Assets/Scripts/Command/AbstractCommand/ICommand.cs
@@ -0,0 +1,12 @@
+using ExpressElevator.Event;
+using ExpressElevator.Passenger;
+using UnityEngine;
+
+namespace ExpressElevator.Command
+{
+ public interface ICommand
+ {
+ void Execute(PassengerController passengerController,EventService eventService);
+ void Undo();
+ }
+}
diff --git a/Assets/Scripts/Command/AbstractCommand/ICommand.cs.meta b/Assets/Scripts/Command/AbstractCommand/ICommand.cs.meta
new file mode 100644
index 0000000..c0134a9
--- /dev/null
+++ b/Assets/Scripts/Command/AbstractCommand/ICommand.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 57ad6ba3c271c6443b7d228ada3267ef
\ No newline at end of file
diff --git a/Assets/Scripts/Command/CommandInvoker.cs b/Assets/Scripts/Command/CommandInvoker.cs
new file mode 100644
index 0000000..d76d316
--- /dev/null
+++ b/Assets/Scripts/Command/CommandInvoker.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+using ExpressElevator.Event;
+using ExpressElevator.Passenger;
+using UnityEngine;
+
+namespace ExpressElevator.Command
+{
+ public class CommandInvoker
+ {
+ private Dictionary> _commandHistory = new Dictionary>();
+
+ private EventService _eventService;
+
+ public void InjectDependencies(EventService eventService)
+ {
+ _eventService = eventService;
+ Events();
+ }
+
+ private void Events()
+ {
+ _eventService.AddPassenger.AddListener(PrcessCommands);
+ _eventService.Undo.AddListener(Undo);
+ }
+
+ private void PrcessCommands(PassengerController passengerController, ICommand command)
+ {
+ ExecuteCommand(passengerController, command);
+ RegisterCommand(passengerController, command);
+ }
+
+ private void ExecuteCommand(PassengerController passengerController, ICommand command) => command.Execute(passengerController,_eventService);
+
+ private void RegisterCommand(PassengerController passengerController, ICommand command)
+ {
+ if (!_commandHistory.ContainsKey(passengerController))
+ {
+ _commandHistory[passengerController] = new Stack();
+ }
+ _commandHistory[passengerController].Push(command);
+ }
+
+ private void Undo(PassengerController passengerController)
+ {
+ if (_commandHistory.ContainsKey(passengerController) && _commandHistory[passengerController].Count > 0)
+ {
+ _commandHistory[passengerController].Pop().Undo();
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/Command/CommandInvoker.cs.meta b/Assets/Scripts/Command/CommandInvoker.cs.meta
new file mode 100644
index 0000000..a4e31fd
--- /dev/null
+++ b/Assets/Scripts/Command/CommandInvoker.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d68d95c4c04c3ff41a5bfdc64d512671
\ No newline at end of file
diff --git a/Assets/Scripts/Command/ConcreteCommand.meta b/Assets/Scripts/Command/ConcreteCommand.meta
new file mode 100644
index 0000000..56916f3
--- /dev/null
+++ b/Assets/Scripts/Command/ConcreteCommand.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1f84f53762afbac43aae50b5b9ce277c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs b/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs
new file mode 100644
index 0000000..d949a6c
--- /dev/null
+++ b/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs
@@ -0,0 +1,24 @@
+using ExpressElevator.Event;
+using ExpressElevator.Passenger;
+using UnityEngine;
+
+namespace ExpressElevator.Command
+{
+ public class BoardedPassenger : ICommand
+ {
+ private PassengerController _passengerController;
+ private EventService _eventService;
+
+ public void Execute(PassengerController passengerController,EventService eventService)
+ {
+ _passengerController = passengerController;
+ _eventService = eventService;
+ eventService.OnMovingInPassenger.InvokeEvent(passengerController);
+ }
+
+ public void Undo()
+ {
+ _passengerController.Reset();
+ }
+ }
+}
diff --git a/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs.meta b/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs.meta
new file mode 100644
index 0000000..02eefb7
--- /dev/null
+++ b/Assets/Scripts/Command/ConcreteCommand/BoardedPassenger.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 95720990e58994440b4f68b2acfab3e8
\ No newline at end of file
diff --git a/Assets/Scripts/Events/EventService.cs b/Assets/Scripts/Events/EventService.cs
index af628dd..fc58dcb 100644
--- a/Assets/Scripts/Events/EventService.cs
+++ b/Assets/Scripts/Events/EventService.cs
@@ -1,3 +1,4 @@
+using ExpressElevator.Command;
using ExpressElevator.Passenger;
using ExpressElevator.Utilities;
using UnityEngine;
@@ -6,6 +7,9 @@ namespace ExpressElevator.Event
{
public class EventService
{
+ public EventController UndoClicked { get; private set; }
+ public EventController Reset { get; private set; }
+ public EventController Undo { get; private set; }
public EventController OnMapSelected { get; private set; }
public EventController MoveToLift { get; private set; }
@@ -15,6 +19,8 @@ public class EventService
public EventController OnPassengerReached { get; private set; }
public EventController OnDeselectPassenger { get; private set; }
+ public EventController AddPassenger { get; private set; }
+
public EventService()
{
OnMapSelected = new EventController();
@@ -24,6 +30,10 @@ public EventService()
OnDeselectPassenger = new EventController();
OnControlPannelClicked = new EventController();
OnPassengerReached = new EventController();
+ AddPassenger = new EventController();
+ UndoClicked = new EventController();
+ Undo = new EventController();
+ Reset = new EventController();
}
}
}
diff --git a/Assets/Scripts/Floor/FloorManager.cs b/Assets/Scripts/Floor/FloorManager.cs
index 5585b11..72a10b5 100644
--- a/Assets/Scripts/Floor/FloorManager.cs
+++ b/Assets/Scripts/Floor/FloorManager.cs
@@ -38,6 +38,7 @@ public void AddGuest(PassengerView passenger)
{
passengerList.Add(passenger);
passenger.SetTargetPosition(waitingPoints[count]);
+ passenger._passengerController.SetQueuePosition(waitingPoints[count]);
count++;
}
diff --git a/Assets/Scripts/Main/GameService.cs b/Assets/Scripts/Main/GameService.cs
index 98d67b1..781c51a 100644
--- a/Assets/Scripts/Main/GameService.cs
+++ b/Assets/Scripts/Main/GameService.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using ExpressElevator.Command;
using ExpressElevator.Elevator;
using ExpressElevator.Event;
using ExpressElevator.Floor;
@@ -18,6 +19,7 @@ public class GameService : GenericMonoSingleton
public EventService EventService { get; private set; }
public FloorManager FloorManager { get; private set; }
public ElevatorService ElevatorService { get; private set; }
+ public CommandInvoker CommandInvoker { get; private set; }
[SerializeField]private UIService _uiService;
public UIService UIService => _uiService;
@@ -40,6 +42,7 @@ private void InitializeServices()
LevelService = new LevelService(_levelSO);
FloorManager = new FloorManager(_firstPosition);
ElevatorService = new ElevatorService(_elevatorPrefab);
+ CommandInvoker = new CommandInvoker();
_uiService.UIStart();
}
@@ -50,6 +53,7 @@ private void InjectDependencies()
LevelService.InjectDependecies(EventService,PassengerService,ElevatorService);
ElevatorService.InjectDependencies(LevelService,EventService);
_uiService.InjectDependencies(EventService);
+ CommandInvoker.InjectDependencies(EventService);
}
}
}
diff --git a/Assets/Scripts/Passenger/PassengerController.cs b/Assets/Scripts/Passenger/PassengerController.cs
index a4be498..c0f70ba 100644
--- a/Assets/Scripts/Passenger/PassengerController.cs
+++ b/Assets/Scripts/Passenger/PassengerController.cs
@@ -1,3 +1,4 @@
+using ExpressElevator.Command;
using ExpressElevator.Event;
using ExpressElevator.Floor;
using ExpressElevator.Level;
@@ -15,9 +16,11 @@ public class PassengerController
private FloorManager _floorManager;
private LevelService _levelService;
private PassengerStateMachine _passengerStateMachine;
+ private ICommand _addPassengerCommand;
private Vector3 _targetPosition;
private int _currentFloor;
private int _targetFloor;
+ private Vector3 _previousPosition;
private bool _entered = false;
public PassengerController(PassengerView passengerView,Vector3 passengerPosition,FloorManager floorManager,EventService eventService,int currentFloor,int targetFloor,LevelService levelService)
@@ -34,6 +37,7 @@ public PassengerController(PassengerView passengerView,Vector3 passengerPosition
_currentFloor = currentFloor;
_targetFloor = targetFloor;
_targetPosition = passengerPosition;
+ _addPassengerCommand = new BoardedPassenger();
AddPassenger();
AddListeners();
}
@@ -68,6 +72,16 @@ public void MoveToExit()
_eventService.OnPassengerReached.InvokeEvent(this);
}
+ public void SetQueuePosition(Vector3 position)
+ {
+ _previousPosition = position;
+ }
+
+ public void Reset()
+ {
+ _passengerView.SetTargetPosition(_previousPosition);
+ SetStateMachineState(PassengerState.NOT_SELECTED);
+ }
public void SetTargetPosition(Vector3 targetPosition)
{
_targetPosition = targetPosition;
@@ -79,11 +93,13 @@ private void AddPassenger()
private void AddListeners()
{
_eventService.MoveToLift.AddListener(_passengerView.MoveInsideLift);
+ _eventService.UndoClicked.AddListener(Undo);
+ //_eventService.Reset.AddListener(Reset);
}
-
+
public void AddPassengerToList()
{
- _eventService.OnMovingInPassenger.InvokeEvent(this);
+ _eventService.AddPassenger.InvokeEvent(this,_addPassengerCommand);
}
public int GetPassengerFloor()
{
@@ -103,6 +119,11 @@ public EventService GetEventService()
return _eventService;
}
+ public void Undo()
+ {
+ _eventService.Undo.InvokeEvent(this);
+ }
+
public void SetCurrentFloorPosition(Vector3 position)
{
_passengerView.transform.position = position;
@@ -112,5 +133,10 @@ public int GetTargetFloor()
{
return _targetFloor;
}
+
+ public Vector3 GetTargetPosition()
+ {
+ return _targetPosition;
+ }
}
}
diff --git a/Assets/Scripts/Passenger/PassengerView.cs b/Assets/Scripts/Passenger/PassengerView.cs
index 65718b2..67ce34f 100644
--- a/Assets/Scripts/Passenger/PassengerView.cs
+++ b/Assets/Scripts/Passenger/PassengerView.cs
@@ -7,7 +7,7 @@ namespace ExpressElevator.Passenger
{
public class PassengerView : MonoBehaviour
{
- private PassengerController _passengerController;
+ public PassengerController _passengerController { get; private set; }
public PassengerState _passengerState;
diff --git a/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelController.cs b/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelController.cs
index 677d30a..b0bb7d7 100644
--- a/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelController.cs
+++ b/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelController.cs
@@ -16,7 +16,7 @@ public ElevatorControlPannelController(ElevatorControlPannelView elevatorControl
_elevatorControlPannelView = elevatorControlPannelView;
_elevatorControlPannelView.SetController(this);
}
-
+
public void InjectDependencies(EventService eventService)
{
_eventService = eventService;
@@ -45,6 +45,10 @@ public void OnThirdFloorClicked()
SetPassengerState();
}
+ public void OnUndoClicked()
+ {
+ _eventService.UndoClicked.InvokeEvent();
+ }
public void SetPassengerState()
{
_eventService.OnControlPannelClicked.InvokeEvent();
diff --git a/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelView.cs b/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelView.cs
index 3b83ca7..85e40af 100644
--- a/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelView.cs
+++ b/Assets/Scripts/UI/ElevatorControlPannel/ElevatorControlPannelView.cs
@@ -12,6 +12,7 @@ public class ElevatorControlPannelView : MonoBehaviour,IUIView
[SerializeField] private Button _firstButton;
[SerializeField] private Button _secondButton;
[SerializeField] private Button _thirdButton;
+ [SerializeField] private Button _undoButton;
private void Start() => SubscribeButtonClicks();
@@ -22,6 +23,7 @@ private void SubscribeButtonClicks()
_firstButton.onClick.AddListener(_controller.OnFirstFloorClicked);
_secondButton.onClick.AddListener(_controller.OnSecondFloorClicked);
_thirdButton.onClick.AddListener(_controller.OnThirdFloorClicked);
+ _undoButton.onClick.AddListener(_controller.OnUndoClicked);
}
public void SetController(ElevatorControlPannelController controller)
diff --git a/Assets/Scripts/UI/UIService.cs b/Assets/Scripts/UI/UIService.cs
index 77620d8..21ea3bc 100644
--- a/Assets/Scripts/UI/UIService.cs
+++ b/Assets/Scripts/UI/UIService.cs
@@ -1,4 +1,5 @@
using ExpressElevator.Event;
+using ExpressElevator.Passenger;
using UnityEngine;
namespace ExpressElevator.UI
diff --git a/Assets/Sprites/ControlPannel/CoverUp.png b/Assets/Sprites/ControlPannel/CoverUp.png
new file mode 100644
index 0000000..7aff3d6
Binary files /dev/null and b/Assets/Sprites/ControlPannel/CoverUp.png differ
diff --git a/Assets/Sprites/ControlPannel/CoverUp.png.meta b/Assets/Sprites/ControlPannel/CoverUp.png.meta
new file mode 100644
index 0000000..c972503
--- /dev/null
+++ b/Assets/Sprites/ControlPannel/CoverUp.png.meta
@@ -0,0 +1,168 @@
+fileFormatVersion: 2
+guid: 075df01a307e2c14192e57d2a6037c82
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: 6227875373785053427
+ second: CoverUp_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites:
+ - serializedVersion: 2
+ name: CoverUp_0
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 152
+ height: 609
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: 3f87cdfd7abdd6650800000000000000
+ internalID: 6227875373785053427
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sprites/ControlPannel/Undo-Photoroom.png b/Assets/Sprites/ControlPannel/Undo-Photoroom.png
new file mode 100644
index 0000000..290684a
Binary files /dev/null and b/Assets/Sprites/ControlPannel/Undo-Photoroom.png differ
diff --git a/Assets/Sprites/ControlPannel/Undo-Photoroom.png.meta b/Assets/Sprites/ControlPannel/Undo-Photoroom.png.meta
new file mode 100644
index 0000000..070e0b6
--- /dev/null
+++ b/Assets/Sprites/ControlPannel/Undo-Photoroom.png.meta
@@ -0,0 +1,168 @@
+fileFormatVersion: 2
+guid: 8f41e9100ef952c468e6bde2c6bb48c9
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: 934592570805267804
+ second: Undo-Photoroom_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites:
+ - serializedVersion: 2
+ name: Undo-Photoroom_0
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 150
+ height: 148
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: c5d2190ddf658fc00800000000000000
+ internalID: 934592570805267804
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sprites/ControlPannel/pannel-Photoroom.png b/Assets/Sprites/ControlPannel/pannel-Photoroom.png
new file mode 100644
index 0000000..bc13261
Binary files /dev/null and b/Assets/Sprites/ControlPannel/pannel-Photoroom.png differ
diff --git a/Assets/Sprites/ControlPannel/pannel-Photoroom.png.meta b/Assets/Sprites/ControlPannel/pannel-Photoroom.png.meta
new file mode 100644
index 0000000..bd3483b
--- /dev/null
+++ b/Assets/Sprites/ControlPannel/pannel-Photoroom.png.meta
@@ -0,0 +1,168 @@
+fileFormatVersion: 2
+guid: 5a2e4ed0564466b4c94c62ad161b0406
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: -8367254710825533528
+ second: pannel-Photoroom_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites:
+ - serializedVersion: 2
+ name: pannel-Photoroom_0
+ rect:
+ serializedVersion: 2
+ x: 368
+ y: 29
+ width: 504
+ height: 796
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: 8afb7001c2a81eb80800000000000000
+ internalID: -8367254710825533528
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant: