aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/LavaSlimeModel.cpp
blob: ae94547b37f31534a5c5b12968599c3aff270460 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include "..\Minecraft.World\Mth.h"
#include "LavaSlimeModel.h"
#include "ModelPart.h"
#include "..\Minecraft.World\LavaSlime.h"


LavaSlimeModel::LavaSlimeModel()
{
    for (int i = 0; i < BODYCUBESLENGTH; i++)
	{
        int u = 0;
        int v = i;
        if (i == 2)
		{
            u = 24;
            v = 10;
        }
		else if (i == 3)
		{
            u = 24;
            v = 19;
        }
        bodyCubes[i] = new ModelPart(this, u, v);
        bodyCubes[i]->addBox(-4.0f, 16.0f + (float)i, -4.0f, 8, 1, 8);
    }

    insideCube = new ModelPart(this, 0, 16);
    insideCube->addBox(-2, 16 + 2, -2, 4, 4, 4);

	// 4J added - compile now to avoid random performance hit first time cubes are rendered
	insideCube->compile(1.0f/16.0f);
	for( int i = 0; i < BODYCUBESLENGTH; i++ )
	{
		bodyCubes[i]->compile(1.0f/16.0f);
	}
}

int LavaSlimeModel::getModelVersion()
{
        return 5;
}

void LavaSlimeModel::prepareMobModel(std::shared_ptr<Mob> mob, float time, float r, float a)
{
	 std::shared_ptr<LavaSlime> lavaSlime = std::dynamic_pointer_cast<LavaSlime>(mob);

    float slimeSquish = (lavaSlime->oSquish + (lavaSlime->squish - lavaSlime->oSquish) * a);
    if (slimeSquish < 0)
	{
        slimeSquish = 0.0f;
    }

    for (int i = 0; i < BODYCUBESLENGTH; i++)
	{
        bodyCubes[i]->y = -(4 - i) * slimeSquish * 1.7f;
    }
}

void LavaSlimeModel::render(std::shared_ptr<Entity> entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled)
{
	setupAnim(time, r, bob, yRot, xRot, scale);

	insideCube->render(scale, usecompiled);
	for (int i = 0; i < BODYCUBESLENGTH; i++)
	{
		bodyCubes[i]->render(scale, usecompiled);
	}

}