aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/RemotePlayer.cpp
blob: dcfd69926b494b8863afc44e2f2aff8eafc1848c (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include "stdafx.h"
#include "RemotePlayer.h"
#include "..\Minecraft.World\net.minecraft.world.item.h"
#include "..\Minecraft.World\Mth.h"

RemotePlayer::RemotePlayer(Level *level, const wstring& name) : Player(level, name)
{
	// 4J - added initialisers
	hasStartedUsingItem = false;
	lSteps = 0;
	lx = ly = lz = lyr = lxr = 0.0;
	fallTime = 0.0f;

	app.DebugPrintf("Created RemotePlayer with name %ls\n", name.c_str() );

    heightOffset = 0;
    footSize = 0;

	noPhysics = true;

    bedOffsetY = 4 / 16.0f;

    viewScale = 10;
}

void RemotePlayer::setDefaultHeadHeight()
{
	heightOffset = 0;
}

bool RemotePlayer::hurt(DamageSource *source, float dmg)
{
	return true;
}

void RemotePlayer::lerpTo(double x, double y, double z, float yRot, float xRot, int steps)
{
//        heightOffset = 0;
    lx = x;
    ly = y;
    lz = z;
    lyr = yRot;
    lxr = xRot;

    lSteps = steps;
}

void RemotePlayer::tick()
{
    bedOffsetY = 0 / 16.0f;
    Player::tick();

    walkAnimSpeedO = walkAnimSpeed;
    double xxd = x - xo;
    double zzd = z - zo;
    float wst = Mth::sqrt(xxd * xxd + zzd * zzd) * 4;
    if (wst > 1) wst = 1;
    walkAnimSpeed += (wst - walkAnimSpeed) * 0.4f;
    walkAnimPos += walkAnimSpeed;

	if (!hasStartedUsingItem && isUsingItemFlag() && inventory->items[inventory->selected] != nullptr)
	{
		shared_ptr<ItemInstance> item = inventory->items[inventory->selected];
		startUsingItem(inventory->items[inventory->selected], Item::items[item->id]->getUseDuration(item));
		hasStartedUsingItem = true;
	}
	else if (hasStartedUsingItem && !isUsingItemFlag())
	{
		stopUsingItem();
		hasStartedUsingItem = false;
	}

	//        if (eatItem != null) {
	//            if (eatItemTickCount <= 25 && eatItemTickCount % 4 == 0) {
	//                spawnEatParticles(eatItem, 5);
	//            }
	//            eatItemTickCount--;
	//            if (eatItemTickCount <= 0) {
	//                spawnEatParticles(eatItem, 16);
	//                swing();
	//                eatItem = null;
	//            }
	//        }
}

float RemotePlayer::getShadowHeightOffs()
{
	return 0;
}

void RemotePlayer::aiStep()
{
    Player::serverAiStep();
    if (lSteps > 0)
	{
        double xt = x + (lx - x) / lSteps;
        double yt = y + (ly - y) / lSteps;
        double zt = z + (lz - z) / lSteps;

        double yrd = lyr - yRot;
        while (yrd < -180)
            yrd += 360;
        while (yrd >= 180)
            yrd -= 360;

        yRot += static_cast<float>((yrd) / lSteps);
        xRot += static_cast<float>((lxr - xRot) / lSteps);

        lSteps--;
        setPos(xt, yt, zt);
        setRot(yRot, xRot);
    }
    oBob = bob;

    float tBob = (float) Mth::sqrt(xd * xd + zd * zd);
    float tTilt = static_cast<float>(atan(-yd * 0.2f)) * 15.0f;
    if (tBob > 0.1f) tBob = 0.1f;
    if (!onGround || getHealth() <= 0) tBob = 0;
    if (onGround || getHealth() <= 0) tTilt = 0;
    bob += (tBob - bob) * 0.4f;
    tilt += (tTilt - tilt) * 0.8f;

}

// 4J Stu - Brought forward change from 1.3 to fix #64688 - Customer Encountered: TU7: Content: Art: Aura of enchanted item is not displayed for other players in online game
void RemotePlayer::setEquippedSlot(int slot, shared_ptr<ItemInstance> item)
{
    if (slot == 0)
	{
        inventory->items[inventory->selected] = item;
    }
	else
	{
        inventory->armor[slot - 1] = item;
    }
}

void RemotePlayer::animateRespawn()
{
//        Player.animateRespawn(this, level);
}

float RemotePlayer::getHeadHeight()
{
	return 1.82f;
}

Pos RemotePlayer::getCommandSenderWorldPosition()
{
    return new Pos(floor(x + .5), floor(y + .5), floor(z + .5));
}