root/lang/d/koke/trunk/clickable.d @ 6336

Revision 6336, 4.9 kB (checked in by itkz, 7 years ago)

move to trunk

Line 
1/********************************************************************************/
2/*  clickable.d                                                                                                                                 */
3/*------------------------------------------------------------------------------*/
4/*      製作              ( ゜ワ゜)ノ / 松久貫太                                                                  */
5/*      製作開始    2007/12/06                                                                                                              */
6/*      MAIL            omega@personal.email.ne.jp                                                                              */
7/*      URL             http://nagoya.cool.ne.jp/o_mega                                                                         */
8/*                                                                                                                                                              */
9/*      このソースは「やわらかライセンス」の元で配布されています。                                   */
10/*-更新履歴---------------------------------------------------------------------*/
11/*      2007/--/--                                                                                                                                      */
12/*-その他-----------------------------------------------------------------------*/
13/*      なし                                                                                                                                              */
14/********************************************************************************/
15
16/* ライブラリのインポート *******************************************************/
17private import std.string;
18private import vector;
19private import hell2;
20
21// koke依存拡張
22class ImageButton{
23        const int BUTTON_WIDTH = 80;
24        const int BUTTON_HEIGHT = 32;
25       
26        int type;
27       
28        enum TYPE{
29                UP_DEL,                 // うp&削除
30                HERBICIDE,              // 除草剤
31                MANAGE_RAY,             // 運営レーザー
32                CALL_NICO,              // ニコ厨を呼ぶ
33                ROAD_ROLLER,    // ロードローラー
34        }
35       
36        this(TYPE type){
37                this.type = type;
38        }
39}
40
41class ClickablePool{
42        Clickable clist[];
43        int count;
44        const int MAX_COUNT = 32;
45       
46        string selected;
47       
48        this(){
49                clist = new Clickable[MAX_COUNT];
50                foreach(inout click ; clist) click = null;
51               
52                this.count = count;
53                this.selected = "";
54        }
55       
56        void add(string str,Vec3 pos,Vec3 size){
57                Clickable newc = new Clickable(str,pos,size);
58               
59                foreach(inout c ; clist){
60                        if(!c){
61                                c = newc;
62                                return;
63                        }
64                }
65        }
66        void add(string str,Vec3 pos,ImageButton.TYPE type){
67                Vec3 size = new Vec3(ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT , 0);
68                Clickable newc = new Clickable(str , pos , size , 0 , new ImageButton(type));
69               
70                foreach(inout c ; clist){
71                        if(!c){
72                                c = newc;
73                                return;
74                        }
75                }
76        }
77       
78        string getMouseOver(){
79                foreach(inout c ; clist){
80                        if(c && c.onMouse()){
81                                return c.str;
82                        }
83                }
84                return "";
85        }
86       
87        string getMouseClick(){
88                if(Hell_isPushMouse()) {
89                        string mov = getMouseOver();
90                        if(mov != "") selected = getMouseOver();
91                        return mov;
92                }
93                return "";
94        }
95       
96        string getSelected(){return selected;}
97       
98        void draw(){
99                foreach(inout c ; clist){
100                        if(c){
101                                if(c.str == selected){
102                                        c.selected = true;
103                                }else{
104                                        c.selected = false;
105                                }
106                                c.draw();
107                        }
108                }
109        }
110}
111
112
113class Clickable{
114        Vec3 position;
115        Vec3 size;
116        string str;
117        float zoom;
118        bool selected;
119       
120        ImageButton imagebutton;
121       
122        this(string str,Vec3 pos,Vec3 size,float zoom = 2.0,ImageButton imagebutton = null){
123                this.str = str;
124                this.position = pos;
125                this.size = size;
126                this.zoom = zoom;
127                this.imagebutton = imagebutton;
128                this.selected = false;
129        }
130       
131        bool onMouse(){
132                if(position.x <= Hell_getMouseX() && position.x + size.x >= Hell_getMouseX()
133                        && position.y <= Hell_getMouseY() && position.y + size.y >= Hell_getMouseY())
134                {
135                        return true;
136                }
137                return false;
138        }
139       
140        void draw(){
141                if(imagebutton is null){
142                        // 通常
143                        if(onMouse()){
144                                Hell_drawFont(str , cast(int)position.x , cast(int)position.y , zoom , 255,128,32);
145                        }else{
146                                Hell_drawFont(str , cast(int)position.x , cast(int)position.y , zoom ,  64, 64, 64);
147                        }
148                }else{
149                        // イメージボタンモード
150                        if(selected){                   // 選択状態
151                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
152                                                , ImageButton.BUTTON_WIDTH * 2 , 0 , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT);
153                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
154                                                , 0 , (cast(int)imagebutton.type + 1) * ImageButton.BUTTON_HEIGHT
155                                                , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT
156                                                ,1,1,0, 255,255,255);
157                        }else if(onMouse()){    // onMouse状態
158                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
159                                                , ImageButton.BUTTON_WIDTH , 0 , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT);
160                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
161                                                , 0 , (cast(int)imagebutton.type + 1) * ImageButton.BUTTON_HEIGHT
162                                                , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT
163                                                ,1,1,0, 64,64,64);
164                        }else{                                  // 他
165                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
166                                                , 0 , 0 , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT);
167                                Hell_drawTexture("menu" , cast(int)position.x , cast(int)position.y
168                                                , 0 , (cast(int)imagebutton.type + 1) * ImageButton.BUTTON_HEIGHT
169                                                , ImageButton.BUTTON_WIDTH , ImageButton.BUTTON_HEIGHT
170                                                ,1,1,0, 64,64,64);
171                        }
172                }
173        }
174}
175
176/********************************************************************************/
Note: See TracBrowser for help on using the browser.