255 lines
7.3 KiB
Plaintext
255 lines
7.3 KiB
Plaintext
|
|
/*
|
|||
|
|
文件名: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);
|