1
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
2
|
//
|
3
|
// Leszek Koltunski, 2011-04-09
|
4
|
//
|
5
|
package org.distorted.sokoban;
|
6
|
|
7
|
import android.graphics.Bitmap;
|
8
|
import android.graphics.Paint;
|
9
|
import android.graphics.Canvas;
|
10
|
import android.graphics.Paint.Align;
|
11
|
|
12
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
13
|
|
14
|
public class SokobanRecordInfo
|
15
|
{
|
16
|
private static int mFontSize;
|
17
|
public static int mCorr;
|
18
|
|
19
|
private int move;
|
20
|
private int time;
|
21
|
private String name, cutname, country, movetime;
|
22
|
private Bitmap img;
|
23
|
private static Paint mPaint;
|
24
|
private boolean mine;
|
25
|
|
26
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
27
|
|
28
|
SokobanRecordInfo()
|
29
|
{
|
30
|
mFontSize = (int)(SokobanLevels.levelInfoH*0.4);
|
31
|
mCorr = 1+ mFontSize/3 + SokobanLevels.FLAG_H/2;
|
32
|
mPaint = new Paint();
|
33
|
mPaint.setAntiAlias(true);
|
34
|
mPaint.setTextSize(mFontSize);
|
35
|
}
|
36
|
|
37
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
38
|
|
39
|
SokobanRecordInfo(int m, int t, String n, String c)
|
40
|
{
|
41
|
set(m,t,n,c);
|
42
|
}
|
43
|
|
44
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
45
|
|
46
|
public void set(int m, int t, String n, String c)
|
47
|
{
|
48
|
move = m;
|
49
|
time = t;
|
50
|
name = n;
|
51
|
country = c;
|
52
|
movetime = move<SokobanDatabase.INVALID ? move+"m "+time+"s" : null;
|
53
|
img = SokobanLevels.getInstance().getFlag(c);
|
54
|
|
55
|
SokobanDatabase db = SokobanDatabase.getInstance();
|
56
|
mine = (db!=null && db.getName().equals(n));
|
57
|
|
58
|
setCut();
|
59
|
}
|
60
|
|
61
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
62
|
|
63
|
public void set(int m, int t)
|
64
|
{
|
65
|
move = m;
|
66
|
time = t;
|
67
|
movetime = move<SokobanDatabase.INVALID ? move+"m "+time+"s" : null;
|
68
|
setCut();
|
69
|
}
|
70
|
|
71
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
72
|
|
73
|
public void set(String n)
|
74
|
{
|
75
|
name = n;
|
76
|
mine = SokobanDatabase.getInstance().getName().equals(n);
|
77
|
setCut();
|
78
|
}
|
79
|
|
80
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
81
|
|
82
|
public static int getFontSize()
|
83
|
{
|
84
|
return mFontSize;
|
85
|
}
|
86
|
|
87
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
88
|
|
89
|
public int getMove()
|
90
|
{
|
91
|
return move;
|
92
|
}
|
93
|
|
94
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
95
|
|
96
|
public int getTime()
|
97
|
{
|
98
|
return time;
|
99
|
}
|
100
|
|
101
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
102
|
|
103
|
public String getName()
|
104
|
{
|
105
|
return name;
|
106
|
}
|
107
|
|
108
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
109
|
|
110
|
public String getCountry()
|
111
|
{
|
112
|
return country;
|
113
|
}
|
114
|
|
115
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
116
|
|
117
|
public void draw(int x, int y, Canvas c)
|
118
|
{
|
119
|
if( move<SokobanDatabase.INVALID )
|
120
|
{
|
121
|
boolean red = (mine && SokobanCanvas.getState()==SokobanCanvas.STATE_SUCD);
|
122
|
int x2 = x+SokobanLevels.levelInfoW-SokobanLevels.mGapI-SokobanLevels.FLAG_W+2;
|
123
|
|
124
|
if( red ) mPaint.setColor(0xffff0000);
|
125
|
|
126
|
if( movetime!=null )
|
127
|
{
|
128
|
mPaint.setTextAlign(Align.LEFT);
|
129
|
c.drawText( movetime, x+SokobanLevels.mGapI-2, y+1, mPaint);
|
130
|
}
|
131
|
|
132
|
mPaint.setTextAlign(Align.RIGHT);
|
133
|
|
134
|
if( name!=null )
|
135
|
{
|
136
|
c.drawText(cutname==null? name:cutname, x2-SokobanLevels.mGapI/2 , y+1, mPaint);
|
137
|
}
|
138
|
if( img!=null )
|
139
|
{
|
140
|
c.drawBitmap( img, x2, y-mCorr, null);
|
141
|
}
|
142
|
|
143
|
if( red ) mPaint.setColor(0xff000000);
|
144
|
}
|
145
|
}
|
146
|
|
147
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
148
|
|
149
|
private void setCut()
|
150
|
{
|
151
|
if( name==null || move==SokobanDatabase.INVALID ) { cutname=null; return; }
|
152
|
|
153
|
float len2 = mPaint.measureText(movetime);
|
154
|
float len1 = mPaint.measureText(name);
|
155
|
int len0 = SokobanLevels.levelInfoW-5*SokobanLevels.mGapI/2-SokobanLevels.FLAG_W+4;
|
156
|
|
157
|
if( len1+len2>len0 )
|
158
|
{
|
159
|
int l = name.length();
|
160
|
|
161
|
while( l>=2 && len1+len2>len0 )
|
162
|
{
|
163
|
l--;
|
164
|
cutname = name.substring(0,l);
|
165
|
len1 = mPaint.measureText(cutname);
|
166
|
}
|
167
|
}
|
168
|
else cutname = null;
|
169
|
}
|
170
|
|
171
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
172
|
// end of SokobanRecordInfo
|
173
|
}
|