Rindro-Sqr/Project/CumulativeReward/CumulativeReward.nut

255 lines
7.3 KiB
Plaintext
Raw Normal View History

2025-10-14 09:17:56 +08:00
/*
文件名:CumulativeReward.nut
路径:Project/CumulativeReward/CumulativeReward.nut
创建日期:2025-10-05 20:49
文件用途: 累计奖励
*/
class CumulativeRewardC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//下一奖励道具
NextRewardItem = 3037;
//当前阶段
CurrentStage = 1;
//当前阶段已过时间
CurrentStageTime = 0;
//下一阶段所需时间
NextStageTime = 0;
//总累计次数
TotalCount = null;
//当前累计次数
CurrentCount = 0;
//奖励道具信息(数组)
/*对象结构体
{
id = 3037,(编号)
count = 1,(数量)
state = 0,0未达到要求,1达到要求未领取,2已领取
}
*/
RewardItemInfo = null;
//领取按钮List
RewardButtonList = null;
//收包记录时间
RecvPackTime = 0;
//下方界面是否打开Flag
IsOpen = false;
Img1 = null;
//请求配置的Flag
RequestConfig = false;
//全部完成的Flag
AllFinish = false;
function CheckTimePack() {
SendPackEx({
op = 20097001,
});
}
function CheckConfigPack() {
SendPackEx({
op = 20097005,
});
}
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
RewardButtonList = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
//配置回包
RegisterPack(20097004, function(Chunk) {
local Jso = Json.Decode(Chunk);
this.X = Jso.X;
this.Y = Jso.Y;
TotalCount = Jso.TotalCount;
CurrentCount = Jso.currentCount;
RewardItemInfo = Jso.RewardItemInfo;
foreach(button in RewardButtonList) {
RemoveChild(button.ObjectId);
}
RewardButtonList = [];
foreach(pos, value in RewardItemInfo) {
local ButtonBuf = LenheartNewUI_BaseButton(12 + (pos % 4) * 52, 109 + (pos / 4) * 104, 28, 18, "interface2/event/chn_event_2018/180619_honey_time/main.img", 6);
ButtonBuf.Data = pos;
ButtonBuf.OnClickEx = function(button) {
SendPackEx({
op = 20097003,
id = button.Data
});
}.bindenv(this);
ButtonBuf.SetCallBackFunc(function(button) {
if (!IsOpen) button.Visible = false;
else button.Visible = true;
}.bindenv(this));
AddChild(ButtonBuf);
RewardButtonList.append(ButtonBuf);
if (value.start == 0 || value.start == 2) ButtonBuf.State = 8;
}
RequestConfig = false;
}.bindenv(this));
//时间回包
RegisterPack(20097002, function(Chunk) {
local Jso = Json.Decode(Chunk);
local Arr = Jso.info;
NextRewardItem = Arr[0];
CurrentStage = Arr[1];
if (CurrentStage >= 3) {
CurrentStage = 3;
AllFinish = true;
}
CurrentStageTime = Arr[2];
NextStageTime = Arr[3];
RecvPackTime = Clock();
}.bindenv(this));
CheckTimePack();
Img1 = Rindro_Image("interface2/event/chn_event_2018/180619_honey_time/main.img");
}
function RegisterWidget() {
}
//绘制主界面
function DrawMain(obj) {
//绘制进度条底槽
Img1.DrawPng(20, X + 33, Y + 20);
//计算百分比
if (RecvPackTime != 0) {
local TimePercentage = (CurrentStageTime.tofloat() + ((Clock() - RecvPackTime).tofloat())) / NextStageTime.tofloat();
if (TimePercentage > 1.0) {
TimePercentage = 1.0;
if (!RequestConfig && !AllFinish) {
CheckTimePack();
CheckConfigPack();
RequestConfig = true;
}
}
setClip(X + 36, Y + 24, X + 36 + (101.0 * TimePercentage).tointeger(), Y + 24 + 6); //开始裁切
//绘制进度条
Img1.DrawPng(21, X + 36, Y + 24);
releaseClip(); //裁切结束
}
//绘制下一奖励道具
DrawItemBase(X + 6, Y + 6, NextRewardItem, 1);
//绘制盖子
Img1.DrawPng(19, X, Y);
//绘制阶段文字
Img1.DrawExPng(25 + CurrentStage, X + 46, Y + 3, 0, sq_RGBA(255, 255, 255, 250), 0.85, 0.85);
if (IsOpen) {
//绘制所有奖励道具
if (RewardItemInfo) {
foreach(pos, value in RewardItemInfo) {
DrawItemBase(X + 12 + (pos % 4) * 52, Y + 80 + (pos / 4) * 104, value.id, value.count);
}
}
}
}
EffectFlag = false;
EffectTime = 0;
function TopShow(obj) {
if (!IsOpen) return;
if (EffectTime == 0) EffectTime = Clock();
local A = 60;
if (!EffectFlag) {
A = sq_GetUniformVelocity(60, 255, Clock() - EffectTime, 600);
if (A >= 255) {
EffectFlag = true;
EffectTime = Clock();
}
} else {
A = sq_GetUniformVelocity(255, 60, Clock() - EffectTime, 600);
if (A <= 60) {
EffectFlag = false;
EffectTime = Clock();
}
}
//绘制完成
if (RewardItemInfo) {
foreach(pos, value in RewardItemInfo) {
if (value.start == 1) {
L_sq_SetDrawImgModel(2, 0);
Img1.DrawExPng(10, X + 4 + (pos % 4) * 52, Y + 102 + (pos / 4) * 104, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0);
L_sq_ReleaseDrawImgModel();
} else if (value.start == 2) Img1.DrawPng(24, X + 12 + (pos % 4) * 52, Y + 110 + (pos / 4) * 104);
}
}
}
function Show(obj) {
LenheartNewUI_Windows.Show(obj);
DrawMain(obj);
}
//鼠标事件回调
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) {
IsOpen = true;
} else {
IsOpen = false;
}
}
//心跳时间
HeartTime = 0;
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
if (IsOpen) {
Img1.DrawPng(18, X, Y + 38);
Width = 206
Height = 266;
} else {
Width = 144
Height = 40;
}
if (Clock() - HeartTime > 30000) {
CheckTimePack();
HeartTime = Clock();
}
}
}
function Lenheart_CumulativeReward_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("CumulativeReward_Obj")) {
RootTab.rawset("CumulativeReward_Obj", true);
LenheartNewUI_CreateWindow(CumulativeRewardC, "累计奖励窗口", ((getroottable().Rindro_Scr_Width - 405) / 2).tointeger(), 64, 405, 372, 0);
}
}
getroottable()["LenheartFuncTab"].rawset("CumulativeRewardFuncN", Lenheart_CumulativeReward_Fun);