source: Daodan/MSVC/Flatline_PacketReader.c@ 584

Last change on this file since 584 was 584, checked in by gumby, 14 years ago

Almost working rework

File size: 2.7 KB
Line 
1#include "Flatline.h"
2
3bool DoWeUpdateThis( uint16_t BitSet, uint16_t Flag )
4{
5 if( BitSet & (1 << Flag) ) return true;
6 return false;
7}
8
9//Long winded?
10
11void FLcPacketBufferToPlayerData( PlayerData* PD)
12{
13 player_info* PI = PlayerList[PD->ID];
14 uint8_t * DataPointer = PD->data;
15
16 if(!PI)
17 {
18 //TODO: Store this data and then apply it once we have a character that matches!
19 return;
20 }
21
22 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Input) )
23 {
24 PI->Input = *(PlayerInput*)DataPointer;
25 DataPointer += FLpData_PartSize( PFlag_Input);
26 }
27
28 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Facing) )
29 {
30 PI->Facings = *(PlayerFacing*)DataPointer;
31 DataPointer += FLpData_PartSize( PFlag_Facing);
32 }
33
34 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Health) )
35 {
36 PI->Health = *(PlayerHealth*)DataPointer;
37 DataPointer += FLpData_PartSize( PFlag_Health);
38 }
39
40 //Not done
41 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Score) )
42 {
43 PI->Score = *(PlayerScore*)DataPointer;
44 DataPointer += FLpData_PartSize( PFlag_Score);
45 }
46
47 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_FramePing) )
48 {
49 PlayerFP* FP = (PlayerFP*)DataPointer;
50 PI->Ping = FP->Ping;
51
52 if(FP->Frame != -1)
53 {
54 PI->Frame = FP->Frame;
55 }
56 else
57 {
58 PD->UpdateFlags &= ~( 1 << PFlag_FramePing );
59 }
60 DataPointer += FLpData_PartSize( PFlag_FramePing);
61 }
62
63 //Not done
64 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Inventory) )
65 {
66 PI->Inventory = *(PlayerInventory*)DataPointer;
67 DataPointer += FLpData_PartSize( PFlag_Inventory );
68 }
69
70 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Class ) )
71 {
72 TMrInstance_GetDataPtr( 'ONCC', (char*)DataPointer, &PI->Class );
73 DataPointer += FLpData_PartSize( PFlag_Class );
74 }
75
76 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Position ) )
77 {
78 PI->Position = *(Vector3*)DataPointer;
79 DataPointer += FLpData_PartSize( PFlag_Position );
80 }
81
82 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Animation ) )
83 {
84 TMrInstance_GetDataPtr( 'TRAM', (char*)DataPointer, &PI->Animation );
85 DataPointer += FLpData_PartSize( PFlag_Animation );
86 }
87
88 if( DoWeUpdateThis( PD->UpdateFlags, PFlag_Throws ) )
89 {
90 PI->ThrowData = *(PlayerThrowData*)DataPointer;
91 DataPointer += FLpData_PartSize( PFlag_Throws );
92 }
93
94
95 PI->UpdateFlags |= PD->UpdateFlags;
96}
97
98void FLcReadPlayerData( flatline_packet* Packet, int16_t Size )
99{
100 PlayerData* PDCast = (PlayerData*)Packet->data;
101 Size -= FLATLINE_HEADER;
102 while(Size > 0)
103 {
104 if(PDCast->Size > Size)
105 {
106 DDrConsole_PrintF( "Warning, (almost) read %hi bytes too much of player data buffer", -Size );
107 break;
108 }
109 FLcPacketBufferToPlayerData( PDCast );
110 Size -= PDCast->Size;
111 PDCast = (PlayerData*)((char*)PDCast + PDCast->Size);
112 }
113
114 //Packet
115}
Note: See TracBrowser for help on using the repository browser.