Project

General

Profile

Download (4.32 KB) Statistics
| Branch: | Revision:

sokoban / distorted-sokoban / src / main / java / org / distorted / sokoban / SokobanRecordInfo.java @ 1f6d1786

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
}
(9-9/12)