mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 10:35:11 -04:00
Cleanup CustomModel packet reading code, pretty sure this doesn't break anything
This commit is contained in:
parent
2f4dae3295
commit
730eadf47b
148
src/Protocol.c
148
src/Protocol.c
@ -99,6 +99,12 @@ static String UNSAFE_GetString(cc_uint8* data) {
|
|||||||
return String_Init((char*)data, length, STRING_SIZE);
|
return String_Init((char*)data, length, STRING_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float GetFloat(cc_uint8* data) {
|
||||||
|
union IntAndFloat raw;
|
||||||
|
raw.u = Stream_GetU32_BE(data);
|
||||||
|
return raw.f;
|
||||||
|
}
|
||||||
|
|
||||||
static void ReadString(cc_uint8** ptr, String* str) {
|
static void ReadString(cc_uint8** ptr, String* str) {
|
||||||
int i, length = 0;
|
int i, length = 0;
|
||||||
cc_uint8* data = *ptr;
|
cc_uint8* data = *ptr;
|
||||||
@ -1391,75 +1397,44 @@ static void CPE_SpawnEffect(cc_uint8* data) {
|
|||||||
Particles_CustomEffect(data[0], x, y, z, originX, originY, originZ);
|
Particles_CustomEffect(data[0], x, y, z, originX, originY, originZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CustomModels */
|
|
||||||
|
|
||||||
static float ReadFloat(cc_uint8* data) {
|
|
||||||
union IntAndFloat raw;
|
|
||||||
raw.u = Stream_GetU32_BE(data);
|
|
||||||
return raw.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CPE_DefineModel(cc_uint8* data) {
|
static void CPE_DefineModel(cc_uint8* data) {
|
||||||
/* 115 = 1 + 64 + 1 + 2*4 + 3*4 + 2*3*4 + 2*2 + 1 */
|
cc_uint8 id = data[0];
|
||||||
cc_uint8 id = *data++;
|
struct CustomModel* cm = &custom_models[id];
|
||||||
struct CustomModel* customModel = &custom_models[id];
|
|
||||||
String name;
|
String name;
|
||||||
cc_uint8 flags;
|
cc_uint8 flags;
|
||||||
cc_uint8 numParts;
|
cc_uint8 numParts;
|
||||||
|
|
||||||
if (id >= MAX_CUSTOM_MODELS) return;
|
if (id >= MAX_CUSTOM_MODELS) return;
|
||||||
CustomModel_Undefine(customModel);
|
CustomModel_Undefine(cm);
|
||||||
Model_Init(&customModel->model);
|
Model_Init(&cm->model);
|
||||||
|
|
||||||
/* read name */
|
name = UNSAFE_GetString(data + 1);
|
||||||
name = UNSAFE_GetString(data);
|
String_CopyToRawArray(cm->name, &name);
|
||||||
data += STRING_SIZE;
|
|
||||||
String_CopyToRawArray(customModel->name, &name);
|
|
||||||
|
|
||||||
/* read bool flags */
|
flags = data[65];
|
||||||
flags = *data++;
|
cm->model.bobbing = flags & 0x01;
|
||||||
customModel->model.bobbing = (flags >> 0) & 1;
|
cm->model.pushes = flags & 0x02;
|
||||||
customModel->model.pushes = (flags >> 1) & 1;
|
cm->model.usesHumanSkin = flags & 0x04;
|
||||||
customModel->model.usesHumanSkin = (flags >> 2) & 1;
|
cm->model.calcHumanAnims = flags & 0x08;
|
||||||
customModel->model.calcHumanAnims = (flags >> 3) & 1;
|
|
||||||
|
|
||||||
/* read nameY, eyeY */
|
cm->nameY = GetFloat(data + 66);
|
||||||
customModel->nameY = ReadFloat(data);
|
cm->eyeY = GetFloat(data + 70);
|
||||||
data += 4;
|
|
||||||
customModel->eyeY = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
|
|
||||||
/* read collisionBounds */
|
cm->collisionBounds.X = GetFloat(data + 74);
|
||||||
customModel->collisionBounds.X = ReadFloat(data);
|
cm->collisionBounds.Y = GetFloat(data + 78);
|
||||||
data += 4;
|
cm->collisionBounds.Z = GetFloat(data + 82);
|
||||||
customModel->collisionBounds.Y = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
customModel->collisionBounds.Z = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
|
|
||||||
/* read pickingBoundsAABB */
|
cm->pickingBoundsAABB.Min.X = GetFloat(data + 86);
|
||||||
customModel->pickingBoundsAABB.Min.X = ReadFloat(data);
|
cm->pickingBoundsAABB.Min.Y = GetFloat(data + 90);
|
||||||
data += 4;
|
cm->pickingBoundsAABB.Min.Z = GetFloat(data + 94);
|
||||||
customModel->pickingBoundsAABB.Min.Y = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
customModel->pickingBoundsAABB.Min.Z = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
|
|
||||||
customModel->pickingBoundsAABB.Max.X = ReadFloat(data);
|
cm->pickingBoundsAABB.Max.X = GetFloat(data + 98);
|
||||||
data += 4;
|
cm->pickingBoundsAABB.Max.Y = GetFloat(data + 102);
|
||||||
customModel->pickingBoundsAABB.Max.Y = ReadFloat(data);
|
cm->pickingBoundsAABB.Max.Z = GetFloat(data + 106);
|
||||||
data += 4;
|
|
||||||
customModel->pickingBoundsAABB.Max.Z = ReadFloat(data);
|
|
||||||
data += 4;
|
|
||||||
|
|
||||||
/* read uScale, vScale */
|
cm->uScale = Stream_GetU16_BE(data + 110);
|
||||||
customModel->uScale = Stream_GetU16_BE(data);
|
cm->vScale = Stream_GetU16_BE(data + 112);
|
||||||
data += 2;
|
numParts = data[114];
|
||||||
customModel->vScale = Stream_GetU16_BE(data);
|
|
||||||
data += 2;
|
|
||||||
|
|
||||||
/* read # CustomModelParts */
|
|
||||||
numParts = *data++;
|
|
||||||
|
|
||||||
if (numParts > MAX_CUSTOM_MODEL_PARTS) {
|
if (numParts > MAX_CUSTOM_MODEL_PARTS) {
|
||||||
String msg; char msgBuffer[256];
|
String msg; char msgBuffer[256];
|
||||||
@ -1474,14 +1449,13 @@ static void CPE_DefineModel(cc_uint8* data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
customModel->numParts = numParts;
|
cm->numParts = numParts;
|
||||||
customModel->vertices = Mem_AllocCleared(
|
cm->vertices = Mem_AllocCleared(
|
||||||
numParts * MODEL_BOX_VERTICES,
|
numParts * MODEL_BOX_VERTICES,
|
||||||
sizeof(struct ModelVertex),
|
sizeof(struct ModelVertex),
|
||||||
"CustomModel vertices"
|
"CustomModel vertices"
|
||||||
);
|
);
|
||||||
|
cm->defined = true;
|
||||||
customModel->defined = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CPE_DefineModelPart(cc_uint8* data) {
|
static void CPE_DefineModelPart(cc_uint8* data) {
|
||||||
@ -1504,18 +1478,18 @@ static void CPE_DefineModelPart(cc_uint8* data) {
|
|||||||
customModel->curPartIndex++;
|
customModel->curPartIndex++;
|
||||||
|
|
||||||
/* read min, max vec3 coords */
|
/* read min, max vec3 coords */
|
||||||
part->min.X = ReadFloat(data);
|
part->min.X = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->min.Y = ReadFloat(data);
|
part->min.Y = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->min.Z = ReadFloat(data);
|
part->min.Z = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
|
|
||||||
part->max.X = ReadFloat(data);
|
part->max.X = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->max.Y = ReadFloat(data);
|
part->max.Y = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->max.Z = ReadFloat(data);
|
part->max.Z = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
|
|
||||||
/* read u, v coords for our 6 faces */
|
/* read u, v coords for our 6 faces */
|
||||||
@ -1532,26 +1506,26 @@ static void CPE_DefineModelPart(cc_uint8* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* read rotation origin point */
|
/* read rotation origin point */
|
||||||
part->rotationOrigin.X = ReadFloat(data);
|
part->rotationOrigin.X = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->rotationOrigin.Y = ReadFloat(data);
|
part->rotationOrigin.Y = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->rotationOrigin.Z = ReadFloat(data);
|
part->rotationOrigin.Z = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
|
|
||||||
/* read rotation angles */
|
/* read rotation angles */
|
||||||
part->rotation.X = ReadFloat(data);
|
part->rotation.X = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->rotation.Y = ReadFloat(data);
|
part->rotation.Y = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
part->rotation.Z = ReadFloat(data);
|
part->rotation.Z = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
|
|
||||||
/* read anim */
|
/* read anim */
|
||||||
part->anim = *data++;
|
part->anim = *data++;
|
||||||
|
|
||||||
/* read animModifier */
|
/* read animModifier */
|
||||||
part->animModifier = ReadFloat(data);
|
part->animModifier = GetFloat(data);
|
||||||
data += 4;
|
data += 4;
|
||||||
|
|
||||||
/* read bool flags */
|
/* read bool flags */
|
||||||
@ -1756,34 +1730,6 @@ static void BlockDefs_DefineBlockExt(cc_uint8* data) {
|
|||||||
BlockDefs_DefineBlockCommonEnd(data, 1, block);
|
BlockDefs_DefineBlockCommonEnd(data, 1, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void HandleDefineModel(cc_uint8* data) {
|
|
||||||
int start = reader.index - 1;
|
|
||||||
cc_uint8 id = *data++;
|
|
||||||
cc_uint8 type = *data++;
|
|
||||||
CustomModel model = null;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case 0:
|
|
||||||
model = new CustomModel(game);
|
|
||||||
model.ReadSetupPacket(reader);
|
|
||||||
game.ModelCache.CustomModels[id] = model;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
model = game.ModelCache.CustomModels[id];
|
|
||||||
if (model != null) model.ReadMetadataPacket(reader);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
model = game.ModelCache.CustomModels[id];
|
|
||||||
if (model != null) model.ReadDefinePartPacket(reader);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
model = game.ModelCache.CustomModels[id];
|
|
||||||
if (model != null) model.ReadRotationPacket(reader);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
static void BlockDefs_Reset(void) {
|
static void BlockDefs_Reset(void) {
|
||||||
if (!Game_UseCPE || !Game_AllowCustomBlocks) return;
|
if (!Game_UseCPE || !Game_AllowCustomBlocks) return;
|
||||||
Net_Set(OPCODE_DEFINE_BLOCK, BlockDefs_DefineBlock, 80);
|
Net_Set(OPCODE_DEFINE_BLOCK, BlockDefs_DefineBlock, 80);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user