elevator lanterns

This commit is contained in:
2024-04-07 12:07:16 -04:00
parent 05e3b9406f
commit 42db037fc5
12 changed files with 399 additions and 189 deletions

View File

@@ -21,20 +21,21 @@ type Impl_Constructor = {
__index: Impl_Constructor,
constructor: Constructor_Fun,
--Class functions
DecodeCarTag: (self: ClassConstructor, FloorTag: string) -> number?,
Get: (self: ClassConstructor) -> GetButtons,
CreatePromptButtons: (self: ClassConstructor) -> ButtonsTree,
HookPromptButtonsGroup: (self: ClassConstructor, Prompt: ProximityPrompt, Inst: BasePart, PromptCallback: PromptCallback) -> ()
DecodeCarTag: (self: ClassConstructor, FloorTag: string) -> number?,
Get: (self: ClassConstructor) -> GetButtons,
CreatePromptButtons: (self: ClassConstructor) -> ButtonsTree,
HookPromptButtonsGroup: (self: ClassConstructor, Prompt: ProximityPrompt?, Inst: BasePart?, PromptCallback: PromptCallback) -> (),
AestheticActivateButton: (self: ClassConstructor, Button: BasePart, ActivatedState: boolean, ActivatedColor: Color3) -> ()
} & Impl_Static_Props
type Impl_Static_Props = {
ButtonEnum: any
}
type Constructor_Fun = (TagsConstructor: TagsConstructor, Model: string) -> ClassConstructor
type Constructor_Fun = (TagsConstructor: TagsConstructor, Model: Enums.ElevatorValues) -> ClassConstructor
type Constructor_Return_Props = {
Tags: TagsConstructor,
Model: string,
Model: Enums.ElevatorValues,
Buttons: ButtonsTree
}
@@ -83,10 +84,11 @@ function ButtonsModule:Get()
if typeof(Inst) == "Instance" then
Buttons[TagName] = Inst
else
warn("TODO block hit,", debug.traceback())
end
end
end
return Buttons
end
@@ -182,17 +184,48 @@ function ButtonsModule:CreatePromptButtons()
end
function ButtonsModule:HookPromptButtonsGroup(Prompt, Inst, PromptCallback)
Prompt.Triggered:Connect(function(Player)
local PlayerCharacter = Player.Character
local Root = PlayerCharacter and PlayerCharacter:FindFirstChild("HumanoidRootPart") :: HumanoidRootPart?
if Prompt then
if Inst then
Prompt.Triggered:Connect(function(Player)
local PlayerCharacter = Player.Character
local Root = PlayerCharacter and PlayerCharacter:FindFirstChild("HumanoidRootPart") :: HumanoidRootPart?
if Root then
if (Root.Position-Inst.Position).Magnitude<=Prompt.MaxActivationDistance+1 then
PromptCallback(Player)
else
warn(`{Player.Name}, {Player.UserId} activated a prompt without being in range of MaxActivationDistance.`)
if Root then
if (Root.Position-Inst.Position).Magnitude<=Prompt.MaxActivationDistance+1 then
PromptCallback(Player)
else
warn(`{Player.Name}, {Player.UserId} activated a prompt without being in range of MaxActivationDistance.`)
end
end
end)
else
warn("Button Hook Error! Inst is missing", debug.traceback())
end
else
warn("Button Hook Error! Prompt is missing", debug.traceback())
end
end
function ButtonsModule:AestheticActivateButton(Button, ActivatedState, ActivatedColor)
task.spawn(function()
local Glass = Button:FindFirstChild("Glass") :: BasePart
local LookVec = Glass.CFrame.LookVector/50
if Glass then
Glass.Position+=LookVec
if not ActivatedState then
Glass.Material = Enum.Material.Neon
Glass.Color = ActivatedColor
Glass.Transparency = 0
end
end
Button.Position+=LookVec
task.wait(.30)
if Glass then
Glass.Position-=LookVec
end
Button.Position-=LookVec
end)
end