mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Pass model parts via pointer for drawing models, saves 3kb
This commit is contained in:
parent
599a092fb9
commit
698c8fde65
@ -155,13 +155,13 @@ void IModel_ApplyTexture(struct Entity* entity) {
|
|||||||
IModel_vScale = entity->vScale * (_64x64 ? 0.015625f : 0.03125f);
|
IModel_vScale = entity->vScale * (_64x64 ? 0.015625f : 0.03125f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModel_DrawPart(struct ModelPart part) {
|
void IModel_DrawPart(struct ModelPart* part) {
|
||||||
struct IModel* model = IModel_ActiveModel;
|
struct IModel* model = IModel_ActiveModel;
|
||||||
struct ModelVertex* src = &model->vertices[part.Offset];
|
struct ModelVertex* src = &model->vertices[part->Offset];
|
||||||
VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index];
|
VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index];
|
||||||
Int32 i;
|
Int32 i, count = part->Count;
|
||||||
|
|
||||||
for (i = 0; i < part.Count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
struct ModelVertex v = *src;
|
struct ModelVertex v = *src;
|
||||||
dst->X = v.X; dst->Y = v.Y; dst->Z = v.Z;
|
dst->X = v.X; dst->Y = v.Y; dst->Z = v.Z;
|
||||||
dst->Col = IModel_Cols[i >> 2];
|
dst->Col = IModel_Cols[i >> 2];
|
||||||
@ -170,24 +170,25 @@ void IModel_DrawPart(struct ModelPart part) {
|
|||||||
dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
|
dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
|
||||||
src++; dst++;
|
src++; dst++;
|
||||||
}
|
}
|
||||||
model->index += part.Count;
|
model->index += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IModel_RotateX t = cosX * v.Y + sinX * v.Z; v.Z = -sinX * v.Y + cosX * v.Z; v.Y = t;
|
#define IModel_RotateX t = cosX * v.Y + sinX * v.Z; v.Z = -sinX * v.Y + cosX * v.Z; v.Y = t;
|
||||||
#define IModel_RotateY t = cosY * v.X - sinY * v.Z; v.Z = sinY * v.X + cosY * v.Z; v.X = t;
|
#define IModel_RotateY t = cosY * v.X - sinY * v.Z; v.Z = sinY * v.X + cosY * v.Z; v.X = t;
|
||||||
#define IModel_RotateZ t = cosZ * v.X + sinZ * v.Y; v.Y = -sinZ * v.X + cosZ * v.Y; v.X = t;
|
#define IModel_RotateZ t = cosZ * v.X + sinZ * v.Y; v.Y = -sinZ * v.X + cosZ * v.Y; v.X = t;
|
||||||
|
|
||||||
void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart part, bool head) {
|
void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart* part, bool head) {
|
||||||
struct IModel* model = IModel_ActiveModel;
|
struct IModel* model = IModel_ActiveModel;
|
||||||
Real32 cosX = Math_CosF(-angleX), sinX = Math_SinF(-angleX);
|
Real32 cosX = Math_CosF(-angleX), sinX = Math_SinF(-angleX);
|
||||||
Real32 cosY = Math_CosF(-angleY), sinY = Math_SinF(-angleY);
|
Real32 cosY = Math_CosF(-angleY), sinY = Math_SinF(-angleY);
|
||||||
Real32 cosZ = Math_CosF(-angleZ), sinZ = Math_SinF(-angleZ);
|
Real32 cosZ = Math_CosF(-angleZ), sinZ = Math_SinF(-angleZ);
|
||||||
Real32 x = part.RotX, y = part.RotY, z = part.RotZ;
|
Real32 x = part->RotX, y = part->RotY, z = part->RotZ;
|
||||||
|
|
||||||
struct ModelVertex* src = &model->vertices[part.Offset];
|
struct ModelVertex* src = &model->vertices[part->Offset];
|
||||||
VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index];
|
VertexP3fT2fC4b* dst = &ModelCache_Vertices[model->index];
|
||||||
Int32 i;
|
Int32 i, count = part->Count;
|
||||||
for (i = 0; i < part.Count; i++) {
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
struct ModelVertex v = *src;
|
struct ModelVertex v = *src;
|
||||||
v.X -= x; v.Y -= y; v.Z -= z;
|
v.X -= x; v.Y -= y; v.Z -= z;
|
||||||
Real32 t = 0;
|
Real32 t = 0;
|
||||||
@ -218,7 +219,7 @@ void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct Model
|
|||||||
dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
|
dst->V = (v.V & UV_POS_MASK) * IModel_vScale - (v.V >> UV_MAX_SHIFT) * 0.01f * IModel_vScale;
|
||||||
src++; dst++;
|
src++; dst++;
|
||||||
}
|
}
|
||||||
model->index += part.Count;
|
model->index += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModel_RenderArm(struct IModel* model, struct Entity* entity) {
|
void IModel_RenderArm(struct IModel* model, struct Entity* entity) {
|
||||||
@ -251,15 +252,16 @@ void IModel_RenderArm(struct IModel* model, struct Entity* entity) {
|
|||||||
Gfx_LoadMatrix(&Gfx_View);
|
Gfx_LoadMatrix(&Gfx_View);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModel_DrawArmPart(struct ModelPart part) {
|
void IModel_DrawArmPart(struct ModelPart* part) {
|
||||||
struct IModel* model = IModel_ActiveModel;
|
struct IModel* model = IModel_ActiveModel;
|
||||||
part.RotX = model->armX / 16.0f;
|
struct ModelPart arm = *part;
|
||||||
part.RotY = (model->armY + model->armY / 2) / 16.0f;
|
arm.RotX = model->armX / 16.0f;
|
||||||
|
arm.RotY = (model->armY + model->armY / 2) / 16.0f;
|
||||||
|
|
||||||
if (Game_ClassicArmModel) {
|
if (Game_ClassicArmModel) {
|
||||||
IModel_DrawRotate(0, -90 * MATH_DEG2RAD, 120 * MATH_DEG2RAD, part, false);
|
IModel_DrawRotate(0, -90 * MATH_DEG2RAD, 120 * MATH_DEG2RAD, &arm, false);
|
||||||
} else {
|
} else {
|
||||||
IModel_DrawRotate(-20 * MATH_DEG2RAD, -70 * MATH_DEG2RAD, 135 * MATH_DEG2RAD, part, false);
|
IModel_DrawRotate(-20 * MATH_DEG2RAD, -70 * MATH_DEG2RAD, 135 * MATH_DEG2RAD, &arm, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,10 +76,10 @@ void IModel_Render(struct IModel* model, struct Entity* entity);
|
|||||||
void IModel_SetupState(struct IModel* model, struct Entity* entity);
|
void IModel_SetupState(struct IModel* model, struct Entity* entity);
|
||||||
void IModel_UpdateVB(void);
|
void IModel_UpdateVB(void);
|
||||||
void IModel_ApplyTexture(struct Entity* entity);
|
void IModel_ApplyTexture(struct Entity* entity);
|
||||||
void IModel_DrawPart(struct ModelPart part);
|
void IModel_DrawPart(struct ModelPart* part);
|
||||||
void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart part, bool head);
|
void IModel_DrawRotate(Real32 angleX, Real32 angleY, Real32 angleZ, struct ModelPart* part, bool head);
|
||||||
void IModel_RenderArm(struct IModel* model, struct Entity* entity);
|
void IModel_RenderArm(struct IModel* model, struct Entity* entity);
|
||||||
void IModel_DrawArmPart(struct ModelPart part);
|
void IModel_DrawArmPart(struct ModelPart* part);
|
||||||
|
|
||||||
/* Describes data for a box being built. */
|
/* Describes data for a box being built. */
|
||||||
struct BoxDesc {
|
struct BoxDesc {
|
||||||
|
@ -182,13 +182,13 @@ static void ChickenModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void ChickenModel_DrawModel(struct Entity* entity) {
|
static void ChickenModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head, true);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head2, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head2, true);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Chicken_Head3, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Chicken_Head3, true);
|
||||||
|
|
||||||
IModel_DrawPart(Chicken_Torso);
|
IModel_DrawPart(&Chicken_Torso);
|
||||||
IModel_DrawRotate(0, 0, -Math_AbsF(entity->Anim.LeftArmX), Chicken_LeftWing, false);
|
IModel_DrawRotate(0, 0, -Math_AbsF(entity->Anim.LeftArmX), &Chicken_LeftWing, false);
|
||||||
IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), Chicken_RightWing, false);
|
IModel_DrawRotate(0, 0, Math_AbsF(entity->Anim.LeftArmX), &Chicken_RightWing, false);
|
||||||
|
|
||||||
PackedCol col = IModel_Cols[0];
|
PackedCol col = IModel_Cols[0];
|
||||||
UInt32 i;
|
UInt32 i;
|
||||||
@ -196,8 +196,8 @@ static void ChickenModel_DrawModel(struct Entity* entity) {
|
|||||||
IModel_Cols[i] = PackedCol_Scale(col, 0.7f);
|
IModel_Cols[i] = PackedCol_Scale(col, 0.7f);
|
||||||
}
|
}
|
||||||
|
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Chicken_LeftLeg, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Chicken_LeftLeg, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Chicken_RightLeg, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Chicken_RightLeg, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,13 +264,13 @@ static void CreeperModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void CreeperModel_DrawModel(struct Entity* entity) {
|
static void CreeperModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Creeper_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Creeper_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Creeper_Torso);
|
IModel_DrawPart(&Creeper_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_LeftLegFront, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_LeftLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_RightLegFront, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_RightLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Creeper_LeftLegBack, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Creeper_LeftLegBack, false);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Creeper_RightLegBack, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Creeper_RightLegBack, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,13 +338,13 @@ static void PigModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void PigModel_DrawModel(struct Entity* entity) {
|
static void PigModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Pig_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Pig_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Pig_Torso);
|
IModel_DrawPart(&Pig_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_LeftLegFront, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Pig_LeftLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Pig_RightLegFront, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Pig_RightLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Pig_LeftLegBack, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Pig_LeftLegBack, false);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Pig_RightLegBack, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Pig_RightLegBack, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,24 +457,24 @@ static void SheepModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void SheepModel_DrawModel(struct Entity* entity) {
|
static void SheepModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Sheep_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Sheep_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Sheep_Torso);
|
IModel_DrawPart(&Sheep_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_LeftLegFront, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Sheep_LeftLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Sheep_RightLegFront, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Sheep_RightLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Sheep_LeftLegBack, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Sheep_LeftLegBack, false);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Sheep_RightLegBack, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Sheep_RightLegBack, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
|
|
||||||
if (entity->ModelIsSheepNoFur) return;
|
if (entity->ModelIsSheepNoFur) return;
|
||||||
Gfx_BindTexture(ModelCache_Textures[fur_Index].TexID);
|
Gfx_BindTexture(ModelCache_Textures[fur_Index].TexID);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Fur_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Fur_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Fur_Torso);
|
IModel_DrawPart(&Fur_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_LeftLegFront, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Fur_LeftLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Fur_RightLegFront, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Fur_RightLegFront, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, Fur_LeftLegBack, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Fur_LeftLegBack, false);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, Fur_RightLegBack, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Fur_RightLegBack, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,18 +545,18 @@ static void SkeletonModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void SkeletonModel_DrawModel(struct Entity* entity) {
|
static void SkeletonModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Skeleton_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Skeleton_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Skeleton_Torso);
|
IModel_DrawPart(&Skeleton_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Skeleton_LeftLeg, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Skeleton_LeftLeg, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Skeleton_RightLeg, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Skeleton_RightLeg, false);
|
||||||
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Skeleton_LeftArm, false);
|
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Skeleton_LeftArm, false);
|
||||||
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Skeleton_RightArm, false);
|
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.RightArmZ, &Skeleton_RightArm, false);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SkeletonModel_DrawArm(struct Entity* entity) {
|
static void SkeletonModel_DrawArm(struct Entity* entity) {
|
||||||
IModel_DrawArmPart(Skeleton_RightArm);
|
IModel_DrawArmPart(&Skeleton_RightArm);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,24 +623,24 @@ static void SpiderModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void SpiderModel_DrawModel(struct Entity* entity) {
|
static void SpiderModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Spider_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Spider_Head, true);
|
||||||
IModel_DrawPart(Spider_Link);
|
IModel_DrawPart(&Spider_Link);
|
||||||
IModel_DrawPart(Spider_End);
|
IModel_DrawPart(&Spider_End);
|
||||||
|
|
||||||
Real32 rotX = Math_SinF(entity->Anim.WalkTime) * entity->Anim.Swing * MATH_PI;
|
Real32 rotX = Math_SinF(entity->Anim.WalkTime) * entity->Anim.Swing * MATH_PI;
|
||||||
Real32 rotZ = Math_CosF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 16.0f;
|
Real32 rotZ = Math_CosF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 16.0f;
|
||||||
Real32 rotY = Math_SinF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 32.0f;
|
Real32 rotY = Math_SinF(entity->Anim.WalkTime * 2) * entity->Anim.Swing * MATH_PI / 32.0f;
|
||||||
IModel_Rotation = ROTATE_ORDER_XZY;
|
IModel_Rotation = ROTATE_ORDER_XZY;
|
||||||
|
|
||||||
IModel_DrawRotate(rotX, quarterPi + rotY, eighthPi + rotZ, Spider_LeftLeg, false);
|
IModel_DrawRotate(rotX, quarterPi + rotY, eighthPi + rotZ, &Spider_LeftLeg, false);
|
||||||
IModel_DrawRotate(-rotX, eighthPi + rotY, eighthPi + rotZ, Spider_LeftLeg, false);
|
IModel_DrawRotate(-rotX, eighthPi + rotY, eighthPi + rotZ, &Spider_LeftLeg, false);
|
||||||
IModel_DrawRotate(rotX, -eighthPi - rotY, eighthPi - rotZ, Spider_LeftLeg, false);
|
IModel_DrawRotate(rotX, -eighthPi - rotY, eighthPi - rotZ, &Spider_LeftLeg, false);
|
||||||
IModel_DrawRotate(-rotX, -quarterPi - rotY, eighthPi - rotZ, Spider_LeftLeg, false);
|
IModel_DrawRotate(-rotX, -quarterPi - rotY, eighthPi - rotZ, &Spider_LeftLeg, false);
|
||||||
|
|
||||||
IModel_DrawRotate(rotX, -quarterPi + rotY, -eighthPi + rotZ, Spider_RightLeg, false);
|
IModel_DrawRotate(rotX, -quarterPi + rotY, -eighthPi + rotZ, &Spider_RightLeg, false);
|
||||||
IModel_DrawRotate(-rotX, -eighthPi + rotY, -eighthPi + rotZ, Spider_RightLeg, false);
|
IModel_DrawRotate(-rotX, -eighthPi + rotY, -eighthPi + rotZ, &Spider_RightLeg, false);
|
||||||
IModel_DrawRotate(rotX, eighthPi - rotY, -eighthPi - rotZ, Spider_RightLeg, false);
|
IModel_DrawRotate(rotX, eighthPi - rotY, -eighthPi - rotZ, &Spider_RightLeg, false);
|
||||||
IModel_DrawRotate(-rotX, quarterPi - rotY, -eighthPi - rotZ, Spider_RightLeg, false);
|
IModel_DrawRotate(-rotX, quarterPi - rotY, -eighthPi - rotZ, &Spider_RightLeg, false);
|
||||||
|
|
||||||
IModel_Rotation = ROTATE_ORDER_ZYX;
|
IModel_Rotation = ROTATE_ORDER_ZYX;
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
@ -716,20 +716,20 @@ static void ZombieModel_GetPickingBounds(struct AABB* bb) {
|
|||||||
|
|
||||||
static void ZombieModel_DrawModel(struct Entity* entity) {
|
static void ZombieModel_DrawModel(struct Entity* entity) {
|
||||||
IModel_ApplyTexture(entity);
|
IModel_ApplyTexture(entity);
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0.0f, 0.0f, Zombie_Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Zombie_Head, true);
|
||||||
|
|
||||||
IModel_DrawPart(Zombie_Torso);
|
IModel_DrawPart(&Zombie_Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0.0f, 0.0f, Zombie_LeftLeg, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, 0, &Zombie_LeftLeg, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0.0f, 0.0f, Zombie_RightLeg, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, 0, &Zombie_RightLeg, false);
|
||||||
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.LeftArmZ, Zombie_LeftArm, false);
|
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.LeftArmZ, &Zombie_LeftArm, false);
|
||||||
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0.0f, entity->Anim.RightArmZ, Zombie_RightArm, false);
|
IModel_DrawRotate(90.0f * MATH_DEG2RAD, 0, entity->Anim.RightArmZ, &Zombie_RightArm, false);
|
||||||
|
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, Zombie_Hat, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &Zombie_Hat, true);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ZombieModel_DrawArm(struct Entity* entity) {
|
static void ZombieModel_DrawArm(struct Entity* entity) {
|
||||||
IModel_DrawArmPart(Zombie_RightArm);
|
IModel_DrawArmPart(&Zombie_RightArm);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,30 +850,30 @@ static void HumanModel_DrawModel(struct Entity* entity, struct ModelSet* models)
|
|||||||
UInt8 type = IModel_skinType;
|
UInt8 type = IModel_skinType;
|
||||||
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)];
|
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)];
|
||||||
|
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, model->Head, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &model->Head, true);
|
||||||
IModel_DrawPart(model->Torso);
|
IModel_DrawPart(&model->Torso);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLeg, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, &model->LeftLeg, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, model->RightLeg, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLeg, false);
|
||||||
|
|
||||||
IModel_Rotation = ROTATE_ORDER_XZY;
|
IModel_Rotation = ROTATE_ORDER_XZY;
|
||||||
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArm, false);
|
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, &model->LeftArm, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, model->RightArm, false);
|
IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArm, false);
|
||||||
IModel_Rotation = ROTATE_ORDER_ZYX;
|
IModel_Rotation = ROTATE_ORDER_ZYX;
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
|
|
||||||
Gfx_SetAlphaTest(true);
|
Gfx_SetAlphaTest(true);
|
||||||
IModel_ActiveModel->index = 0;
|
IModel_ActiveModel->index = 0;
|
||||||
if (IModel_skinType != SKIN_TYPE_64x32) {
|
if (IModel_skinType != SKIN_TYPE_64x32) {
|
||||||
IModel_DrawPart(model->TorsoLayer);
|
IModel_DrawPart(&model->TorsoLayer);
|
||||||
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, model->LeftLegLayer, false);
|
IModel_DrawRotate(entity->Anim.LeftLegX, 0, entity->Anim.LeftLegZ, &model->LeftLegLayer, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, model->RightLegLayer, false);
|
IModel_DrawRotate(entity->Anim.RightLegX, 0, entity->Anim.RightLegZ, &model->RightLegLayer, false);
|
||||||
|
|
||||||
IModel_Rotation = ROTATE_ORDER_XZY;
|
IModel_Rotation = ROTATE_ORDER_XZY;
|
||||||
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, model->LeftArmLayer, false);
|
IModel_DrawRotate(entity->Anim.LeftArmX, 0, entity->Anim.LeftArmZ, &model->LeftArmLayer, false);
|
||||||
IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, model->RightArmLayer, false);
|
IModel_DrawRotate(entity->Anim.RightArmX, 0, entity->Anim.RightArmZ, &model->RightArmLayer, false);
|
||||||
IModel_Rotation = ROTATE_ORDER_ZYX;
|
IModel_Rotation = ROTATE_ORDER_ZYX;
|
||||||
}
|
}
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, model->Hat, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &model->Hat, true);
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -881,9 +881,9 @@ static void HumanModel_DrawArm(struct Entity* entity, struct ModelSet* models) {
|
|||||||
UInt8 type = IModel_skinType;
|
UInt8 type = IModel_skinType;
|
||||||
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)];
|
struct ModelSet* model = &models[type == SKIN_TYPE_64x64_SLIM ? 2 : (type == SKIN_TYPE_64x64 ? 1 : 0)];
|
||||||
|
|
||||||
IModel_DrawArmPart(model->RightArm);
|
IModel_DrawArmPart(&model->RightArm);
|
||||||
if (IModel_skinType != SKIN_TYPE_64x32) {
|
if (IModel_skinType != SKIN_TYPE_64x32) {
|
||||||
IModel_DrawArmPart(model->RightArmLayer);
|
IModel_DrawArmPart(&model->RightArmLayer);
|
||||||
}
|
}
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
@ -1080,9 +1080,9 @@ static void HeadModel_DrawModel(struct Entity* entity) {
|
|||||||
struct ModelPart part;
|
struct ModelPart part;
|
||||||
|
|
||||||
part = Humanoid_Set[0].Head; part.RotY += 4.0f / 16.0f;
|
part = Humanoid_Set[0].Head; part.RotY += 4.0f / 16.0f;
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, part, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &part, true);
|
||||||
part = Humanoid_Set[0].Hat; part.RotY += 4.0f / 16.0f;
|
part = Humanoid_Set[0].Hat; part.RotY += 4.0f / 16.0f;
|
||||||
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, part, true);
|
IModel_DrawRotate(-entity->HeadX * MATH_DEG2RAD, 0, 0, &part, true);
|
||||||
|
|
||||||
IModel_UpdateVB();
|
IModel_UpdateVB();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user