NorbiPeti
9609187cff
Removed GameState methods from block APIs Created a BlockUtility class to get the block the player is looking at Changed the return type of PlaceBlock, returning the ID of the newly placed block or null
31 lines
No EOL
1.3 KiB
C#
31 lines
No EOL
1.3 KiB
C#
using RobocraftX.Blocks.Ghost;
|
|
using RobocraftX.Character.Camera;
|
|
using RobocraftX.Character.Factories;
|
|
using Svelto.ECS;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
public class BlockUtility
|
|
{
|
|
/// <summary>
|
|
/// Returns the block the player is currently looking at.
|
|
/// </summary>
|
|
/// <param name="playerId">The player's ID</param>
|
|
/// <param name="entitiesDB">The entities DB</param>
|
|
/// <param name="maxDistance">The maximum distance from the player (default is the player's building reach)</param>
|
|
/// <returns>The block's EGID or null if not found</returns>
|
|
public static EGID? GetBlockLookedAt(uint playerId, EntitiesDB entitiesDB, float maxDistance = -1f)
|
|
{
|
|
if (!entitiesDB.TryQueryMappedEntities<CharacterCameraRayCastEntityStruct>(
|
|
CameraExclusiveGroups.CameraGroup, out var mapper))
|
|
return null;
|
|
mapper.TryGetEntity(playerId, out CharacterCameraRayCastEntityStruct rayCast);
|
|
float distance = maxDistance < 0
|
|
? GhostBlockUtils.GetBuildInteractionDistance(entitiesDB, rayCast)
|
|
: maxDistance;
|
|
if (rayCast.hit && rayCast.distance <= distance)
|
|
return rayCast.hitEgid;
|
|
return null;
|
|
}
|
|
}
|
|
} |