root/trunk/MobFlameObj.cpp

Revision 3, 5.6 kB (checked in by sagrer, 10 months ago)

Добавил информационную шапку в файлы исходников.

Line 
1 ///////////////////////////////////////////////////////////
2 //                      MobSurgeon                       //
3 //          Ðåäàêòîð mob-îâ äëÿ Ïðîêëÿòûõ Çåìåëü         //
4 //           Copyright (C) 2005-2007 Gipat Group         //
5 //              Ðàñïðîñòðàíÿåòñÿ íà óñëîâèÿõ             //
6 //    Gipat Group's opened EI-editor-utility license     //
7 //                      âåðñèè 1.0                       //
8 //                                                       //
9 //                  www.gipatgroup.org                   //
10 ///////////////////////////////////////////////////////////
11
12 //Ê ðàáîòå íàä äàííûì ôàéëîì ïðèëîæèëè ðóêè, íîãè.... êîðî÷å àôôòàðû:
13 // 1) Sagrer (sagrer@yandex.ru)
14
15 ////////////////////////////////////////////////////////////////////////
16
17 //---------------------------------------------------------------------------
18
19
20 #pragma hdrstop
21
22 #include "MobFlameObj.h"
23 #include "MobFormat.h"
24
25 //---------------------------------------------------------------------------
26
27 #pragma package(smart_init)
28
29 ///////////////////////////////////
30 //TFlameObjBlock
31 ///////////////////////////////////
32
33 DWORD TFlameObjBlock::GetBlockSize()
34 //Ñ÷èòàåò ñêîëüêî áóäåò âåñèòü áëîê â âèäå áàéòîâ.
35 {
36   //Ïåðåìåííûå...
37   DWORD Result = 40;
38   int i;
39   //44 - ìèíèìàëüíûé ðàçìåð áîíóñíîé ÷àñòè.
40
41   //Ñòðîêè è ìàññèâû áàéòîâ, äèíàìè÷åñêèå ìàñèâû ñ ôèêñèðîâàííîé äëèíîé ýëåìåíòîâ...
42   Result = Result + SoundStr.Length();
43
44   //È ïðèñîáà÷èòü ðàçìåð áàçîâîé ÷àñòè áëîêà ðàññ÷èòàâ åå
45   //÷åðåç ôóíêöèþ ïðåäêà...
46   Result = Result + TObjectObjBlock::GetBlockSize();
47
48   return Result;
49 };
50
51 bool TFlameObjBlock::ReadBlock(byte *Buff, DWORD BuffSize, bool UseLog, TMob *PMobObj)
52 //×èòàåò èíôó î ðû÷àãå â ñòðóêòóðó.
53 {
54   //Ëîêàëüíûå ïåðåìåííûå...
55   DWORD TempDW1, MinBlockSgn, MinBlockSize, TempDW2, i;
56   bool Result = true;
57   __int64 Cursor = 8;
58
59   //×èòàòü ñàì áëîê â öèêëå.
60   do
61   {
62     //Ïðî÷èòàòü ñèãíàòóðó ïîäáëîêà...
63     memcpy(&MinBlockSgn,&Buff[Cursor],4);
64     Cursor = Cursor+4;
65     //Òåïåðü â çàâèñèìîñòè îò òèïà ïîäáëîêà...
66     if (MinBlockSgn == Flm_Sgn_Coords)
67     {
68       //Òèïà êîîðäèíàòû
69       //float X 3
70
71       //Ïðîñêî÷èòü äëèíó áëîêà...
72       Cursor = Cursor+4;
73       //Ïðî÷èòàòü çíà÷åíèÿ...
74       memcpy(&CoordX,&Buff[Cursor],4);
75       Cursor = Cursor+4;
76       memcpy(&CoordY,&Buff[Cursor],4);
77       Cursor = Cursor+4;
78       memcpy(&CoordZ,&Buff[Cursor],4);
79       Cursor = Cursor+4;
80     }
81
82
83     else if (MinBlockSgn == Flm_Sgn_FlameSize)
84     {
85       //Òèïà ðàçìåð ôëåéìû
86       //float
87
88       //Ïðîñêî÷èòü äëèíó áëîêà...
89       Cursor = Cursor+4;
90       //Ïðî÷èòàòü çíà÷åíèå...
91       memcpy(&FlameSize,&Buff[Cursor],4);
92       Cursor = Cursor+4;
93     }
94
95     else if (MinBlockSgn == Flm_Sgn_SoundStr)
96     {
97       //Íó òèïà çâóê äëÿ åòîãî ôëåéìà
98       //String
99
100       //Ïðî÷èòàòü äëèíó áëîêà...
101       memcpy(&MinBlockSize,&Buff[Cursor],4);
102       Cursor = Cursor+4;
103       SoundStr.SetLength(MinBlockSize-8);
104
105       if ((MinBlockSize-8) != 0)
106       {
107         //Ïðî÷èòàòü çíà÷åíèå...
108         memcpy(&SoundStr[1],&Buff[Cursor],(MinBlockSize-8));
109         Cursor = Cursor+(MinBlockSize-8);
110       }
111       else
112       {
113         SoundStr = "";
114       };
115     }
116
117     else if (MinBlockSgn == Obj_Sgn_BodyTextures)  //×òî îçíà÷àåò ÷òî ýòî íà÷àëàñü áàçîâàÿ ÷àñòü áëîêà...
118     {
119       //À òåïåðü - âûçâàòü ôóíêöèþ ïðåäêà ÷èòàþùóþ áàçîâóþ ÷àñòü áëîêà...
120       MinBlockSize = GetNMobBlocksSize(Buff,Cursor-4,17);  //Ïîñ÷èòàòü ñêîêà âåñèò áàçîâûé êóñîê
121       TObjectObjBlock::ReadBlock(&Buff[Cursor-12],MinBlockSize+8,UseLog,PMobObj);
122       Cursor = Cursor+MinBlockSize-4;  //Ïðûãíóòü íà íà÷àëî ñëåä. áëîêà...
123     };
124
125   }
126   while (Cursor != BuffSize);
127
128   StopLoadUnitBlock:        //Ìåòêà äëÿ ñêà÷êà ñþäà ïðè ñáîå.
129   ;
130   return Result;
131 };
132
133 byte* TFlameObjBlock::GenBlock(DWORD& BlockSize)
134 //Ãåíåðèðóåò áëîê...
135 {
136   //Ïåðåìåííûå
137   byte* Result = NULL;
138   int i = 0; //ñ÷åò÷èê
139   DWORD ChetireBaita, BlockSignature;
140   DWORD Cursor = 0;
141
142   //Èòàê, ïîåõàëè.  íà÷àëå âûäåëèòü ïàìÿòü ïîä áëîê...
143   BlockSize = GetBlockSize();
144   Result = new byte[BlockSize];
145
146   //Çàòåì ñèãíàòóðà...
147   memcpy(&Result[Cursor],&OB_Sgn_Flame,4);
148   Cursor = Cursor+4;
149
150   //Äëèíà áëîêà.
151   memcpy(&Result[Cursor],&BlockSize,4);
152   Cursor = Cursor+4;
153  
154   //Òèïà êîîðäèíàòû
155   //float X 3
156   //Ñèãíàòóðà ïîäáëîêà
157   memcpy(&Result[Cursor],&Flm_Sgn_Coords,4);
158   Cursor = Cursor+4;
159   //Äëèíà áëîêà...
160   ChetireBaita = 20;
161   memcpy(&Result[Cursor],&ChetireBaita,4);
162   Cursor = Cursor+4;
163   //Çíà÷åíèÿ
164   memcpy(&Result[Cursor],&CoordX,4);
165   Cursor = Cursor+4;
166   memcpy(&Result[Cursor],&CoordY,4);
167   Cursor = Cursor+4;
168   memcpy(&Result[Cursor],&CoordZ,4);
169   Cursor = Cursor+4;
170
171   //Òèïà ðàçìåð ôëåéìû
172   //float
173   //Ñèãíàòóðà ïîäáëîêà
174   memcpy(&Result[Cursor],&Flm_Sgn_FlameSize,4);
175   Cursor = Cursor+4;
176   //Äëèíà áëîêà...
177   ChetireBaita = 12;
178   memcpy(&Result[Cursor],&ChetireBaita,4);
179   Cursor = Cursor+4;
180   //Çíà÷åíèå
181   memcpy(&Result[Cursor],&FlameSize,4);
182   Cursor = Cursor+4;
183
184   //Íó òèïà çâóê äëÿ åòîãî ôëåéìà
185   //String
186   //Ñèãíàòóðà ïîäáëîêà
187   memcpy(&Result[Cursor],&Flm_Sgn_SoundStr,4);
188   Cursor = Cursor+4;
189   //Äëèíà áëîêà...
190   ChetireBaita = 8+SoundStr.Length();
191   memcpy(&Result[Cursor],&ChetireBaita,4);
192   Cursor = Cursor+4;
193   //Çíà÷íèå...
194   if (ChetireBaita > 8)
195   {
196     memcpy(&Result[Cursor],&SoundStr[1],SoundStr.Length());
197     Cursor = Cursor+SoundStr.Length();
198   };
199
200   //À òåïåðü ïðèñîáà÷èòü áàçîâóþ ÷àñòü...
201   TObjectObjBlock::GenBasePart(&Result[Cursor]);
202   Cursor = Cursor+TObjectObjBlock::GetBlockSize()-8;
203
204   //È âåðíóòü ðåçóëüòàò...
205   return Result;
206 };
Note: See TracBrowser for help on using the browser.