📄 blockmenuview.cpp
字号:
#include "blockmenuview.h"
#include "blockarbiter.h"
#include "blockdata.h"
#include "superball_res.h"
#include "AEEDisp.h "
static const uint16 bg[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
BlockMenuView::BlockMenuView(BlockApp *app) : AppView((AEEApplet *)app)
{
}
BlockMenuView::~BlockMenuView()
{
if(m_pg)
IGRAPHICS_Release(m_pg);
delete m_mgrm;
}
AppResult BlockMenuView::Open()
{
int i;
cx = GetBlockData()->scrWidth/2;
cy = GetBlockData()->scrHeight/2;
if(GetBlockData()->scrWidth <= GetBlockData()->scrHeight - 14)
{
bigcircle_r = GetBlockData()->scrWidth/2;
if(GetBlockData()->scrWidth/5 > 25)
smallcircle_r = 25;
else
smallcircle_r = GetBlockData()->scrWidth/5;
}
else
{
bigcircle_r = GetBlockData()->scrHeight/2 - 7;
if((GetBlockData()->scrHeight-14)/5 > 25)
smallcircle_r = 25;
else
smallcircle_r = (GetBlockData()->scrHeight-14)/5;
}
m_mgrm = new SpriteMgr((AEEApplet*)m_app);
m_mgrm->LoadScene(SPRITE_SIZE_16X16, IDI_TILE16, SUPERBALL_RES_FILE, TILE);
m_mgrm->RegisterTile(1);
m_map.SetManager(m_mgrm);
m_map.RegisterProperty((uint16*)bg, 0, 0, MAP_SIZE_16, MAP_SIZE_16, TILE_SIZE_16X16);
m_mgrm->LoadScene(SPRITE_SIZE_16X16, IDS_MENU, SUPERBALL_RES_FILE, SPRITE);
m_mgrm->RegisterSprite(11);
m_smm[10].SetManager(m_mgrm);
m_smm[10].RegisterProperty(GetBlockData()->scrWidth/2-8 , GetBlockData()->scrHeight/2-8, 0, 3, SPRITE_SIZE_16X16);
for(i = 0; i < 10; i++)
m_smm[i].SetManager(m_mgrm);
for(i = 0; i <= 10; i = i+10)
{
m_smm[0].RegisterProperty(cx-15 , cy-8, 1+i, 2, SPRITE_SIZE_16X16);
m_smm[1].RegisterProperty(cx+3 , cy-8, 2+i, 2, SPRITE_SIZE_16X16);
m_smm[2].RegisterProperty(cx-18 , cy+30, 3+i, 2, SPRITE_SIZE_16X16);
m_smm[3].RegisterProperty(cx+8 , cy+30, 4+i, 2, SPRITE_SIZE_16X16);
m_smm[4].RegisterProperty(cx-18 , cy-43, 5+i, 2, SPRITE_SIZE_16X16);
m_smm[5].RegisterProperty(cx+8 , cy-43, 6+i, 2, SPRITE_SIZE_16X16);
m_smm[6].RegisterProperty(cx-40 , cy-24, 7+i, 2, SPRITE_SIZE_16X16);
m_smm[7].RegisterProperty(cx-40 , cy+11, 8+i, 2, SPRITE_SIZE_16X16);
m_smm[8].RegisterProperty(cx+29 , cy-24, 9+i, 2, SPRITE_SIZE_16X16);
m_smm[9].RegisterProperty(cx+29 , cy+11, 10+i, 2, SPRITE_SIZE_16X16);
}
m_mgrm->RenderScene();
ISHELL_CreateInstance(m_app->m_pIShell, AEECLSID_GRAPHICS, (void**)&m_pg);
IGRAPHICS_SetFillMode(m_pg, false);
IGRAPHICS_SetColor(m_pg, 255, 255, 255, 0);
m_active = 0;
m_RorG = true;
return SUCCESS;
}
AppResult BlockMenuView::Close()
{
IGRAPHICS_Release(m_pg);
m_pg = NULL;
if(m_mgrm)
delete m_mgrm;
m_mgrm = NULL;
return SUCCESS;
}
AppResult BlockMenuView::Update()
{
m_RorG = !m_RorG;
m_smm[m_active*2].ModifyStripIndex(m_active*2+1+(m_RorG ? 10 : 0));
m_smm[m_active*2+1].ModifyStripIndex(m_active*2+2+(m_RorG ? 10 : 0));
m_mgrm->RenderScene();
circle.cx = cx;
circle.cy = cy;
circle.r = bigcircle_r-3;
IGRAPHICS_DrawCircle(m_pg, &circle);
circle.r = bigcircle_r-2;
IGRAPHICS_DrawCircle(m_pg, &circle);
circle.r = bigcircle_r-1;
IGRAPHICS_DrawCircle(m_pg, &circle);
circle.r = smallcircle_r;
IGRAPHICS_DrawCircle(m_pg, &circle);
circle.r = smallcircle_r-1;
IGRAPHICS_DrawCircle(m_pg, &circle);
circle.r = smallcircle_r+1;
IGRAPHICS_DrawCircle(m_pg, &circle);
line.sx = cx - bigcircle_r*707/1000;
line.sy = cy - bigcircle_r*707/1000;
line.ex = cx - bigcircle_r*707/2500;
line.ey = cy - bigcircle_r*707/2500;
IGRAPHICS_DrawLine(m_pg, &line);
line.sx = cx + bigcircle_r*707/1000;
line.sy = cy - bigcircle_r*707/1000;
line.ex = cx + bigcircle_r*707/2500;
line.ey = cy - bigcircle_r*707/2500;
IGRAPHICS_DrawLine(m_pg, &line);
line.sx = cx - bigcircle_r*707/1000;
line.sy = cy + bigcircle_r*707/1000;
line.ex = cx - bigcircle_r*707/2500;
line.ey = cy + bigcircle_r*707/2500;
IGRAPHICS_DrawLine(m_pg, &line);
line.sx = cx + bigcircle_r*707/1000;
line.sy = cy + bigcircle_r*707/1000;
line.ex = cx + bigcircle_r*707/2500;
line.ey = cy + bigcircle_r*707/2500;
IGRAPHICS_DrawLine(m_pg, &line);
return SUCCESS;
}
AppResult BlockMenuView::Enable()
{
return SUCCESS;
}
AppResult BlockMenuView::Disable()
{
return SUCCESS;
}
ETStatus BlockMenuView::HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32)
{
switch(evtCode)
{
case EVT_KEY/*_PRESS*/:
switch(param16)
{
case AVK_LEFT:
if(m_active <= 2)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 3;
m_smm[10].MoveToPos(cx-40, cy-8);
}
else if(m_active == 4)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 0;
m_smm[10].MoveToPos(cx-8, cy-8);
}
return ET_PROCESSED;
case AVK_RIGHT:
if(m_active <= 2)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 4;
m_smm[10].MoveToPos(cx+28, cy-8);
}
else if(m_active == 3)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 0;
m_smm[10].MoveToPos(cx-8, cy-8);
}
return ET_PROCESSED;
case AVK_UP:
if(m_active == 0 || m_active >= 3)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 2;
m_smm[10].MoveToPos(cx-8, cy-40);
}
else if(m_active == 1)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 0;
m_smm[10].MoveToPos(cx-8, cy-8);
}
return ET_PROCESSED;
case AVK_DOWN:
if(m_active == 0 || m_active>=3)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 1;
m_smm[10].MoveToPos(cx-8, cy+28);
}
else if(m_active == 2)
{
m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
m_active = 0;
m_smm[10].MoveToPos(cx-8, cy-8);
}
return ET_PROCESSED;
case AVK_SELECT:
switch(m_active)
{
case 0: m_arbiter->Arbit(IDW_GAME); return ET_PROCESSED;
case 1:
ISHELL_CloseApplet(m_app->m_pIShell, FALSE);
return ET_PROCESSED;
case 2: m_arbiter->Arbit(IDW_SCORE); return ET_PROCESSED;
case 3: m_arbiter->Arbit(IDW_HELP); return ET_PROCESSED;
case 4: m_arbiter->Arbit(IDW_ABOUT); return ET_PROCESSED;
default: break;
}
default:
break;
}
default:
break;
}
return AppView::HandleKeyEvent(evtCode,param16,param32);
}
ETStatus BlockMenuView::HandleUserEvent(AEEEvent evtCode, uint16 param16, uint32 param32)
{
switch(evtCode)
{
case EVT_USER_TIMER:
if(param16 == 1)
{
Update();
return ET_PROCESSED;
}
default:
break;
}
return AppView::HandleUserEvent(evtCode,param16,param32);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -