aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/WeightedPressurePlateTile.cpp
blob: 352747ce8be16d0f0fff1b53931df0b03160e1d1 (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
#include "stdafx.h"
#include "net.minecraft.world.entity.item.h"
#include "net.minecraft.world.level.h"
#include "net.minecraft.world.level.redstone.h"
#include "net.minecraft.world.item.h"
#include "Entity.h"
#include "WeightedPressurePlateTile.h"

WeightedPressurePlateTile::WeightedPressurePlateTile(int id, const wstring &tex, Material *material, int maxWeight) : BasePressurePlateTile(id, tex, material)
{
	this->maxWeight = maxWeight;

	// 4J Stu - Move this from base class to use virtual function
	updateShape(getDataForSignal(Redstone::SIGNAL_MAX));
}

int WeightedPressurePlateTile::getSignalStrength(Level *level, int x, int y, int z)
{
	int weightOfEntities = level->getEntitiesOfClass(typeid(Entity), getSensitiveAABB(x, y, z))->size();
	int count = min(weightOfEntities, maxWeight);

	if (count <= 0)
	{
		return 0;
	}
	else
	{
		float pct = min(maxWeight, count) / (float) maxWeight;
		return Mth::ceil(pct * Redstone::SIGNAL_MAX);
	}
}

int WeightedPressurePlateTile::getSignalForData(int data)
{
	return data;
}

int WeightedPressurePlateTile::getDataForSignal(int signal)
{
	return signal;
}

int WeightedPressurePlateTile::getTickDelay(Level *level)
{
	return SharedConstants::TICKS_PER_SECOND / 2;
}