Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CToggleIcon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Sun Aug 15 01:53:13 2010 UTC (13 years, 9 months ago) by okadu
File MIME type: text/x-c++src
File size: 4081 byte(s)


1 #include "stdafx.h"
2 #include "CToggleIcon.h"
3 #include "CSkinPlugin.h"
4 #include "CNeutralMode.h"
5
6 // 内部定数
7 const float TI_SLIDE_RATIO = 0.2f; // スライド速度
8 const float FRAME_TEX_UNIT = 0.125f; // フレームマッピング単位
9 const float ICON_TEX_UNIT = 0.25f; // アイコンマッピング単位
10
11 // static メンバ
12 CToggleIcon *CToggleIcon::ms_PointIcon;
13
14 /*
15 * [static]
16 * ポップアップテキストの描画
17 */
18 void CToggleIcon::RenderPopupText(){
19 if(!ms_PointIcon) return;
20 g_StrTex->RenderRight(
21 g_DispWidth-TILE_UNIT*2-TILE_QUAD, g_DispHeight-TILE_UNIT*2,
22 0xffffffff, 0xff000000, ms_PointIcon->m_Text.c_str());
23 g_StrTex->RenderRight(
24 g_DispWidth-TILE_UNIT*2-TILE_QUAD, g_DispHeight-TILE_UNIT,
25 0xffffffff, 0xff000000, ms_PointIcon->m_Expression.c_str());
26 ms_PointIcon = NULL;
27 }
28
29 /*
30 * 初期化
31 */
32 void CToggleIcon::Init(
33 int x, int y, // 座標
34 int w, int h, // サイズ
35 char *t, // テキスト
36 char *expr, // 説明文
37 CInterface *p, // 親
38 CToggleIcon *l, // 前リンク
39 CGameMode *mode, // 対応モード
40 DWORD key, // ホットキー
41 float u1, float v1, // 開放時テクスチャ座標
42 float u2, float v2, // 押下時テクスチャ座標
43 float u3, float v3, // アイコンテクスチャ座標
44 int mid // モード ID
45 ){
46 CInterface::Init(x, y, w, h, t, p);
47 m_State = 0;
48 m_Check = 0;
49 m_ModeID = mid;
50 m_TexPullU = u1, m_TexPullV = v1;
51 m_TexPushU = u2, m_TexPushV = v2;
52 m_TexIconU = u3, m_TexIconV = v3;
53 m_Expression = expr;
54 m_HotKey = key;
55 m_SyncMode = mode;
56 if(l){
57 m_Check = 0;
58 m_Prev = l;
59 m_Next = m_Prev->m_Next;
60 m_Prev->m_Next = m_Next->m_Prev = this;
61 }else{
62 m_Check = 1;
63 m_Prev = m_Next = this;
64 }
65 }
66
67 /*
68 * チェッククリア
69 */
70 void CToggleIcon::ClearGroupCheck(){
71 CToggleIcon *ptr = this;
72 do{
73 ptr->m_Check = 0;
74 ptr = ptr->m_Next;
75 } while(ptr!=this);
76 }
77
78 /*
79 * チェック設定
80 */
81 void CToggleIcon::SetCheck(
82 bool inv // 反転フラグ
83 ){
84 if(inv && m_Check){
85 m_Check = 0;
86 }else if(!m_Check){
87 ClearGroupCheck();
88 m_Check = 1;
89 }
90 if(m_SyncMode && !g_RSPV){
91 if(m_Check) m_SyncMode->Enter();
92 else g_NeutralMode->Enter();
93 }
94 }
95
96 /*
97 * スライド座標設定
98 */
99 void CToggleIcon::SetSlidePos(
100 int x, int y, // 座標
101 bool fix // 固定フラグ
102 ){
103 if(fix){
104 m_SlideY = y;
105 SetPos(x, y);
106 }else{
107 m_SlideY = y*TI_SLIDE_RATIO+m_SlideY*(1.0f-TI_SLIDE_RATIO);
108 SetPos(x, Round(m_SlideY));
109 }
110 }
111
112 /*
113 * 入力チェック
114 */
115 bool CToggleIcon::ScanInput(
116 bool enkey, // ホットキー有効
117 bool enmouse // マウス有効
118 ){
119 POINT pos = g_Cursor.GetPos();
120 if(enmouse && IsInside(pos.x, pos.y)){
121 ms_PointIcon = this;
122 switch(GetButton(DIM_LEFT)){
123 case S_PUSH:
124 m_State = 2;
125 g_Skin->MouseDown();
126 return true;
127 case S_HOLD:
128 if(m_State){
129 m_State = 2;
130 return true;
131 }
132 break;
133 default:
134 if(m_State){
135 g_Skin->MouseUp();
136 SetCheck(true);
137 }
138 m_State = 0;
139 break;
140 }
141 }else if(m_State){
142 switch(GetButton(DIM_LEFT)){
143 case S_HOLD:
144 m_State = 1;
145 return true;
146 default:
147 m_State = 0;
148 break;
149 }
150 }
151 if(enkey && GetKey(m_HotKey)==S_PUSH
152 && !CheckShift() && !CheckCtrl() && !CheckAlt()){
153 g_Skin->MouseUp();
154 SetCheck(true);
155 return true;
156 }
157 return CInterface::ScanInput();
158 }
159
160 /*
161 * レンダリング
162 */
163 void CToggleIcon::Render(
164 float altu, float altv // 代替テクスチャ座標
165 ){
166 CInterface::RenderBrother();
167 int px, py, push = m_State==2;
168 GetAbsPos(&px, &py);
169 g_Skin->SetFrameTexture();
170 if(altu>=0.0f) SetUVMap(altu, altv, altu+FRAME_TEX_UNIT, altv+FRAME_TEX_UNIT);
171 else if(m_Check) SetUVMap(m_TexPushU, m_TexPushV,
172 m_TexPushU+FRAME_TEX_UNIT, m_TexPushV+FRAME_TEX_UNIT);
173 else SetUVMap(m_TexPullU, m_TexPullV,
174 m_TexPullU+FRAME_TEX_UNIT, m_TexPullV+FRAME_TEX_UNIT);
175 TexMap2DRect(px, py, px+m_Width, py+m_Height, 0xffffffff);
176 if(m_State==2) return;
177 g_Skin->SetIconTexture(m_ModeID);
178 SetUVMap(m_TexIconU, m_TexIconV,
179 m_TexIconU+ICON_TEX_UNIT, m_TexIconV+ICON_TEX_UNIT);
180 if(m_Check) px++, py++;
181 TexMap2DRect(px, py, px+m_Width, py+m_Height, 0xffffffff);
182 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26