This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
TrueCraft/TrueCraft.Core/Entities/FallingSandEntity.cs
2015-10-04 18:11:29 -04:00

107 lines
2.8 KiB
C#

using System;
using TrueCraft.API;
using TrueCraft.API.Networking;
using TrueCraft.Core.Networking.Packets;
using TrueCraft.API.Entities;
using TrueCraft.API.Server;
using TrueCraft.API.World;
using TrueCraft.Core.Logic.Blocks;
using TrueCraft.API.Physics;
using TrueCraft.Core.Logic;
using System.Linq;
namespace TrueCraft.Core.Entities
{
public class FallingSandEntity : ObjectEntity, IAABBEntity
{
public FallingSandEntity(Vector3 position)
{
_Position = position + new Vector3(0.5);
}
public override byte EntityType { get { return 70; } }
public override Size Size
{
get
{
return new Size(0.98);
}
}
public override IPacket SpawnPacket
{
get
{
return new SpawnGenericEntityPacket(EntityID, (sbyte)EntityType,
MathHelper.CreateAbsoluteInt(Position.X), MathHelper.CreateAbsoluteInt(Position.Y),
MathHelper.CreateAbsoluteInt(Position.Z), 0, null, null, null);
}
}
public override int Data { get { return 1; } }
public void TerrainCollision(Vector3 collisionPoint, Vector3 collisionDirection)
{
if (Despawned)
return;
if (collisionDirection == Vector3.Down)
{
var id = SandBlock.BlockID;
if (EntityType == 71)
id = GravelBlock.BlockID;
EntityManager.DespawnEntity(this);
var position = (Coordinates3D)collisionPoint + Coordinates3D.Up;
var hit = World.BlockRepository.GetBlockProvider(World.GetBlockID(position));
if (hit.BoundingBox == null && !BlockProvider.Overwritable.Any(o => o == hit.ID))
EntityManager.SpawnEntity(new ItemEntity(position + new Vector3(0.5), new ItemStack(id)));
else
World.SetBlockID(position, id);
}
}
public BoundingBox BoundingBox
{
get
{
return new BoundingBox(Position - (Size / 2), Position + (Size / 2));
}
}
public bool BeginUpdate()
{
EnablePropertyChange = false;
return true;
}
public void EndUpdate(Vector3 newPosition)
{
EnablePropertyChange = true;
Position = newPosition;
}
public float AccelerationDueToGravity
{
get
{
return 0.8f;
}
}
public float Drag
{
get
{
return 0.40f;
}
}
public float TerminalVelocity
{
get
{
return 39.2f;
}
}
}
}