TrueCraft/TrueCraft.Core/Logic/BlockRepository.cs
Drew DeVault 605cbbc2a0 Add physics simulation to client
This allows the player to fall to the ground when they spawn.
2015-05-13 16:26:23 -06:00

53 lines
1.6 KiB
C#

using System;
using TrueCraft.API.Logic;
using System.Collections.Generic;
using System.Linq;
using TrueCraft.API.Entities;
using TrueCraft.API;
using TrueCraft.API.World;
namespace TrueCraft.Core.Logic
{
public class BlockRepository : IBlockRepository, IBlockPhysicsProvider
{
private readonly IBlockProvider[] BlockProviders = new IBlockProvider[0x100];
public IBlockProvider GetBlockProvider(byte id)
{
return BlockProviders[id];
}
public void RegisterBlockProvider(IBlockProvider provider)
{
BlockProviders[provider.ID] = provider;
}
public void DiscoverBlockProviders()
{
var providerTypes = new List<Type>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes().Where(t =>
typeof(IBlockProvider).IsAssignableFrom(t) && !t.IsAbstract))
{
providerTypes.Add(type);
}
}
providerTypes.ForEach(t =>
{
var instance = (IBlockProvider)Activator.CreateInstance(t);
RegisterBlockProvider(instance);
});
}
public BoundingBox? GetBoundingBox(IWorld world, Coordinates3D coordinates)
{
// TODO: Block-specific bounding boxes
var id = world.GetBlockID(coordinates);
if (id == 0) return null;
var provider = BlockProviders[id];
return provider.BoundingBox;
}
}
}