Initial commit

This commit is contained in:
HussienX72u
2026-07-21 08:56:10 +03:00
commit 4017028111
9410 changed files with 2150500 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
@startuml
abstract class Block {
- blockData : BlockData
- blockId : string
+ {abstract} setupBlock() : void
+ {abstract} simulate() : void
+ getBlockData() : BlockData
+ SetBlockData(BD:BlockData) : void
+ setBlockId(id:string) : void
+ getBlockId() : string
}
MonoBehaviour <|-- Block
@enduml
+9
View File
@@ -0,0 +1,9 @@
@startuml
class BlockData {
+ blockName : string
+ blockPrefab : GameObject
+ associatedCategory : CategoryData
+ icon : Texture2D
}
ScriptableObject <|-- BlockData
@enduml
+13
View File
@@ -0,0 +1,13 @@
@startuml
class BlockFactory {
- {static} Instance : BlockFactory
- environment : Environment
- blockDataList : List<BlockData>
- blocksData : Dictionary<string, BlockData>
+ {static} getInstance() : BlockFactory
- Awake() : void
- Start() : void
+ createblock(prefabId:string, position:Vector3, rotation:Quaternion, id:string, layerDiff:bool) : GameObject
}
MonoBehaviour <|-- BlockFactory
@enduml
+8
View File
@@ -0,0 +1,8 @@
@startuml
class CategoryData {
+ ID : string
+ blocks : List<BlockData>
+ icon : Sprite
}
ScriptableObject <|-- CategoryData
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
class CodingBlock {
+ <<override>> setupBlock() : void
+ <<override>> simulate() : void
}
Block <|-- CodingBlock
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
class ElectricalBlock {
+ <<override>> setupBlock() : void
+ <<override>> simulate() : void
}
Block <|-- ElectricalBlock
@enduml
+19
View File
@@ -0,0 +1,19 @@
@startuml
class Environment {
- {static} instance : Environment
- blockRegistry : Dictionary<string, Block>
+ onBlockAddedEvent : UnityEvent<Block>
+ onBlockRemovedEvent : UnityEvent<Block>
+ onChangeEvent : UnityEvent
+ {static} getInstance() : Environment
+ getBlockRegistry() : Dictionary<String, Block>
- Awake() : void
+ addBlock(block:Block, existingUUID:string) : void
+ removeBlock(uuid:string) : void
+ applyChanges() : void
+ completeDestroyBlock(block:Block) : void
+ getBlock(uuid:string) : Block
+ clearEnvironment() : void
}
MonoBehaviour <|-- Environment
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
class MechanicalBlock {
+ <<override>> setupBlock() : void
+ <<override>> simulate() : void
}
Block <|-- MechanicalBlock
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
class MechanicalJoint {
+ <<override>> setupBlock() : void
+ <<override>> simulate() : void
}
Block <|-- MechanicalJoint
@enduml
+39
View File
@@ -0,0 +1,39 @@
@startuml
class CameraControl {
- inputProvider : BaseInputProvider
+ pivotPoint : Transform
+ obstacleLayer : LayerMask
+ panSpeed : float = 0.5f
+ rotateSpeed : float = 5.0f
+ zoomSpeed : float = 5.0f
+ minZoom : float = 2.0f
+ maxZoom : float = 50.0f
+ enableSmoothing : bool = true
+ smoothTime : float = 0.1f
- _targetPosition : Vector3
- _targetRotation : Quaternion
- _targetZoom : float
- _currentVelocity : Vector3
- _isPanning : bool
- _isOrbiting : bool
- _cursorScreenPos : Vector2
- _cam : Camera
+ isInputLocked : bool = false
- isInitialized : bool = false
- Start() : void
- OnEnable() : void
- OnDisable() : void
- LateUpdate() : void
- OnCursorMoved(screenPos:Vector2) : void
- OnPanStart(cursorScreenPos:Vector2) : void
- OnPanEnd() : void
- OnRotateStart() : void
- OnRotateEnd() : void
- OnCursorDelta(delta:Vector2) : void
- OnZoom(scrollValue:float) : void
- ApplyMovement() : void
+ SnapToDirection(direction:Vector3) : void
- OnDrawGizmos() : void
}
MonoBehaviour <|-- CameraControl
@enduml
+21
View File
@@ -0,0 +1,21 @@
@startuml
class ViewCubeController {
+ mainCam : Camera
+ viewCubeCam : Camera
- CameraController : CameraControl
+ viewCubeImage : RawImage
- eventTrigger : EventTrigger
- isPointerInViewCube : bool = false
- cubeContainer : Transform
+ viewCubeLayer : LayerMask
- rawImageRect : RectTransform
- debugRay : Ray
- Start() : void
- Update() : void
- RotateCube() : void
- CalculateCurrentRay() : void
- DetectClick() : void
- OnDrawGizmos() : void
}
MonoBehaviour <|-- ViewCubeController
@enduml
+17
View File
@@ -0,0 +1,17 @@
@startuml
class CommandDTO {
- commandName : string
- parameters : Dictionary<string, object>
+ CommandName : string <<get>>
+ Parameters : Dictionary<string, object> <<get>>
+ converToCommand() : ICommand
}
class CommandDTOBuilder {
- commandName : string
- parameters : Dictionary<string, object>
+ SetCommandName(name:string) : CommandDTOBuilder
+ AddParameter(key:string, value:object) : CommandDTOBuilder
+ Build() : CommandDTO
}
CommandDTO +-- CommandDTOBuilder
@enduml
+20
View File
@@ -0,0 +1,20 @@
@startuml
class CommandHandler {
- {static} instance : CommandHandler
- commandManager : CommandManager
- environment : Environment
+ {static} getInstance() : CommandHandler
- Awake() : void
- Start() : void
- Update() : void
+ createBlock(prefabId:string, position:Vector3, rotation:Quaternion) : void
+ moveBlock(blockId:string, prePosition:Vector3, newPosition:Vector3, preRotation:Quaternion, newRotation:Quaternion) : void
+ removeBlock(blockId:string) : void
+ removeGroup(blockIds:List<string>) : void
+ rotateBlock(blockId:string, newRotation:Quaternion) : void
+ undoAction() : void
+ redoAction() : void
+ clearHistory() : void
}
MonoBehaviour <|-- CommandHandler
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class CommandManager {
- {static} instance : CommandManager
- commandStack : LinkedList<ICommand>
- redoStack : LinkedList<ICommand>
- maxCapacity : int = 100
- CommandManager()
+ {static} getInstance() : CommandManager
+ setMaxCapacity(capacity:int) : void
+ executeCommand(command:ICommand) : void
+ undo() : void
+ redo() : ICommand
+ clearHistory() : void
}
@enduml
@@ -0,0 +1,18 @@
@startuml
class CreateBlockCommand {
- prefabId : string
- position : Vector3
- rotation : Quaternion
- objectCreated : GameObject
- blockId : string
- layerDiff : bool
- factory : BlockFactory
- environment : Environment
+ CreateBlockCommand(prefabId:string, position:Vector3, rotation:Quaternion, LayerDiff:bool)
+ CreateBlockCommand(commandDTO:CommandDTO)
+ execute() : void
+ undo() : void
+ toDTO() : CommandDTO
}
ICommand <|-- CreateBlockCommand
@enduml
@@ -0,0 +1,16 @@
@startuml
class DeleteBlockCommand {
- blockId : string
- prefabDeletedId : string
- blockInitialPosition : Vector3
- blockInitialRotation : Quaternion
- factory : BlockFactory
- environment : Environment
+ DeleteBlockCommand(blockId:string)
+ DeleteBlockCommand(commandDTO:CommandDTO)
+ execute() : void
+ undo() : void
+ toDTO() : CommandDTO
}
ICommand <|-- DeleteBlockCommand
@enduml
@@ -0,0 +1,12 @@
@startuml
class DeleteGroupCommand {
- blocksId : List<string>
- deleteBlockCommands : List<DeleteBlockCommand>
+ DeleteGroupCommand(blocksId:List<string>)
+ DeleteGroupCommand(commandDTO:CommandDTO)
+ execute() : void
+ undo() : void
+ toDTO() : CommandDTO
}
ICommand <|-- DeleteGroupCommand
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
interface ICommand {
execute() : void
undo() : void
toDTO() : CommandDTO
}
@enduml
@@ -0,0 +1,17 @@
@startuml
class MoveBlockCommand {
- blockId : string
- previousPosition : Vector3
- previousRotation : Quaternion
- newPosition : Vector3
- newRotation : Quaternion
- environment : Environment
- blockTransform : Transform
+ MoveBlockCommand(blockId:string, previousPosition:Vector3, newPosition:Vector3, previousRotation:Quaternion, newRotation:Quaternion)
+ MoveBlockCommand(commandDTO:CommandDTO)
+ execute() : void
+ undo() : void
+ toDTO() : CommandDTO
}
ICommand <|-- MoveBlockCommand
@enduml
@@ -0,0 +1,15 @@
@startuml
class RotateblockCommand {
- blockId : string
- newRotation : Quaternion
- previousRotation : Quaternion
- environment : Environment
- blockTransform : Transform
+ RotateblockCommand(blockId:string, newRotation:Quaternion)
+ RotateblockCommand(commandDTO:CommandDTO)
+ execute() : void
+ undo() : void
+ toDTO() : CommandDTO
}
ICommand <|-- RotateblockCommand
@enduml
+23
View File
@@ -0,0 +1,23 @@
@startuml
abstract class BaseInputProvider {
+ OnCursorMoved : UnityEvent<Vector2>
+ OnCursorDelta : UnityEvent<Vector2>
+ OnPanStart : UnityEvent<Vector2>
+ OnPanEnd : UnityEvent
+ OnRotateStart : UnityEvent
+ OnRotateEnd : UnityEvent
+ OnZoom : UnityEvent<float>
+ OnRotate : UnityEvent
+ OnPlace : UnityEvent
+ OnDraggingEnd : UnityEvent
+ OnSelect : UnityEvent
+ OnEnableMultiSelect : UnityEvent
+ OnDisableMultiSelect : UnityEvent
+ OnCancel : UnityEvent
+ OnDelete : UnityEvent
+ OnChangeAttachPoint : UnityEvent<int>
+ <<virtual>> Enable() : void
+ <<virtual>> Disable() : void
}
MonoBehaviour <|-- BaseInputProvider
@enduml
+17
View File
@@ -0,0 +1,17 @@
@startuml
enum InputMode {
Camera,
ObjectDragging,
UI,
Gizmo,
}
class InputModeManager {
- {static} <<readonly>> _list : List<InputMode>
+ {static} Current : InputMode <<get>>
+ {static} Push(mode:InputMode) : void
+ {static} Pop(mode:InputMode) : void
+ {static} Has(mode:InputMode) : bool
+ {static} Is(mode:InputMode) : bool
+ {static} debugCurrentList() : void
}
@enduml
+10
View File
@@ -0,0 +1,10 @@
@startuml
class InputProviderManager {
- {static} instance : InputProviderManager
- currentInputProvider : BaseInputProvider
- Awake() : void
+ {static} getInstance() : InputProviderManager
+ getCurrentInputProvider() : BaseInputProvider
}
MonoBehaviour <|-- InputProviderManager
@enduml
+6
View File
@@ -0,0 +1,6 @@
@startuml
class MobileInputProvider {
- Start() : void
}
BaseInputProvider <|-- MobileInputProvider
@enduml
+35
View File
@@ -0,0 +1,35 @@
@startuml
class PCIntputProvider {
+ mousePosition : InputAction
+ mouseDelta : InputAction
+ scrollAction : InputAction
+ panAction : InputAction
+ orbitAction : InputAction
+ rotateAction : InputAction
+ placeAction : InputAction
+ EndDraggingAction : InputAction
+ selectAction : InputAction
+ cancelAction : InputAction
+ deleteAction : InputAction
+ enableMultiSelectAction : InputAction
+ disableMultiSelectAction : InputAction
- OnEnable() : void
- OnDisable() : void
- OnInputSystem_Move(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Delta(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Scroll(ctx:InputAction.CallbackContext) : void
- OnInputSystem_PanStart(ctx:InputAction.CallbackContext) : void
- OnInputSystem_PanEnd(ctx:InputAction.CallbackContext) : void
- OnInputSystem_OrbitStart(ctx:InputAction.CallbackContext) : void
- OnInputSystem_OrbitEnd(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Rotate(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Place(ctx:InputAction.CallbackContext) : void
- OnInputSystem_DraggingEnd(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Cancel(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Select(ctx:InputAction.CallbackContext) : void
- OnInputSystem_EnableMultiSelect(ctx:InputAction.CallbackContext) : void
- OnInputSystem_DisableMultiSelect(ctx:InputAction.CallbackContext) : void
- OnInputSystem_Delete(ctx:InputAction.CallbackContext) : void
}
BaseInputProvider <|-- PCIntputProvider
@enduml
@@ -0,0 +1,18 @@
@startuml
class BaseInteractable {
+ onSelectEnterEvent : UnityEvent
+ onSelectExitEvent : UnityEvent
+ onHoverEnterEvent : UnityEvent
+ onHoverExitEvent : UnityEvent
+ <<virtual>> onHoverEnter() : void
+ <<virtual>> onHoverExit() : void
- OnMouseEnter() : void
- OnMouseExit() : void
+ <<virtual>> onSelectEnter() : void
+ <<virtual>> onSelectExit() : void
+ <<virtual>> highLightOn() : void
+ <<virtual>> highLightOff() : void
}
MonoBehaviour <|-- BaseInteractable
IInteractable <|-- BaseInteractable
@enduml
@@ -0,0 +1,17 @@
@startuml
class GrabInteractable {
- attachPoint : Transform
+ alignToSurfaceNormal : bool = true
+ alignmentSpeed : float = 15f
+ snapRotation : bool = false
+ followSpeed : float = 20f
+ heightOffset : float = 0f
- validator : IValidator
+ validTint : Color
+ invalidTint : Color
+ GetAttachPoint() : Transform
+ SetAttachPoint(attachPoint:Transform) : void
+ GetValidator() : IValidator
}
MonoBehaviour <|-- GrabInteractable
@enduml
@@ -0,0 +1,11 @@
@startuml
class HoveredUI {
- ghostManager : GhostManager
- Start() : void
+ OnPointerEnter(eventData:PointerEventData) : void
+ OnPointerExit(eventData:PointerEventData) : void
}
MonoBehaviour <|-- HoveredUI
IPointerEnterHandler <|-- HoveredUI
IPointerExitHandler <|-- HoveredUI
@enduml
@@ -0,0 +1,11 @@
@startuml
interface IInteractable {
transform : Transform <<get>>
onSelectEnter() : void
onSelectExit() : void
onHoverEnter() : void
onHoverExit() : void
highLightOn() : void
highLightOff() : void
}
@enduml
@@ -0,0 +1,16 @@
@startuml
class UIInteractable {
- uIManager : UIManager
- blockData : BlockData
- isSelected : bool = false
- originalColor : Color
- Start() : void
+ <<override>> onSelectEnter() : void
+ <<override>> onSelectExit() : void
<<internal>> getAssociatedBlockData() : BlockData
+ setBlockData(blockData:BlockData) : void
+ OnPointerDown(eventData:PointerEventData) : void
}
BaseInteractable <|-- UIInteractable
IPointerDownHandler <|-- UIInteractable
@enduml
@@ -0,0 +1,11 @@
@startuml
class DeleteInteractor {
- inputProvider : BaseInputProvider
- commandHandler : CommandHandler
- selectionManager : SelectionManager
- Start() : void
+ DeleteObjects() : void
- FindBlockIndex(obj:GameObject) : string
}
MonoBehaviour <|-- DeleteInteractor
@enduml
@@ -0,0 +1,22 @@
@startuml
class RayInteractor {
- {static} instance : RayInteractor
+ {static} getInstance() : RayInteractor
- gizmoLayerMask : LayerMask
- interactableLayerMask : LayerMask
- worldLayerMask : LayerMask
- inputProvider : BaseInputProvider
- mainCamera : Camera
- lastHit : RaycastHit
- currentGizmo : GameObject
+ OnWorldClick : UnityEvent
+ OnSelectEvent : UnityEvent<IInteractable>
- Awake() : void
- Start() : void
- SetupInput() : void
+ GetHitInfo(hitInfo:RaycastHit) : bool
+ GetCurrentGizmo() : GameObject
+ GetHitPosition() : Vector3
}
MonoBehaviour <|-- RayInteractor
@enduml
@@ -0,0 +1,18 @@
@startuml
class SnapSystem {
- {static} instance : SnapSystem
+ {static} getInstance() : SnapSystem
- socketDetectionRadius : float = 0.5f
- <<readonly>> nearbySockets : List<SocketPoint>
- <<readonly>> visitedRoots : HashSet<Transform>
- closestSocket : SocketPoint
- Awake() : void
+ UpdateSockets(detectionPoint:Vector3, ghostRoot:Transform) : void
+ ClearHighlights() : void
+ Clear() : void
+ GetNearbySockets() : List<SocketPoint>
+ GetClosestSocket() : SocketPoint
- {static} FindClosest(position:Vector3, sockets:List<SocketPoint>) : SocketPoint
}
MonoBehaviour <|-- SnapSystem
@enduml
@@ -0,0 +1,7 @@
@startuml
class TestCommandInteractor {
- commandHandler : CommandHandler
- Update() : void
}
MonoBehaviour <|-- TestCommandInteractor
@enduml
@@ -0,0 +1,20 @@
@startuml
class AxisMoveStrategy {
- <<readonly>> _lockedRotation : Quaternion
- _isDragging : bool
- _axisDirection : Vector3
- _axisOrigin : Vector3
- _clampMin : float
- _clampMax : float
- _camera : Camera
- _frozenPosition : Vector3
- _lastMousePos : Vector2
- _accumulated : float
+ AxisMoveStrategy(lockedRotation:Quaternion, clampMin:float, clampMax:float)
+ BeginDrag(axisDirection:Vector3, ghostPosition:Vector3) : void
+ EndDrag() : void
+ UpdateMovement(ctx:GhostMovementContext) : void
- TrySocketSnap(ctx:GhostMovementContext) : bool
}
IGhostMovementStrategy <|-- AxisMoveStrategy
@enduml
@@ -0,0 +1,24 @@
@startuml
class AxisRotateStrategy {
+ OverridesSurfaceTracking : bool <<get>>
- <<readonly>> _localAxis : LocalAxis
- <<readonly>> _lockedPosition : Vector3
- _isRotating : bool
- _pendingDegrees : float
- _lastMousePos : Vector2
+ Sensitivity : float = 0.4f
+ AxisRotateStrategy(localAxis:LocalAxis, lockedPosition:Vector3)
+ BeginRotate() : void
+ EndRotate() : void
+ UpdateMovement(ctx:GhostMovementContext) : void
- GetWorldAxis(t:Transform) : Vector3
- {static} SnapToNearestRightAngle(q:Quaternion) : Quaternion
}
enum LocalAxis {
Up,
Forward,
Right,
}
IGhostMovementStrategy <|-- AxisRotateStrategy
AxisRotateStrategy +-- LocalAxis
@enduml
@@ -0,0 +1,12 @@
@startuml
class FreeMoveStrategy {
+ UpdateMovement(ctx:GhostMovementContext) : void
- {static} TrySocketSnap(ctx:GhostMovementContext) : bool
- {static} PerformSocketSnap(ctx:GhostMovementContext) : void
- {static} AlignToSurfaceNormal(ctx:GhostMovementContext) : void
- {static} MoveAlongSurface(ctx:GhostMovementContext) : void
- {static} GetCurrentPivot(ctx:GhostMovementContext) : Transform
- {static} SnapToNearestRightAngle(q:Quaternion) : Quaternion
}
IGhostMovementStrategy <|-- FreeMoveStrategy
@enduml
@@ -0,0 +1,16 @@
@startuml
struct GhostMovementContext {
+ <<readonly>> GhostTransform : Transform
+ <<readonly>> SurfacePoint : Vector3
+ <<readonly>> SurfaceNormal : Vector3
+ <<readonly>> MySocket : SocketPoint
+ <<readonly>> TargetSocket : SocketPoint
+ <<readonly>> AttachPoint : Transform
+ <<readonly>> FollowSpeed : float
+ <<readonly>> HeightOffset : float
+ <<readonly>> AlignToSurfaceNormal : bool
+ <<readonly>> SnapRotation : bool
+ RotationAxis : Vector3
+ GhostMovementContext(ghostTransform:Transform, surfacePoint:Vector3, surfaceNormal:Vector3, mySocket:SocketPoint, targetSocket:SocketPoint, attachPoint:Transform, followSpeed:float, heightOffset:float, alignToSurfaceNormal:bool, snapRotation:bool)
}
@enduml
@@ -0,0 +1,18 @@
@startuml
class GhostStrategyHandler {
- {static} instance : GhostStrategyHandler
+ {static} getInstance() : GhostStrategyHandler
- ghostManager : GhostManager
- Awake() : void
- Start() : void
+ StartDraggingRight() : void
+ StartDraggingUp() : void
+ StartDraggingForward() : void
+ EndDragging() : void
+ StartRotatingRight() : AxisRotateStrategy
+ StartRotatingUp() : AxisRotateStrategy
+ StartRotatingForward() : AxisRotateStrategy
+ StartRotation() : void
}
MonoBehaviour <|-- GhostStrategyHandler
@enduml
@@ -0,0 +1,41 @@
@startuml
class GhostStrategyTester {
+ TestTarget : GameObject
+ ClampMin : float
+ ClampMax : float = 5f
+ RotateSensitivity : float = 0.4f
- _mode : Mode
- _moveStrat : AxisMoveStrategy
- _rotStrat : AxisRotateStrategy
- _isEditing : bool
- _buttonHeld : bool
- _activeAxisIndex : int
- _lastMouseX : float
- _editingOrigin : Vector3
- {static} <<readonly>> AxisColors : Color[]
- {static} <<readonly>> AxisLabels : string[]
- {static} <<readonly>> LocalMoveAxes : Vector3[]
- {static} <<readonly>> RotateAxes : AxisRotateStrategy.LocalAxis[]
- <<const>> BtnW : float = 96f
- <<const>> BtnH : float = 36f
- <<const>> PadX : float = 12f
- <<const>> PadY : float = 8f
- Start() : void
- OnGUI() : void
- DrawAxisButton(i:int, rect:Rect) : void
- OnAxisButtonDown(axisIndex:int) : void
- OnAxisButtonUp() : void
- EnsureEditing() : void
- CommitEdit() : void
- StopEditing() : void
- ResetState() : void
- DrawModeButton(label:string, target:Mode, rect:Rect) : void
}
enum Mode {
None,
AxisMove,
AxisRotate,
}
MonoBehaviour <|-- GhostStrategyTester
GhostStrategyTester +-- Mode
@enduml
@@ -0,0 +1,5 @@
@startuml
interface IGhostMovementStrategy {
UpdateMovement(ctx:GhostMovementContext) : void
}
@enduml
@@ -0,0 +1,72 @@
@startuml
class GhostManager {
- {static} instance : GhostManager
+ {static} getInstance() : GhostManager
- selectedBlockData : BlockData
- ghostObject : GameObject
- canPlace : bool = false
- onClearEvent : UnityEvent
- alignToSurfaceNormal : bool = true
- snapRotation : bool = false
- followSpeed : float = 20f
- heightOffset : float = 0f
- validTint : Color
- invalidTint : Color
- attachPoint : Transform
- validator : IValidator
- isValidPlacement : bool = true
- currentSurfaceNormal : Vector3
- currentSurfacePoint : Vector3
- rotationAxis : Vector3
- ghostRenderers : Renderer[]
- container : SocketContainer
- jointBlock : JointBlock
- block : Block
- isDragged : bool = false
- isJustPlaced : bool = false
- editingSourceObject : GameObject
- editingOriginalPos : Vector3
- editingOriginalRot : Quaternion
- isEditingExisting : bool
- currentStrategy : IGhostMovementStrategy
+ SetMovementStrategy(strategy:IGhostMovementStrategy) : void
- rayInteractor : RayInteractor
- snappingSystem : SnapSystem
- environment : Environment
- commandHandler : CommandHandler
- socketIterator : SocketIterator
- inputProvider : BaseInputProvider
- Awake() : void
- Start() : void
- Update() : void
+ GhostTransform : Transform <<get>>
+ setDrag(drag:bool) : void
- OnPlace() : void
+ ForcePlace() : void
- resetPlaced() : IEnumerator
- OnPlaceWithDragging() : void
- PlaceBlock() : void
- CommitExistingBlock() : void
+ SetupBlock(blockData:BlockData) : void
+ SetupExistingBlock(sourceObject:GameObject, strategy:IGhostMovementStrategy) : void
- InitialiseGhostFromObject(ghost:GameObject) : void
+ HasActiveGhost() : bool
+ isGhost(obj:GameObject) : bool
+ ClearGhost() : void
+ ClearGhostData() : void
- UpdateSurfaceTracking() : void
- UpdateVisualFeedback(isValid:bool) : void
- {static} SetLayerRecursively(obj:GameObject, layer:int, Method:Func<Transform, bool>) : void
- {static} SetLayerRecursively(obj:GameObject, layer:int) : void
- {static} RestoreMaterialAlpha(obj:GameObject, Method:Func<GameObject, bool>) : void
- {static} RestoreMaterialAlpha(obj:GameObject) : void
- {static} RestoreMaterialColor(obj:GameObject, Method:Func<GameObject, bool>) : void
- {static} RestoreMaterialColor(obj:GameObject) : void
+ onClearAddListener(action:UnityAction) : void
+ setupBlock(blockData:BlockData) : void
+ clearGhost() : void
+ clearGhostData() : void
- afterCreation(blockObj:GameObject) : void
}
MonoBehaviour <|-- GhostManager
@enduml
@@ -0,0 +1,14 @@
@startuml
class InteractionManager {
- {static} instance : InteractionManager
- commandHandler : CommandHandler
- ghostManager : GhostManager
- selectionManager : SelectionManager
- uiManager : UIManager
- Awake() : void
+ {static} getInstance() : InteractionManager
- Start() : void
- setupListeners() : void
}
MonoBehaviour <|-- InteractionManager
@enduml
@@ -0,0 +1,18 @@
@startuml
class SelectionManager {
- {static} instance : SelectionManager
+ {static} getInstance() : SelectionManager
- rayInteractor : RayInteractor
- inputProvider : BaseInputProvider
- <<readonly>> currentSelections : List<IInteractable>
- multiSelectEnabled : bool = false
+ SelectionEvent : UnityEvent<IInteractable>
- Awake() : void
- Start() : void
- HandleSelect(interactable:IInteractable) : void
+ GetCurrentSelections() : List<IInteractable>
+ ClearSelection() : void
+ HasOneSelection() : bool
}
MonoBehaviour <|-- SelectionManager
@enduml
@@ -0,0 +1,18 @@
@startuml
class SocketManagerChecker {
- environment : Environment
- ghostManager : GhostManager
- rayInteractor : RayInteractor
- jointPlacementHandler : JointPlacementHandler
- socketTolerance : float = 0.5f
- Start() : void
- OnRemove(arg0:Block) : void
- OnAdd(arg0:Block) : void
- OnBlockRemoved(arg0:Block) : void
- OnJointRemoved(arg0:Block) : void
- OnBlockAdded(arg0:Block) : void
- OnJointAdded(arg0:Block) : void
- getClosestSocketBy(socketPoint:SocketPoint, tol:float) : SocketPoint
}
MonoBehaviour <|-- SocketManagerChecker
@enduml
@@ -0,0 +1,14 @@
@startuml
class UIManager {
- {static} instance : UIManager
- currentSelectedUIInteractable : UIInteractable
- currentSelectedData : BlockData
+ onSelectEvent : UnityEvent<BlockData>
- currentCategory : CategoryData
- Awake() : void
+ {static} getInstance() : UIManager
+ selectUIInteractable(uiInteractable:UIInteractable) : void
+ deselectUIInteractable() : void
}
MonoBehaviour <|-- UIManager
@enduml
+9
View File
@@ -0,0 +1,9 @@
@startuml
class BlockNode {
+ blockData : BlockData
+ position : Vector3
+ rotation : Quaternion
+ matchedNode : BlockNode
+ BlockNode(blockData:BlockData, position:Vector3, rotation:Quaternion)
}
@enduml
+7
View File
@@ -0,0 +1,7 @@
@startuml
class BlocksGraph {
- graph : Dictionary<BlockNode, List<BlockNode>>
- root : BlockNode
}
ScriptableObject <|-- BlocksGraph
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class BlocksMap {
+ blocks : Dictionary<string, Dictionary<Vector3, BlockNode>>
+ allNodes : List<BlockNode>
+ rootNode : BlockNode
+ calcTotalNodes() : long
+ init(blocksMap:BlocksMap) : void
- OnEnable() : void
- RebuildDictionary() : void
+ setRootNode(node:BlockNode) : void
+ {static} RoundPosition(position:Vector3, precision:float) : Vector3
+ {static} RoundRotation(rotation:Quaternion, precision:float) : Quaternion
}
ScriptableObject <|-- BlocksMap
@enduml
@@ -0,0 +1,28 @@
@startuml
class ModelCheckManager {
- {static} instance : ModelCheckManager
+ {static} getInstance() : ModelCheckManager
- environment : Environment
- blocksMap : BlocksMap
- currentMap : BlocksMap
- validNodes : long
- invalidNodes : long
- totalNodes : long
+ OnAllValidEvent : UnityEvent
+ OnValidNodeEvent : UnityEvent
+ OnInvalidNodeEvent : UnityEvent
+ newMapName : string = "NewBlocksMap"
- debug : bool = false
+ setBlockMap(map:BlocksMap) : void
- Start() : void
+ Initialize() : void
- createBlockNode(blockData:BlockData, position:Vector3, rotation:Quaternion) : BlockNode
- Awake() : void
+ addNode(node:BlockNode) : void
+ removeNode(blockName:string, position:Vector3) : void
- tryMarkNode(node:BlockNode) : bool
- matchRotation(node1:BlockNode, node2:BlockNode) : bool
- debugisValid(node:BlockNode) : void
}
MonoBehaviour <|-- ModelCheckManager
@enduml
@@ -0,0 +1,7 @@
@startuml
class GizmoFMoveElement {
- Start() : void
- Update() : void
}
MonoBehaviour <|-- GizmoFMoveElement
@enduml
+22
View File
@@ -0,0 +1,22 @@
@startuml
enum GizmoDirection {
X,
Y,
Z,
}
class GizmoMoveElement {
- direction : GizmoDirection
- attachedTransform : Transform
- moveStrategy : AxisMoveStrategy
- ghostManager : GhostManager
- OGMat : Material
- SelectedMat : Material
- Start() : void
+ getDirection() : GizmoDirection
+ onSelectEnter() : void
+ onSelectExit() : void
+ ResetMat() : void
- GetAxisDirection() : Vector3
}
MonoBehaviour <|-- GizmoMoveElement
@enduml
@@ -0,0 +1,19 @@
@startuml
class GizmoRotateElement {
- direction : GizmoDirection
- rotationSensitivity : float = 0.3f
- SelectedMat : Material
- attachedTransform : Transform
- rotateStrategy : AxisRotateStrategy
- ghostManager : GhostManager
- OGMat : Material
- isDragging : bool
- lastMousePos : Vector2
- Start() : void
+ onSelectEnter() : void
+ onSelectExit() : void
+ ResetMat() : void
- GetLocalAxis() : AxisRotateStrategy.LocalAxis
}
MonoBehaviour <|-- GizmoRotateElement
@enduml
@@ -0,0 +1,10 @@
@startuml
class MultiSelectValidationCheck {
- selectionManager : SelectionManager
- BarTransform : RectTransform
- OriginalBarTransform : Vector2
- Start() : void
+ SelectedItem(interactable:IInteractable) : void
}
MonoBehaviour <|-- MultiSelectValidationCheck
@enduml
+33
View File
@@ -0,0 +1,33 @@
@startuml
class TransformManager {
- FreeMove : Toggle
- AxialMove : Toggle
- AxialRotate : Toggle
- selectionManager : SelectionManager
- mianCamera : Camera
- FMoveEn : bool = false
- gizmosMovePrefab : GameObject
- gizmosRotatePrefab : GameObject
- scaleFactor : float = 1
- currentGizmosMove : GameObject
- currentGizmosRotate : GameObject
- CurrentSelection : IInteractable
- GhostSH : GhostStrategyHandler
- MElement : GizmoMoveElement
- RElement : GizmoRotateElement
- RayInteractor : RayInteractor
- GizmosArray : Transform[]
- IsSelected : bool = false
- UnSelectedMaterial : Material
- Start() : void
- Update() : void
- SelectionToMGizmo(element:GizmoMoveElement) : void
- SelectionToRGizmo(element:GizmoRotateElement) : void
- GizmoDeselect() : void
- FMove(Trigger:bool) : void
- AMove(Trigger:bool) : void
- ARot(Trigger:bool) : void
- SetCurrent(interactable:IInteractable) : void
}
MonoBehaviour <|-- TransformManager
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class CommandSaveHandler {
- {static} instance : CommandSaveHandler
- commandList : LinkedList<CommandDTO>
- saveFilePath : string
+ {static} getInstance() : CommandSaveHandler
+ setFileName(fileName:string) : void
+ saveCommands() : void
+ loadCommands() : void
+ excuteAllCommands(action:Action) : IEnumerator
+ addLastCommand(command:CommandDTO) : void
+ removeLastCommand() : void
+ clearCommandList() : void
}
@enduml
+9
View File
@@ -0,0 +1,9 @@
@startuml
class CommandSaveUtil <<static>> {
- {static} getSettings() : JsonSerializerSettings
+ {static} saveLinkedList(list:LinkedList<CommandDTO>, saveFilePath:string) : bool
+ {static} loadLinkedList(saveFilePath:string) : LinkedList<CommandDTO>
+ {static} deleteSaveFile(saveFilePath:string) : void
+ {static} hasSaveFile(saveFilePath:string) : bool
}
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class EnvironmentObserver {
- environment : Environment
- commandSaveHandler : CommandSaveHandler
- autoSaving : bool = true
- canSave : bool = true
- Start() : void
- onChange() : void
+ save() : void
+ load() : void
- reloadSave() : IEnumerator
- addAllCommands() : void
}
MonoBehaviour <|-- EnvironmentObserver
@enduml
+24
View File
@@ -0,0 +1,24 @@
@startuml
class AttachableBlock {
- blockType : BlockType
- socketContainer : SocketContainer
- connectedBlocks : List<AttachableBlock>
- attachedJoints : List<JointBlock>
+ GetConnectedBlocks() : List<AttachableBlock>
+ GetAttachedJoints() : List<JointBlock>
+ SetBlockType(BlockType:BlockType) : void
+ DisconnectFrom(otherBlock:AttachableBlock) : void
+ UnregisterJoint(joint:JointBlock) : void
- Awake() : void
+ GetSocketContainer() : SocketContainer
+ ConnectTo(otherBlock:AttachableBlock, mySocket:SocketPoint, theirSocket:SocketPoint) : void
+ RegisterJoint(joint:JointBlock) : void
}
enum BlockType {
Regular,
Link,
Gear,
Structural,
}
MonoBehaviour <|-- AttachableBlock
@enduml
@@ -0,0 +1,5 @@
@startuml
interface BlockContainerInit {
InitBlockContainer(sockets:List<SocketPoint>) : List<SocketPoint>
}
@enduml
@@ -0,0 +1,7 @@
@startuml
class SimpleLinkContainerInit {
+ InitBlockContainer(sockets:List<SocketPoint>) : List<SocketPoint>
}
MonoBehaviour <|-- SimpleLinkContainerInit
BlockContainerInit <|-- SimpleLinkContainerInit
@enduml
+19
View File
@@ -0,0 +1,19 @@
@startuml
interface ISocket {
GetTransform() : Transform
GetSocketType() : SocketType
GetSocketRadius() : float
IsOccupied() : bool
GetOccupyingObject() : GameObject
SetOccupied(obj:GameObject) : void
Release() : void
CanAccept(otherSocket:ISocket, isJoint:bool) : bool
GetNormal() : Vector3
}
enum SocketType {
Regular,
JointHost,
JointEnd,
Universal,
}
@enduml
+36
View File
@@ -0,0 +1,36 @@
@startuml
class JointBlock {
- jointType : JointBlockType
- jointLength : float = 1f
- socketEnd1 : SocketPoint
- socketEnd2 : SocketPoint
- usePhysics : bool = true
- jointBreakForce : float
- jointBreakTorque : float
+ connectedBlocks : List<AttachableBlock>
- createdJoints : List<Joint>
- isPlaced : bool = false
- jointPlacementHandler : JointPlacementHandler
- Awake() : void
+ TryPlaceJoint(targetSockets:List<SocketPoint>, isGhost:bool) : bool
- AlignToSockets(targetSockets:List<SocketPoint>, isGhost:bool) : void
+ CreatePhysicsJoint(targetObj:GameObject, socket:SocketPoint) : void
- CreatePhysicsJoints(targetSockets:List<SocketPoint>) : void
- CreateJointByType(connectedBody:Rigidbody, socket:SocketPoint) : Joint
- CreateFixedJoint(connectedBody:Rigidbody) : FixedJoint
- CreateHingeJoint(connectedBody:Rigidbody, socket:SocketPoint) : HingeJoint
- CreateConfigurableJoint(connectedBody:Rigidbody, socket:SocketPoint) : ConfigurableJoint
- MarkSocketsOccupied(targetSockets:List<SocketPoint>) : void
+ RemoveJoint() : void
+ GetJointType() : JointBlockType
+ GetSocketEnd1() : SocketPoint
+ GetSocketEnd2() : SocketPoint
+ IsPlaced() : bool
}
enum JointBlockType {
FixedPivot,
HingePivot,
ConfigurablePivot,
}
MonoBehaviour <|-- JointBlock
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class JointPlacementHandler {
- {static} instance : JointPlacementHandler
- socketSearchRadius : float = 1f
- blockLayerMask : LayerMask
+ {static} getInstance() : JointPlacementHandler
- Awake() : void
+ FindAllSocketsAlignedBetween(start:SocketPoint, end:SocketPoint) : List<SocketPoint>
- IsPointOnSegment(A:Vector3, B:Vector3, P:Vector3, tolerance:float) : bool
+ FindTargetSocketsForJoint(jointBlock:JointBlock, searchPosition:Vector3) : List<SocketPoint>
- FindSocketAtJointEnd(firstSocket:SocketPoint, end1:SocketPoint, end2:SocketPoint) : SocketPoint
- FindClosestSocket(position:Vector3, sockets:List<SocketPoint>) : SocketPoint
}
MonoBehaviour <|-- JointPlacementHandler
@enduml
+35
View File
@@ -0,0 +1,35 @@
@startuml
class SocketContainer {
- sockets : List<SocketPoint>
- iterativeSockets : List<SocketPoint>
- autoDetectSockets : bool = true
- allowCycling : bool = true
- wrapAround : bool = true
- containerInit : BlockContainerInit
- currentSocketIndex : int = 0
- currentActiveSocket : SocketPoint
- Awake() : void
- InitializeSockets() : void
+ GetActiveSocket() : SocketPoint
+ CycleToNextSocket() : void
+ CycleToPreviousSocket() : void
+ SetActiveSocketByIndex(index:int) : void
+ SetActiveSocket(socket:SocketPoint) : void
+ ResetToFirstSocket() : void
+ GetAllSockets() : List<SocketPoint>
+ GetAvailableSockets() : List<SocketPoint>
+ GetOccupiedSockets() : List<SocketPoint>
+ FindNearestCompatibleSocket(worldPosition:Vector3, sourceSocket:SocketPoint) : SocketPoint
+ FindSocketsInRadius(worldPosition:Vector3, radius:float, onlyAvailable:bool) : List<SocketPoint>
+ GetSocketsByType(type:SocketType) : List<SocketPoint>
+ HighlightAllSockets(state:HighlightState) : void
+ ClearAllHighlights() : void
+ AddSocket(socket:SocketPoint) : void
+ RemoveSocket(socket:SocketPoint) : void
+ GetSocketCount() : int
+ HasSockets() : bool
+ GetCurrentSocketIndex() : int
+ FindSocketsCompatibleWithJoint(jointBlock:JointBlock) : List<SocketPoint>
}
MonoBehaviour <|-- SocketContainer
@enduml
+15
View File
@@ -0,0 +1,15 @@
@startuml
class SocketIterator {
- {static} instance : SocketIterator
+ {static} getInstance() : SocketIterator
- currentActiveContainer : SocketContainer
- currentActiveSocket : SocketPoint
- inputProvider : BaseInputProvider
- Awake() : void
- Start() : void
+ SetActiveContainer(container:SocketContainer) : void
+ GetCurrentActiveSocket() : SocketPoint
+ ClearActiveContainer() : void
}
MonoBehaviour <|-- SocketIterator
@enduml
+44
View File
@@ -0,0 +1,44 @@
@startuml
class SocketPoint {
- socketType : SocketType
- socketRadius : float = 0.1f
- socketNormal : Vector3
- acceptableTypes : List<SocketType>
- radiusTolerance : float = 0.05f
- visualIndicator : GameObject
- defaultColor : Color
- activeColor : Color
- compatibleColor : Color
- incompatibleColor : Color
- canHoldJoint : bool = false
- occupyingObject : GameObject
- isOccupied : bool = false
- holdedJoint : GameObject
- isJointOccupied : bool = false
- CanAccept(otherSocket:ISocket) : bool
+ CanAccept(otherSocket:ISocket, isJoint:bool) : bool
+ GetNormal() : Vector3
+ Highlight(state:HighlightState) : void
- Update() : void
+ GetTransform() : Transform
+ GetSocketType() : SocketType
+ GetSocketRadius() : float
+ SetSocketRadius(radius:float) : void
+ IsOccupied() : bool
+ IsJointOccupied() : bool
+ GetOccupyingObject() : GameObject
+ GetJointObject() : GameObject
+ SetOccupied(obj:GameObject) : void
+ SetJointOccupied(jointObject:GameObject) : void
+ ReleaseJoint() : void
+ Release() : void
}
enum HighlightState {
Default,
Active,
Compatible,
Incompatible,
}
MonoBehaviour <|-- SocketPoint
ISocket <|-- SocketPoint
@enduml
+11
View File
@@ -0,0 +1,11 @@
@startuml
class CategoryInherit {
- UIPrefab : GameObject
- UIParent : GameObject
- currentCategory : CategoryData
- blockDatas : List<BlockData>
+ UpdateCategory(category:CategoryData) : void
- DestroyBlocks() : void
}
MonoBehaviour <|-- CategoryInherit
@enduml
+9
View File
@@ -0,0 +1,9 @@
@startuml
class DropdownCategories {
+ Categories : CategoryData[]
- DropdownMenu : TMP_Dropdown
- categoryInherit : CategoryInherit
- Start() : void
}
MonoBehaviour <|-- DropdownCategories
@enduml
+6
View File
@@ -0,0 +1,6 @@
@startuml
interface IValidator {
IsValidPlacement(objToPlace:GameObject) : bool
SetLayerMask(cLayerMask:LayerMask) : void
}
@enduml
+11
View File
@@ -0,0 +1,11 @@
@startuml
class PlacementValidator {
- collisionLayerMask : LayerMask
- toleranceSkin : float = 0.05f
- ignoredColliders : List<Collider>
+ SetLayerMask(cLayerMask:LayerMask) : void
+ IsValidPlacement(objToPlace:GameObject) : bool
}
MonoBehaviour <|-- PlacementValidator
IValidator <|-- PlacementValidator
@enduml
+24
View File
@@ -0,0 +1,24 @@
@startuml
class CanvasPlatformUI {
- platformManager : CanvasVirtualPlatformManager
- planeDropdown : TMP_Dropdown
- canvasSizeSlider : Slider
- minCanvasSize : float = 1000f
- maxCanvasSize : float = 10000f
- platformToggle : Toggle
- gridToggle : Toggle
- infoText : TextMeshProUGUI
- Start() : void
- SetupUI() : void
- OnPlaneChanged(index:int) : void
- OnCanvasSizeSliderChanged(value:float) : void
- OnCanvasWidthChanged(value:string) : void
- OnCanvasHeightChanged(value:string) : void
- UpdateCanvasSizeFields() : void
- OnPlatformToggleChanged(isOn:bool) : void
- OnGridToggleChanged(isOn:bool) : void
- UpdateInfoDisplay() : void
- Update() : void
}
MonoBehaviour <|-- CanvasPlatformUI
@enduml
@@ -0,0 +1,39 @@
@startuml
enum PlaneAxis {
XZ= 0,
XY= 1,
YZ= 2,
}
class VirtualPlane {
+ planeAxis : PlaneAxis
+ canvasGrid : GameObject
+ colliderObject : GameObject
}
class CanvasVirtualPlatformManager {
- {static} instance : CanvasVirtualPlatformManager
- virtualPlanes : VirtualPlane[]
- colliderThickness : float = 0.1f
- colliderLayer : string = "World"
- currentPlane : PlaneAxis
- platformVisible : bool = true
- Awake() : void
+ {static} getInstance() : CanvasVirtualPlatformManager
- Start() : void
- GenerateColliders() : void
- GetColliderRotation(axis:PlaneAxis) : Quaternion
+ RegenerateColliders() : void
+ SwitchToPlane(plane:PlaneAxis) : void
+ TogglePlatformVisibility(visible:bool) : void
- UpdatePlaneVisibility() : void
+ ToggleGridVisibility(visible:bool) : void
+ GetCurrentPlane() : PlaneAxis
+ IsPlatformVisible() : bool
+ GetCurrentCollider() : GameObject
+ GetCurrentCanvas() : GameObject
+ SetCanvasSize(planeAxis:PlaneAxis, width:float, height:float) : void
+ SetCurrentCanvasSize(width:float, height:float) : void
- RegenerateSingleCollider(plane:VirtualPlane) : void
+ GetCurrentCanvasSize() : Vector2
}
MonoBehaviour <|-- CanvasVirtualPlatformManager
@enduml
+16
View File
@@ -0,0 +1,16 @@
@startuml
class PlatformUI {
- platformManager : VirtualPlatformManager
- xAxisButton : Button
- yAxisButton : Button
- zAxisButton : Button
- moveUpButton : Button
- moveDownButton : Button
- moveStep : float = 1f
- gridToggle : Toggle
- Start() : void
- SetupButtons() : void
- Update() : void
}
MonoBehaviour <|-- PlatformUI
@enduml
@@ -0,0 +1,48 @@
@startuml
enum BuildAxis {
X,
Y,
Z,
}
class VirtualPlatformManager {
- {static} instance : VirtualPlatformManager
- platformThickness : float = 0.1f
- showGrid : bool = true
- gridSpacing : float = 1f
- gridExtent : int = 50
- lineWidth : float = 0.5f
- gridColor : Color
- gridMaterial : Material
- currentAxis : BuildAxis
- currentDistance : float = 0f
- gridLines : List<LineRenderer>
- currentPlatform : GameObject
- gridVisual : GameObject
- colliderObj : GameObject
- platformCollider : BoxCollider
- mainCamera : Camera
- Awake() : void
+ {static} getInstance() : VirtualPlatformManager
- Start() : void
- LateUpdate() : void
- UpdateGridPosition() : void
- UpdateColliderPosition() : void
- UpdateGridLines(center:Vector3, axis1:Vector3, axis2:Vector3) : void
+ SwitchToAxis(axis:BuildAxis) : void
+ MovePlatform(delta:float) : void
+ SetPlatformDistance(distance:float) : void
- UpdatePlatformDistance() : void
- RecreatePlatform() : void
- CreatePlatform() : void
- CreateGridVisual() : void
- SetupPlatformTransform() : void
- CreateLine(start:Vector3, end:Vector3) : LineRenderer
- GetPlatformOrigin() : Vector3
- GetPlatformAxes(axis1:Vector3, axis2:Vector3) : void
+ ToggleGridVisibility(visible:bool) : void
+ GetCurrentAxis() : BuildAxis
+ GetCurrentDistance() : float
+ GetPlatformPosition() : Vector3
}
MonoBehaviour <|-- VirtualPlatformManager
@enduml
+77
View File
@@ -0,0 +1,77 @@
@startuml
!include .\\BlocksLayer\Block.puml
!include .\\BlocksLayer\BlockData.puml
!include .\\BlocksLayer\BlockFactory.puml
!include .\\BlocksLayer\CategoryData.puml
!include .\\BlocksLayer\CodingBlock.puml
!include .\\BlocksLayer\ElectricalBlock.puml
!include .\\BlocksLayer\Environment.puml
!include .\\BlocksLayer\MechanicalBlock.puml
!include .\\BlocksLayer\MechanicalJoint.puml
!include .\\Camera\CameraControl.puml
!include .\\Camera\ViewCubeController.puml
!include .\\CommandLayer\CommandDTO.puml
!include .\\CommandLayer\CommandHandler.puml
!include .\\CommandLayer\CommandManager.puml
!include .\\InputSystem\BaseInputProvider.puml
!include .\\InputSystem\InputModeManager.puml
!include .\\InputSystem\InputProviderManager.puml
!include .\\InputSystem\MobileInputProvider.puml
!include .\\InputSystem\PCIntputProvider.puml
!include .\\ModelCheckingSystem\BlockNode.puml
!include .\\ModelCheckingSystem\BlocksGraph.puml
!include .\\ModelCheckingSystem\BlocksMap.puml
!include .\\ModelCheckingSystem\ModelCheckManager.puml
!include .\\Movement Scripts\GizmoFMoveElement.puml
!include .\\Movement Scripts\GizmoMoveElement.puml
!include .\\Movement Scripts\GizmoRotateElement.puml
!include .\\Movement Scripts\MultiSelectValidationCheck.puml
!include .\\Movement Scripts\TransformManager.puml
!include .\\SaveSystem\CommandSaveHandler.puml
!include .\\SaveSystem\CommandSaveUtil.puml
!include .\\SaveSystem\EnvironmentObserver.puml
!include .\\Sockets\AttachableBlock.puml
!include .\\Sockets\ISocket.puml
!include .\\Sockets\JointBlock.puml
!include .\\Sockets\JointPlacementHandler.puml
!include .\\Sockets\SocketContainer.puml
!include .\\Sockets\SocketIterator.puml
!include .\\Sockets\SocketPoint.puml
!include .\\UI\CategoryInherit.puml
!include .\\UI\DropdownCategories.puml
!include .\\Validators\IValidator.puml
!include .\\Validators\PlacementValidator.puml
!include .\\VirtualPlatform\CanvasPlatformUI.puml
!include .\\VirtualPlatform\CanvasVirtualPlatformManager.puml
!include .\\VirtualPlatform\PlatformUI.puml
!include .\\VirtualPlatform\VirtualPlatformManager.puml
!include .\\CommandLayer\Commands\CreateBlockCommand.puml
!include .\\CommandLayer\Commands\DeleteBlockCommand.puml
!include .\\CommandLayer\Commands\DeleteGroupCommand.puml
!include .\\CommandLayer\Commands\ICommand.puml
!include .\\CommandLayer\Commands\MoveBlockCommand.puml
!include .\\CommandLayer\Commands\RotateBlockCommand.puml
!include .\\InteractionLayer\Interactables\BaseInteractable.puml
!include .\\InteractionLayer\Interactables\GrabInteractable.puml
!include .\\InteractionLayer\Interactables\HoveredUI.puml
!include .\\InteractionLayer\Interactables\IInteractable.puml
!include .\\InteractionLayer\Interactables\UIInteractable.puml
!include .\\InteractionLayer\Interactors\DeleteInteractor.puml
!include .\\InteractionLayer\Interactors\RayInteractor.puml
!include .\\InteractionLayer\Interactors\SnapSystem.puml
!include .\\InteractionLayer\Interactors\TestCommandInteractor.puml
!include .\\InteractionLayer\Managers\GhostManager.puml
!include .\\InteractionLayer\Managers\InteractionManager.puml
!include .\\InteractionLayer\Managers\SelectionManager.puml
!include .\\InteractionLayer\Managers\SocketManagerChecker.puml
!include .\\InteractionLayer\Managers\UIManager.puml
!include .\\Sockets\ContainerInit\BlockContainerInit.puml
!include .\\Sockets\ContainerInit\SimpleLinkContainerInit.puml
!include .\\InteractionLayer\Managers\GhostExtensions\AxisMoveStrategy.puml
!include .\\InteractionLayer\Managers\GhostExtensions\AxisRotateStrategy.puml
!include .\\InteractionLayer\Managers\GhostExtensions\FreeMoveStrategy.puml
!include .\\InteractionLayer\Managers\GhostExtensions\GhostMovementContext.puml
!include .\\InteractionLayer\Managers\GhostExtensions\GhostStrategyHandler.puml
!include .\\InteractionLayer\Managers\GhostExtensions\GhostStrategyTester.puml
!include .\\InteractionLayer\Managers\GhostExtensions\IGhostMovementStrategy.puml
@enduml