CleanableObject Interface Type
This commit is contained in:
		
							parent
							
								
									c4e9020157
								
							
						
					
					
						commit
						eb61666031
					
				
					 2 changed files with 9 additions and 140 deletions
				
			
		| 
						 | 
					@ -5,42 +5,9 @@ local trove = require(replicated.Modules.Utility.Trove)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--[[ UIObjects testing]]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export type DraggableClass = {
 | 
					 | 
				
			||||||
    Parent: Page | Component,
 | 
					 | 
				
			||||||
    Name: string,
 | 
					 | 
				
			||||||
    DragButton: GuiButton,
 | 
					 | 
				
			||||||
    DragEvent: signal.Signal<string, Enum.UserInputType, Enum.UserInputState, {Vector2}?, number?, number?>,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _: {
 | 
					 | 
				
			||||||
        Status: "Stored" | "Built",
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        IsDragging: boolean,
 | 
					 | 
				
			||||||
        DragStartTime: number,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        OnBuild: (self: Draggable) -> ()?,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    OnBuild: (self: Draggable, callback: (self: Draggable) -> ()) -> (),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Build: (self: Draggable, parent: Page | Component) -> (),
 | 
					 | 
				
			||||||
    IsDragging: (self: Draggable) -> (boolean),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _DragStart: (self: Draggable) -> (),
 | 
					 | 
				
			||||||
    _DragStop: (self: Draggable) -> (),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _MobileDrag: (self: Draggable, touchPositions: {Vector2}, scale: number, velocity: number, state: Enum.UserInputState) -> (),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Clean: (self: Draggable) -> (),
 | 
					 | 
				
			||||||
    Destroy: (self: Draggable) -> (),
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export type Draggable = typeof(setmetatable({} :: DraggableClass, {}))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--[[ == Template == ]]
 | 
					--[[ == Template == ]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type TemplateClass<Object, MethodOptions, Parameters> = {
 | 
					type TemplateClass<Object, MethodOptions, Parameters> = {
 | 
				
			||||||
    Files: {
 | 
					    Files: {
 | 
				
			||||||
        [string]: (self: Object, parameters: {}?) -> ()
 | 
					        [string]: (self: Object, parameters: {}?) -> ()
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
| 
						 | 
					@ -100,6 +67,11 @@ type BuildableObject<Self, Parent> = {
 | 
				
			||||||
    StatusIs: (self: Self, status: "Stored" | "Built") -> (boolean),
 | 
					    StatusIs: (self: Self, status: "Stored" | "Built") -> (boolean),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type CleanableObject<Self> = {
 | 
				
			||||||
 | 
					    Clean: (self: Self) -> (),
 | 
				
			||||||
 | 
					    Remove: (self: Self) -> (),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type RenderableObject<Self> = {
 | 
					type RenderableObject<Self> = {
 | 
				
			||||||
    _: {
 | 
					    _: {
 | 
				
			||||||
        OnOpen: (self: Self) -> ()?,
 | 
					        OnOpen: (self: Self) -> ()?,
 | 
				
			||||||
| 
						 | 
					@ -165,10 +137,7 @@ export type ComponentClass = {
 | 
				
			||||||
    OnUpdate: (self: Component, command: string, callback: (self: Component) -> ()) -> (),
 | 
					    OnUpdate: (self: Component, command: string, callback: (self: Component) -> ()) -> (),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Update: (self: Component, command: string, parameters: {}?) -> (),
 | 
					    Update: (self: Component, command: string, parameters: {}?) -> (),
 | 
				
			||||||
 | 
					} & BuildableObject<Component, Page> & CleanableObject<Component> & RenderableObject<Component>
 | 
				
			||||||
    Clean: (self: Component) -> (),
 | 
					 | 
				
			||||||
    Remove: (self: Component) -> (),
 | 
					 | 
				
			||||||
} & BuildableObject<Component, Page> & RenderableObject<Component>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Component = typeof(setmetatable({} :: ComponentClass, {}))
 | 
					export type Component = typeof(setmetatable({} :: ComponentClass, {}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,11 +153,8 @@ export type PageClass = {
 | 
				
			||||||
    Buttons: ObjectList<Button, Page>,
 | 
					    Buttons: ObjectList<Button, Page>,
 | 
				
			||||||
    Components: ObjectList<Component, Page>,
 | 
					    Components: ObjectList<Component, Page>,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Clean: (self: Page) -> (),
 | 
					 | 
				
			||||||
    Remove: (self: Page) -> (),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    GetManager: (self: Window) -> (Manager),
 | 
					    GetManager: (self: Window) -> (Manager),
 | 
				
			||||||
} & BuildableObject<Page, Window> & RenderableObject<Page>
 | 
					} & BuildableObject<Page, Window> & CleanableObject<Page> & RenderableObject<Page>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Page = typeof(setmetatable({} :: PageClass, {}))
 | 
					export type Page = typeof(setmetatable({} :: PageClass, {}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,10 +170,7 @@ export type WindowClass = {
 | 
				
			||||||
        PageOpened: signal.Signal<Page, boolean>,
 | 
					        PageOpened: signal.Signal<Page, boolean>,
 | 
				
			||||||
        PageClosed: signal.Signal<Page, boolean>,
 | 
					        PageClosed: signal.Signal<Page, boolean>,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					} & BuildableObject<Window, Manager> & CleanableObject<Window> & RenderableObject<Window>
 | 
				
			||||||
    Clean: (self: Window) -> (),
 | 
					 | 
				
			||||||
    Remove: (self: Window) -> (),
 | 
					 | 
				
			||||||
} & BuildableObject<Window, Manager> & RenderableObject<Window>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Window = typeof(setmetatable({} :: WindowClass, {}))
 | 
					export type Window = typeof(setmetatable({} :: WindowClass, {}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,94 +0,0 @@
 | 
				
			||||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
					 | 
				
			||||||
local uis = game:GetService("UserInputService")
 | 
					 | 
				
			||||||
local types = require(ReplicatedStorage.Modules.Managers.UIManager.Types)
 | 
					 | 
				
			||||||
local Signal = require(ReplicatedStorage.Modules.Utility.Signal)
 | 
					 | 
				
			||||||
local module = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local draggable: types.DraggableClass = {} :: types.DraggableClass
 | 
					 | 
				
			||||||
draggable["__index"] = draggable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function module.new(name: string): types.Draggable
 | 
					 | 
				
			||||||
    local self = setmetatable({
 | 
					 | 
				
			||||||
        Name = name,
 | 
					 | 
				
			||||||
        DragEvent = Signal.new(),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        _ = {
 | 
					 | 
				
			||||||
            IsDragging = false,
 | 
					 | 
				
			||||||
            DragStartTime = 0,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    }, draggable)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return self
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--[[ Draggable ]]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--[[
 | 
					 | 
				
			||||||
    Use TouchSwipe for mobile, and MouseButton1Down with MouseButton1Up for PC
 | 
					 | 
				
			||||||
]]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:OnBuild(callback: (self: types.Draggable) -> ())
 | 
					 | 
				
			||||||
    self._.OnBuild = callback
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:Build(parent: types.Page | types.Component)
 | 
					 | 
				
			||||||
    self.Parent = parent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if self._.OnBuild then
 | 
					 | 
				
			||||||
        self._.OnBuild(self)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if self.DragButton then
 | 
					 | 
				
			||||||
        if uis.MouseEnabled then
 | 
					 | 
				
			||||||
            self.Parent.Container:ConnectMethod(self.DragButton.MouseButton1Down, "_DragStart", self, {})
 | 
					 | 
				
			||||||
            self.Parent.Container:ConnectMethod(self.DragButton.MouseButton1Up, "_DragStop", self, {})
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            self.Parent.Container:Connect(self.DragButton.TouchPan, function(touchPositions: {Vector2}, scale: number, velocity: number, state: Enum.UserInputState)
 | 
					 | 
				
			||||||
                self:_MobileDrag(touchPositions, scale, velocity, state)
 | 
					 | 
				
			||||||
            end)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:IsDragging(): boolean
 | 
					 | 
				
			||||||
    return self._.IsDragging
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:_DragStart()
 | 
					 | 
				
			||||||
    if self._.IsDragging then
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    self._.IsDragging = true
 | 
					 | 
				
			||||||
    self._.DragStartTime = os.clock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    self.DragEvent:Fire(Enum.UserInputType.Touch, true)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:_DragStop()
 | 
					 | 
				
			||||||
    self._.IsDragging = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    self.DragEvent:Fire(Enum.UserInputType.Touch, false)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:_MobileDrag(touchPositions: {Vector2}, scale: number, velocity: number, state: Enum.UserInputState)
 | 
					 | 
				
			||||||
    if self._.IsDragging and state == Enum.UserInputState.Begin then
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    self._.IsDragging = state == Enum.UserInputState.Begin
 | 
					 | 
				
			||||||
    self._.DragStartTime = self._.IsDragging and os.clock() or 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    self.DragEvent:Fire(Enum.UserInputType.Touch, state, touchPositions, scale, velocity)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:Clean()
 | 
					 | 
				
			||||||
    self.DragEvent:DisconnectAll()
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function draggable:Destroy()
 | 
					 | 
				
			||||||
    self:Clean()
 | 
					 | 
				
			||||||
    setmetatable(getmetatable(self), nil)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
return module
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in a new issue