R/hexs_mobility.R

#' Mobility hexs for unit
#'
#' Return a vector of hexs which are empty, so the unit can move on them.
#'
#' @param hex_id id of hex where there is a unit
#' @param mobility mobility of unit, default is NULL and then mobility is taken from units_data
#' @param units_data dataset which contains information about units with its hexs
#' @param dist_matrix_data distance matrix
#' @export
#' @importFrom assertthat assert_that
#' @importFrom assertthat is.number
#' @return Vector with IDs of hexs where unit can move.
#' @examples
#'
#' set.seed(123)
#' p1 <- draw_units(price_limit = 50, units_data = units)
#' p2 <- draw_units(price_limit = 50, units_data = units)
#' units_game <- draw_hexs(p1, p2)
#'
#' hexs_mobility(hex_id = "ID9", units_data = units_game, dist_matrix_data = dist_matrix)
#' hexs_mobility(hex_id = "ID9", mobility = 2, units_data = units_game, dist_matrix_data = dist_matrix)

hexs_mobility <- function(hex_id, mobility = NULL, units_data, dist_matrix_data){

  hex_id <- as.character(hex_id)

  assert_that(is.character(hex_id))
  assert_that(is.data.frame(units_data))
  assert_that(is.matrix(dist_matrix_data))

  assert_that(hex_id %in% units_data$id, msg = paste0("There is no unit with ", hex_id, " in units_data"))

  if(!is.null(mobility)){
    assert_that(is.number(mobility), msg = "Mobility must be a number")
    assert_that(mobility >= 0, msg = "Mobility must be greater or equal zero")
  }

  if(is.null(mobility)){
    mobility <- as.numeric(units_data$mobil[units_data$id == hex_id])
  }

  hexs_all <- dist_matrix_data[hex_id,dist_matrix_data[hex_id,] <= mobility]
  hexs_no_units <- hexs_all[!(names(hexs_all) %in% units_data$id)]
  return(hexs_no_units)
}
lwawrowski/combat documentation built on June 14, 2019, 3:23 p.m.