annotate ChunkyDataPTBD.cs @ 0:82db9430c2e4 default tip

Initial commit under GPLv3
author IBBoard <dev@ibboard.co.uk>
date Sat, 06 Oct 2018 19:49:25 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file is a part of the Relic Tools and is copyright 2006-2018 IBBoard.
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 // The file and the library/program it is in are licensed under the GNU GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 using System;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using System.IO;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using IBBoard.Graphics;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 using IBBoard.Relic.RelicTools.Exceptions;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 namespace IBBoard.Relic.RelicTools
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 /// <summary>
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 /// Summary description for ChunkyDataPTBD.
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 /// </summary>
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 public class ChunkyDataPTBD : ChunkyDataLayer
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 const float size_x = 64;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 const float size_y = 64;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 float x;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 float y;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 public ChunkyDataPTBD(int version_in, string name_in, byte[] innerData):base("PTBD", version_in, name_in)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 x = BitConverter.ToSingle(innerData,0);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 y = BitConverter.ToSingle(innerData,4);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 public float Pos_x
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 get{ return x; }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 public float Pos_y
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 get{ return y; }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 public float Height
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 get{ return size_y; }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 public float Width
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 get{ return size_x; }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 public override void Save(DirectoryInfo dir, string fileBaseName)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 int width = Info.Width;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 int height = Info.Height;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52 float right = x+size_x;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 float top = y+size_y;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 if (((int)right)>width || ((int)top)>height)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 throw new InvalidChunkException("Badge layer contains an invalid badge position");
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 //create the TGA
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 int fileLength = width*height;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 byte [] file = new byte[fileLength];
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 int pos = 0;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66 for (int i = 0; i<height; i++)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
68 for (int j = 0; j<width; j++)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70 if (x<=j && j<right && y<=i && i<top)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 file[pos] = byte.MaxValue;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 else
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
76 file[pos] = byte.MinValue;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
77 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
78
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
79 pos++;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
80 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 //save the TGA
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84 FileStream str = new FileStream(dir.FullName.TrimEnd(Path.DirectorySeparatorChar)+Path.DirectorySeparatorChar+fileBaseName+"_Badge.tga", FileMode.Create);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
85 BinaryWriter bw = new BinaryWriter(str);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
86 bw.Write(TGA_Greyscale_Header_a);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
87 bw.Write((ushort)width);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
88 bw.Write((ushort)height);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
89 bw.Write(TGA_Greyscale_Header_b);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
90 bw.Write(file);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
91 bw.Flush();
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
92 bw.Close();
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
93 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
94
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
95 public static ChunkyDataPTBD CreateFromTGA(int version, string name, byte[] tgaData)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
96 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
97 //check image type code
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
98 if (tgaData[2]!=0x03)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
99 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
100 bool worked = false;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
101
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
102 if (tgaData[1] == 0x01 && tgaData[2] == 0x01)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
103 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
104 tgaData = ImageConverter.ColourMapToGreyscale(tgaData);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
105 worked = true;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
106 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
107
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
108
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
109 if (!worked)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
110 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
111 ImageConverter.MapEncStruct format = ImageConverter.getMapEncStruct(tgaData[2]);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
112 throw new InvalidFileException("_badge.tga must be an unencoded unmapped monochrome Targa image.\r\n"+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
113 " Image type: "+format.formatType+"\r\n"+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
114 " Image encoded: "+((format.isEncoded)?"yes":"no")+"\r\n"+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
115 " Colour mapped: "+((format.isMapped)?"yes":"no"));
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
116 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
117 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
118
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
119 //check colour depth
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
120 if (tgaData[16]!=0x08)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
121 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
122 throw new InvalidFileException("_badge.tga must be an 8-bit Targa image. Image was "+tgaData[16]+"-bit.");
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
123 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
124
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
125 float pos_x = float.MinValue;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
126 float pos_y = float.MinValue;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
127 int width = (int)tgaData[12]+(((int)tgaData[13])<<8);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
128 int height = (int)tgaData[14]+(((int)tgaData[15])<<8);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
129 int currPos = 0;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
130 int size_x_int = (int)size_x;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
131
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
132 for (currPos = 18; currPos<tgaData.Length; currPos+=size_x_int)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
133 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
134 //try to find our badge;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
135 if (tgaData[currPos]==byte.MaxValue)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
136 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
137 pos_y = (float)((currPos-18)/width);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
138 pos_x = (float)(currPos-18-(pos_y*width));
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
139 break;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
140 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
141 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
142
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
143 if (pos_y!=float.MinValue)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
144 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
145 int maxPossibleEnd = currPos+width;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
146 int extra = 0;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
147
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
148 while (currPos<maxPossibleEnd && tgaData[currPos]==byte.MaxValue)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
149 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
150 currPos++;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
151 extra++;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
152 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
153
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
154 //check where the left hand side should start
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
155 if (pos_x>0 && (tgaData[currPos-size_x_int]!=byte.MaxValue || tgaData[currPos-size_x_int-1]!=byte.MinValue))
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
156 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
157 throw new InvalidFileException("Badge is is not the correct width or is not a solid white square");
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
158 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
159 else
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
160 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
161 pos_x = pos_x+extra-size_x;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
162 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
163
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
164 //and check for the top - not all of the block, just assume a left and bottom side are OK
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
165 int aboveTop = currPos-size_x_int+(width*(int)size_y);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
166 for (int i = currPos-size_x_int; i<=aboveTop && i<tgaData.Length; i+= width)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
167 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
168 if (tgaData[i]!=byte.MaxValue && i!=aboveTop)
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
169 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
170 throw new InvalidFileException("Badge area is too small. Badge must be 64px by 64px");
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
171 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
172 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
173
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
174 //if we got here, it's all OK
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
175
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
176 byte[] data = new byte[16];
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
177
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
178 BitConverter.GetBytes(pos_x).CopyTo(data, 0);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
179 BitConverter.GetBytes(pos_y).CopyTo(data, 4);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
180 BitConverter.GetBytes(size_x).CopyTo(data, 8);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
181 BitConverter.GetBytes(size_y).CopyTo(data, 12);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
182
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
183 return new ChunkyDataPTBD(version, name, data);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
184 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
185 else
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
186 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
187 return null;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
188 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
189 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
190
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
191 public override bool Savable
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
192 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
193 get
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
194 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
195 return true;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
196 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
197 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
198
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
199 public override int DataLength
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
200 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
201 get
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
202 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
203 return 16;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
204 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
205 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
206
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
207 public override byte[] GetDataBytes()
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
208 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
209 byte[] data = new byte[16];
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
210 BitConverter.GetBytes(x).CopyTo(data, 0);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
211 BitConverter.GetBytes(y).CopyTo(data, 4);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
212 BitConverter.GetBytes(size_x).CopyTo(data, 8);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
213 BitConverter.GetBytes(size_y).CopyTo(data, 12);
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
214 return data;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
215 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
216
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
217 public override string GetDisplayDetails()
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
218 {
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
219 return base.GetBaseDisplayDetails()+Environment.NewLine+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
220 "------------"+Environment.NewLine+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
221 "X:\t\t"+x+Environment.NewLine+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
222 "Y:\t\t"+y+Environment.NewLine+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
223 "Width:\t\t"+size_x+Environment.NewLine+
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
224 "Height:\t\t"+size_y;
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
225 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
226 }
82db9430c2e4 Initial commit under GPLv3
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
227 }