Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players");
- local UserInputService = game:GetService("UserInputService");
- local TweenService = game:GetService("TweenService");
- local ReplicatedStorage = game:GetService("ReplicatedStorage");
- local Player = Players.LocalPlayer;
- local PlayerGui = Player.PlayerGui;
- local Mouse = Player:GetMouse();
- local ColorFunctions = require(ReplicatedStorage.Modules.Utility.ColorFunctions);
- local isHolding = false;
- local CharacterCustomization = PlayerGui.CharacterCustomization;
- local RGBColorValue = CharacterCustomization.Color;
- local ColorPicker = CharacterCustomization.ColorPicker;
- local RGBColor = ColorPicker.Color;
- local Colors = {
- "Hue",
- "Lightness",
- "Saturation"
- }
- local SaturationSequence = ColorSequence.new{
- ColorSequenceKeypoint.new(0, Color3.fromHSV(0, 0, 0.5)),
- ColorSequenceKeypoint.new(1, Color3.new(1, 0, 0))
- };
- local LightnessSequence = ColorSequence.new{
- ColorSequenceKeypoint.new(0, Color3.new(0, 0, 0)),
- ColorSequenceKeypoint.new(0.5, Color3.new(1, 0, 0)),
- ColorSequenceKeypoint.new(1, Color3.new(1, 1, 1))
- }
- local function EvaluateColorSequence(ColorSequence, SequenceTime)
- if SequenceTime == 0 then
- return ColorSequence.Keypoints[1].Value;
- elseif SequenceTime == 1 then
- return ColorSequence.Keypoints[#ColorSequence.Keypoints].Value;
- end
- for i = 1, #ColorSequence.Keypoints - 1 do
- local Current = ColorSequence.Keypoints[i];
- local Next = ColorSequence.Keypoints[i + 1];
- if SequenceTime >= Current.Time and SequenceTime < Next.Time then
- local alpha = (SequenceTime - Current.Time) / (Next.Time - Current.Time);
- return Color3.new(
- (Next.Value.R - Current.Value.R) * alpha + Current.Value.R,
- (Next.Value.G - Current.Value.G) * alpha + Current.Value.G,
- (Next.Value.B - Current.Value.B) * alpha + Current.Value.B
- );
- end
- end
- end
- local function ValueUpdate(ColorValue, ColorObject)
- local Color = EvaluateColorSequence(ColorObject.UIGradient.Color, ColorValue.Value);
- --ColorObject.Icon.ImageColor3 = Color;
- if ColorValue.Name == "Hue" then
- SaturationSequence = ColorSequence.new{
- ColorSequenceKeypoint.new(0, Color3.fromHSV(0, 0, 0.5)),
- ColorSequenceKeypoint.new(1, Color)
- };
- ColorPicker.Saturation.UIGradient.Color = SaturationSequence;
- --ColorPicker.Saturation.Icon.ImageColor3 = EvaluateColorSequence(ColorPicker.Saturation.UIGradient.Color, CharacterCustomization.Saturation.Value);
- LightnessSequence = ColorSequence.new{
- ColorSequenceKeypoint.new(0, Color3.new(0, 0, 0)),
- ColorSequenceKeypoint.new(0.5, Color),
- ColorSequenceKeypoint.new(1, Color3.new(1, 1, 1))
- }
- ColorPicker.Lightness.UIGradient.Color = LightnessSequence;
- --ColorPicker.Lightness.Icon.ImageColor3 = EvaluateColorSequence(ColorPicker.Saturation.UIGradient.Color, CharacterCustomization.Lightness.Value);
- end
- local r, g, b = ColorFunctions.hsl2rgb(
- CharacterCustomization.Hue.Value,
- CharacterCustomization.Saturation.Value,
- CharacterCustomization.Lightness.Value
- );
- RGBColorValue.Value = Color3.new(r, g, b);
- RGBColor.BackgroundColor3 = RGBColorValue.Value;
- end
- return function()
- for _, v in ipairs(Colors) do
- local ColorObject = ColorPicker:FindFirstChild(v);
- local ColorValue = CharacterCustomization:FindFirstChild(v);
- if ColorObject and ColorValue then
- local Connection, Connection2;
- local function Update()
- if not isHolding then
- return;
- end
- local Object_x = ColorObject.AbsolutePosition.X;
- local Offset = math.clamp((Mouse.X - Object_x) / ColorObject.AbsoluteSize.X, 0, 1);
- TweenService:Create(ColorObject.Icon, TweenInfo.new(0.3), {Position = UDim2.new(Offset, 0, 0.9, 0)}):Play();
- TweenService:Create(ColorValue, TweenInfo.new(0.3), {Value = Offset}):Play();
- local Color = EvaluateColorSequence(ColorObject.UIGradient.Color, Offset);
- --ColorObject.Icon.ImageColor3 = Color;
- end
- ColorValue:GetPropertyChangedSignal("Value"):Connect(function()
- ValueUpdate(ColorValue, ColorObject);
- end)
- ColorObject.InputBegan:Connect(function(Input, GameProcessedEvent)
- if GameProcessedEvent or isHolding then
- return;
- end
- if Input.UserInputType ~= Enum.UserInputType.MouseButton1 then
- return;
- end
- isHolding = true;
- Update();
- Connection = UserInputService.InputEnded:Connect(function(Input, GameProcessedEvent)
- if GameProcessedEvent then
- return;
- end
- if Input.UserInputType ~= Enum.UserInputType.MouseButton1 then
- return;
- end
- isHolding = false;
- Connection:Disconnect();
- Connection2:Disconnect();
- end)
- Connection2 = Mouse.Move:Connect(Update);
- end)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement