class ActionSpatialUnitCommand implements
        Sc2ApiSerializable<Spatial.ActionSpatialUnitCommand>, GeneralizableAbility<ActionSpatialUnitCommand> {

    @Override
    public Spatial.ActionSpatialUnitCommand toSc2Api() {
        Spatial.ActionSpatialUnitCommand.Builder aSc2ApiUnitCommand = Spatial.ActionSpatialUnitCommand.newBuilder()
                .setAbilityId(ability.toSc2Api())
                .setQueueCommand(queued);

        getTargetInScreenCoord().map(PointI::toSc2Api).ifPresent(aSc2ApiUnitCommand::setTargetScreenCoord);
        getTargetInMinimapCoord().map(PointI::toSc2Api).ifPresent(aSc2ApiUnitCommand::setTargetMinimapCoord);

        return aSc2ApiUnitCommand.build();
    }

    private  ActionSpatialUnitCommand(Builder builder);
    private  ActionSpatialUnitCommand(Spatial.ActionSpatialUnitCommand sc2ApiActionSpatialUnitCommand);

}