⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.lua

📁 时间太紧了
💻 LUA
字号:
--[[

	Clock

	- This BETA to test stage.

]]
ClockState = { };
Clock_Enable = 1;
Clock_OffsetHour = 0;
Clock_OffsetMinute = 0;
Clock_MilitaryTime = 0;
Clock_Freeze = 0;
Clock_DisplaySec = 0;
InitialRun = 1;
local SecondCount = 0;
local LastMinute = 0;
local CurrentSecond = 0;
local UpdateTime = 0; 


CLOCK_UPDATE_RATE = 0.1;

local lBeingDragged;

function Clock_OnLoad()
	this:RegisterForDrag("LeftButton");
	this:RegisterEvent("VARIABLES_LOADED");

	ClockFrame.TimeSinceLastUpdate = 0;
end

function Clock_Reset()
	ClockFrame:ClearAllPoints();
	ClockFrame:SetPoint("TOPLEFT", "UIParent", "TOPRIGHT", -156, -170);
end

function Clock_OnUpdate(arg1)
	Clock_DisplaySec_Update(arg1);
	ClockFrame.TimeSinceLastUpdate = ClockFrame.TimeSinceLastUpdate + arg1;
	if( ClockFrame.TimeSinceLastUpdate > CLOCK_UPDATE_RATE ) then
		ClockText:SetText(Clock_GetTimeText());
		ClockFrame.TimeSinceLastUpdate = 0;
	end
end

function Clock_OnEvent()
	if( event == "VARIABLES_LOADED" ) then
		Clock_LoadConfig();
	end
end

function Clock_LoadConfig()
	if( not ClockState ) then
		ClockState = { };
	end
	if( not ClockState.Enable ) then
		ClockState.Enable = 1;
	end
	if( not ClockState.OffsetHour ) then
		ClockState.OffsetHour = 0;
	end
	if( not ClockState.OffsetMinute ) then
		ClockState.OffsetMinute = 0;
	end
	if( not ClockState.MilitaryTime ) then
		ClockState.MilitaryTime = 0;
	end
	if( not ClockState.Freeze ) then
		ClockState.Freeze = 0;
	end
	if( not ClockState.DisplaySec ) then
		ClockState.DisplaySec = 0;
	end

	Clock_Enable = ClockState.Enable;
	if( Clock_Enable == 0 ) then
		ClockFrame:Hide();
	end
	Clock_OffsetHour = ClockState.OffsetHour;
	Clock_OffsetMinute = ClockState.OffsetMinute;
	Clock_MilitaryTime = ClockState.MilitaryTime;
	Clock_Freeze = ClockState.Freeze;
	Clock_DisplaySec = ClockState.DisplaySec;

	Clock_Register();
end

function Clock_Register()
  gLim_RegisterButton (
	"Mini Clock",
	"迷你时钟",
	"Interface\\AddOns\\Clock\\Icon", 
	function()	
		gLimModSecBookShowConfig("gLimClock");
	end,
	1,
	4
	);

  gLim_RegisterConfigClass(
	"gLimClock",
	"Mini Clock",
	"黑眼圈"
	);
  gLim_RegisterConfigSection(
	"gLimClockSection",
	"迷你时钟",
	CLOCK_WINDOW_CONFIG_TEXT.." by 黑眼圈(gLim开发小组)",
	"黑眼圈",
	"gLimClock");
  gLim_RegisterConfigCheckBox(
	"gLim_Clock_Enable",
	CLOCK_WINDOW_DISPLAY_CLOCK,
	CLOCK_WINDOW_DISPLAY_CLOCK_INFO,
	Clock_Enable,
	ClockDisplay,
	"gLimClock"
	);
  gLim_RegisterConfigCheckBox(
	"gLim_Clock_Format",
	CLOCK_WINDOW_FORMAT_CLOCK,
	CLOCK_WINDOW_FORMAT_CLOCK_INFO,
	Clock_MilitaryTime,
	ClockFormat,
	"gLimClock"
	);
  gLim_RegisterConfigCheckBox(
	"gLim_Clock_Freeze",
	CLOCK_WINDOW_FREEZE_CLOCK,
	CLOCK_WINDOW_FREEZE_CLOCK_INFO,
	Clock_Freeze,
	ClockFreeze,
	"gLimClock"
	);
  gLim_RegisterConfigCheckBox(
	"gLim_Clock_DisplaySec",
	CLOCK_WINDOW_SHOWSEC_CLOCK,
	CLOCK_WINDOW_SHOWSEC_CLOCK_INFO,
	Clock_DisplaySec,
	ClockDisplaySec,
	"gLimClock"
	);

gLim_RegisterConfigSlider(
	"gLim_Clock_OffsetHour",
	"设置偏移时差(小时)",
	CLOCK_WINDOW_OFFSETHOUR,
	CLOCK_WINDOW_OFFSETHOUR,
	"小时",
	1,
	-12,
	12,
	Clock_OffsetHour,
	ClockOffsetHour,
	"gLimClock"
	);

gLim_RegisterConfigSlider(
	"gLim_Clock_OffsetMinute",
	"设置偏移时差(分钟)",
	CLOCK_WINDOW_OFFSETMINUTE,
	CLOCK_WINDOW_OFFSETMINUTE,
	"分钟",
	1,
	0,
	60,
	Clock_OffsetMinute,
	ClockOffsetMinute,
	"gLimClock"
	);
end

function Clock_OnDragStart()
	if( Clock_Freeze ~= 1 ) then
		ClockFrame:StartMoving()
		lBeingDragged = 1;
	end
end

function Clock_OnDragStop()
	ClockFrame:StopMovingOrSizing()
	lBeingDragged = nil;
