Search in sources :

Example 1 with SetBlockSelectionEndingPointEvent

use of org.terasology.engine.world.selection.event.SetBlockSelectionEndingPointEvent in project Terasology by MovingBlocks.

the class LocalPlayerBlockSelectionByItemSystem method onPlaced.

@ReceiveEvent(components = OnItemActivateSelectionComponent.class)
public void onPlaced(ActivateEvent event, EntityRef itemEntity) {
    if (event.getTargetLocation() == null) {
        return;
    }
    EntityRef targetLocationEntity = event.getTarget();
    this.blockSelectionComponentEntity = itemEntity;
    BlockSelectionComponent blockSelectionComponent = itemEntity.getComponent(BlockSelectionComponent.class);
    if (null == blockSelectionComponent.startPosition) {
        // on the first item click, we start selecting blocks
        targetLocationEntity.send(new SetBlockSelectionStartingPointEvent(itemEntity));
        blockSelectionComponent.shouldRender = true;
    } else {
        // on the second item click, we will set the ending selection point and send an ApplyBlockSelectionEvent
        targetLocationEntity.send(new SetBlockSelectionEndingPointEvent(itemEntity));
        localPlayer.getCharacterEntity().send(new ApplyBlockSelectionEvent(itemEntity, blockSelectionComponent.currentSelection));
        blockSelectionComponent.shouldRender = false;
        blockSelectionComponent.currentSelection = null;
        blockSelectionComponent.startPosition = null;
    }
}
Also used : SetBlockSelectionEndingPointEvent(org.terasology.engine.world.selection.event.SetBlockSelectionEndingPointEvent) BlockSelectionComponent(org.terasology.engine.world.selection.BlockSelectionComponent) SetBlockSelectionStartingPointEvent(org.terasology.engine.world.selection.event.SetBlockSelectionStartingPointEvent) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef) ReceiveEvent(org.terasology.engine.entitySystem.event.ReceiveEvent)

Example 2 with SetBlockSelectionEndingPointEvent

use of org.terasology.engine.world.selection.event.SetBlockSelectionEndingPointEvent in project Terasology by MovingBlocks.

the class LocalPlayerBlockSelectionByItemSystem method onCamTargetChanged.

@ReceiveEvent(components = LocationComponent.class)
public void onCamTargetChanged(CameraTargetChangedEvent event, EntityRef entity) {
    // This method will update the block selection to whatever block is targeted in the players view
    if (null == blockSelectionComponentEntity) {
        return;
    }
    BlockSelectionComponent blockSelectionComponent = blockSelectionComponentEntity.getComponent(BlockSelectionComponent.class);
    if (blockSelectionComponent == null) {
        return;
    }
    EntityRef target = event.getNewTarget();
    LocationComponent locationComponent = target.getComponent(LocationComponent.class);
    if (locationComponent == null) {
        return;
    }
    Vector3f targetLocation = locationComponent.getWorldPosition(new Vector3f());
    if (blockSelectionComponent.isMovable) {
        Vector3i pos = new Vector3i(targetLocation, RoundingMode.FLOOR);
        Vector3i size = blockSelectionComponent.currentSelection.getSize(new Vector3i());
        blockSelectionComponent.currentSelection.set(pos, pos).expand(size.x() / 2, 0, size.z() / 2);
        blockSelectionComponentEntity.saveComponent(blockSelectionComponent);
        return;
    }
    if (blockSelectionComponent.startPosition == null) {
        return;
    }
    target.send(new SetBlockSelectionEndingPointEvent(blockSelectionComponentEntity));
}
Also used : SetBlockSelectionEndingPointEvent(org.terasology.engine.world.selection.event.SetBlockSelectionEndingPointEvent) BlockSelectionComponent(org.terasology.engine.world.selection.BlockSelectionComponent) Vector3f(org.joml.Vector3f) Vector3i(org.joml.Vector3i) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef) LocationComponent(org.terasology.engine.logic.location.LocationComponent) ReceiveEvent(org.terasology.engine.entitySystem.event.ReceiveEvent)

Aggregations

EntityRef (org.terasology.engine.entitySystem.entity.EntityRef)2 ReceiveEvent (org.terasology.engine.entitySystem.event.ReceiveEvent)2 BlockSelectionComponent (org.terasology.engine.world.selection.BlockSelectionComponent)2 SetBlockSelectionEndingPointEvent (org.terasology.engine.world.selection.event.SetBlockSelectionEndingPointEvent)2 Vector3f (org.joml.Vector3f)1 Vector3i (org.joml.Vector3i)1 LocationComponent (org.terasology.engine.logic.location.LocationComponent)1 SetBlockSelectionStartingPointEvent (org.terasology.engine.world.selection.event.SetBlockSelectionStartingPointEvent)1