end

function ClockDisplay()
	if ( Clock_Enable == 1 ) then
		ClockFrame:Hide();
		Clock_Enable = 0;
		ClockState.Enable  = 0;
	else
		ClockFrame:Show();
		Clock_Enable = 1;
		ClockState.Enable  = 1;
	end
end

function ClockFormat()
	if ( Clock_MilitaryTime == 1 ) then
		Clock_MilitaryTime = 0;
		ClockState.MilitaryTime = 0;
	else
		Clock_MilitaryTime = 1;
		ClockState.MilitaryTime = 1;
	end
end

function ClockFreeze()
	if ( Clock_Freeze == 1 ) then
		Clock_Freeze = 0;
		ClockState.Freeze = 0;
	else
		Clock_Freeze = 1;
		ClockState.Freeze = 1;
	end	
end

function ClockDisplaySec()
	if ( Clock_DisplaySec == 1 ) then
		Clock_DisplaySec = 0;
		ClockState.DisplaySec = 0;
	else
		Clock_DisplaySec = 1;
		ClockState.DisplaySec = 1;
		InitialRun = 1;
	end
end

function ClockOffsetHour(OffsetHour)
	--local OffsetHour = this:GetValue();

	if ( Clock_OffsetHour ) then
		Clock_OffsetHour = OffsetHour;
		ClockState.OffsetHour = OffsetHour;
	end
end

function ClockOffsetMinute(OffsetMinute)
	--local OffsetMinute = this:GetValue();

	if ( Clock_OffsetMinute  ) then
		Clock_OffsetMinute =  OffsetMinute;
		ClockState.OffsetMinute = OffsetMinute;
	end
end


function Clock_GetTimeText()
	local hour, minute = GetGameTime();
	local pm;

	hour = hour + Clock_OffsetHour;
	minute = minute + Clock_OffsetMinute;

	if( minute > 59 ) then
		minute = minute - 60;
		hour = hour + 1;
	elseif( minute < 0 ) then
		minute = 60 + minute;
		hour = hour - 1;
	end
	if( hour > 23 ) then
		hour = hour - 24;
	elseif( hour < 0 ) then
		hour = 24 + hour;
	end

	if( Clock_MilitaryTime ~= 0 ) then
		if( ( Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
			return format(TEXT(CLOCK_TIME_TWENTYFOURHOURSSECONDS), hour, minute, SecondCount);
		else
			return format(TEXT(CLOCK_TIME_TWENTYFOURHOURS), hour, minute);
		end
	else
		if( hour >= 12 ) then
			pm = 1;
			hour = hour - 12;
		else
			pm = 0;
		end
		if( hour == 0 ) then
			hour = 12;
		end
		if( pm == 0 ) then
			if( (  Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
				return format(TEXT(CLOCK_TIME_TWELVEHOURSECONDSAM), hour, minute, SecondCount);
			else
				return format(TEXT(CLOCK_TIME_TWELVEHOURAM), hour, minute);
			end
		else
			if( ( Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
				return format(TEXT(CLOCK_TIME_TWELVEHOURSECONDSPM), hour, minute, SecondCount);
			else
				return format(TEXT(CLOCK_TIME_TWELVEHOURPM), hour, minute);
			end
		end
	end
end

local function Clock_FormatPart(fmt, val)
	local part;

	part = format(TEXT(fmt), val);
	if( val ~= 1 ) then
		part = part.."s";
	end

	return part;
end

function Clock_FormatTime(time)
	local d, h, m, s;
	local text = "";
	local skip = 1;

	d, h, m, s = ChatFrame_TimeBreakDown(time);
	if( d > 0 ) then
		text = text..Clock_FormatPart(CLOCK_TIME_DAY, d)..", ";
		skip = 0;
	end
	if( (skip == 0) or (h > 0) ) then
		text = text..Clock_FormatPart(CLOCK_TIME_HOUR, h)..", ";
		skip = 0;
	end
	if( (skip == 0) or (m > 0) ) then
		text = text..Clock_FormatPart(CLOCK_TIME_MINUTE, m)..", ";
		skip = 0;
	end
	if( (skip == 0) or (s > 0) ) then
		text = text..Clock_FormatPart(CLOCK_TIME_SECOND, s);
	end

	return text;
end

function Clock_DisplaySec_Update(elapsed)
    local DoUpdate = 0;
    if ( Clock_DisplaySec ~= 0 ) and ( Clock_DisplaySec >= 1) then

		CurrentSecond = CurrentSecond + elapsed;
		if( InitialRun == 1 ) then
			local CurrentHour, CurrentMinute = GetGameTime();
			LastMinute = CurrentMinute;
			InitialRun = 2;
		end
	
		if( CurrentSecond >= 1 ) then
			CurrentSecond = CurrentSecond - 1;
			SecondCount = SecondCount + 1;
			
			if( SecondCount >= 60 ) then
				SecondCount = 0;
				DoUpdate = 1;
			end
			
			if ( DoUpdate == 1 ) then
				-- fractions of seconds are lost every time the game lags,
				-- this should keep track of that.
				local CurrentTime = GetTime();
				updateTime = CurrentTime;
				local SecondOffset = ((CurrentTime - 60) - updateTime )/2;
				CurrentSecond = SecondOffset;
				DoUpdate = 0;
			end
			
			if( InitialRun == 2 ) then
				local CurrentHour, CurrentMinute = GetGameTime();
				if( CurrentMinute ~= LastMinute ) then
					updateTime = GetTime();
					SecondCount = 1;
					InitialRun = 0;
					LastMinute = CurrentMinute;
				end
			end
		end
	end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -