get_referee <- function(rcl) { referee <- rcl |> dplyr::filter(command == "referee") %>% dplyr::select( step, judge=args, ) %>% tidyr::drop_na() %>% distinct(step, .keep_all = TRUE) return(referee) } read_goal <- function(referee, name) { goal <- referee |> dplyr::filter(stringr::str_detect(judge, "goal_[rl]_[0-9]+")) |> dplyr::mutate( side = judge |> stringr::str_remove("goal_") |> stringr::str_extract("[rl]"), score = judge |> stringr::str_remove("goal_[rl]_") |> stringr::str_extract("[0-9]+"), ) |> dplyr::inner_join(name, by = "side") |> dplyr::select( step, judge, side, name, score, ) %>% tidyr::drop_na() return(goal) } get_player <- function(rcg, name) { output <- rcg |> dplyr::inner_join(name, by = "side") |> dplyr::select( step, team = name, side, unum, px = x, py = y, pvx = vx, pvy = vy, body, neck, ) return(output) } get_ball <- function(rcg) { ball <- rcg |> dplyr::select(step, ball_x, ball_y, ball_vx, ball_vy) |> dplyr::distinct(step, .keep_all = TRUE) %>% dplyr::mutate(before_ball_x = lag(ball_x)) %>% dplyr::mutate(before_ball_y = lag(ball_y)) %>% dplyr::mutate(before_bvx = lag(ball_vx)) %>% dplyr::mutate(before_bvy = lag(ball_vy)) %>% dplyr::mutate(next_ball_x = lead(ball_x)) %>% dplyr::mutate(next_ball_y = lead(ball_y)) %>% dplyr::mutate(next_ball_vx = lead(ball_vx)) %>% dplyr::mutate(next_ball_vy = lead(ball_vy)) %>% dplyr::mutate(kick_speed= (ball_vx^2+ball_vy^2)) %>% dplyr::mutate(a_kick_speed= (next_ball_vx^2+next_ball_vy^2)) %>% dplyr::mutate(target_ball_x = (ball_x + next_ball_vx*10)) %>% dplyr::mutate(target_ball_y = (ball_y + next_ball_vy*10)) return(ball) } get_action <- function(rcl,ball,players) { referee <- get_referee(rcl) output <- rcl |> dplyr::filter(command == "kick" | command == "tackle" | command == "catch") |> dplyr::mutate( unum = as.numeric(unum) ) |> dplyr::select( step, team, unum, command, ) |> dplyr::inner_join(players, by = c("step", "team", "unum"))%>% dplyr::inner_join(ball, by = "step") %>% dplyr::distinct(step,team, .keep_all = TRUE) %>% dplyr::full_join(referee,by="step") %>% dplyr::arrange(step) %>% dplyr::mutate(next_judge = lead(judge)) %>% dplyr::filter(command == "kick" | command == "tackle" | command == "catch") %>% dplyr::mutate(a_tackle = (lead(command)=="tackle")) %>% dplyr::mutate(next_team = lead(team)) %>% dplyr::mutate(a_sameteam = (next_team == team)) %>% dplyr::mutate(tackle_scc = (judge == "NULL" & command == "tackle" & a_sameteam)) %>% dplyr::mutate(a_tackle_scc = lead(tackle_scc)) return(output) } get_kick_log <- function(action,goal) { output <- action %>% dplyr::filter(command != "tackle") %>% dplyr::mutate(next_catch = (lead(command) == "catch")) %>% dplyr::filter(command == "kick") %>% dplyr::mutate(before_team = lag(team)) %>% dplyr::mutate(before_unum = lag(unum)) %>% dplyr::mutate(next_team = lead(team)) %>% dplyr::mutate(next_unum = lead(unum)) %>% dplyr::mutate(b_sameteam = (before_team == team)) %>% dplyr::mutate(b_sameunum = (before_unum == unum)) %>% dplyr::mutate(a_sameteam = (next_team == team)) %>% dplyr::mutate(a_sameunum = (next_unum == unum)) output$b_sameteam[1] <- TRUE output$b_sameunum[1] <- FALSE output <- dplyr::full_join(output,goal,by=c("step","judge","side")) %>% dplyr::arrange(step) %>% dplyr::mutate(next_score = lead(score)) %>% dplyr::mutate(next_judge = lead(judge)) %>% dplyr::mutate(is_goal = (!is.na(next_score)&(side==lead(side)))) %>% dplyr::filter(command == "kick") %>% dplyr::mutate(shoot_scc = (judge == "NULL") & is_goal) %>% dplyr::mutate(dribble_scc = ( (judge == "NULL") & (next_judge == "NULL") & a_sameteam & a_sameunum)) %>% dplyr::mutate(pass_scc = ( (judge == "NULL") & (next_judge == "NULL") & a_sameteam & !a_sameunum)) %>% dplyr::mutate(shoot = ( shoot_scc | abs(target_ball_x) > 54 & abs(target_ball_y) < 12)) %>% dplyr::mutate(dribble = ( (!shoot)& (!dribble_scc)& (!pass_scc)& (dribble_scc | (!shoot) & (a_tackle_scc)| (!shoot) & sqrt((ball_x - next_ball_x)^2 + (ball_y - next_ball_y)^2) < 1.0 ) )) %>% dplyr::mutate(pass = ( (pass_scc | (!dribble & !shoot)) )) %>% group_by(grc = cumsum(!dribble)) %>% mutate(touch = row_number()) %>% ungroup() return(output) } get_kick <- function(kick_log) { output <- action %>% dplyr::filter(command == "kick") %>% select(-c(command, pvx, pvy, body, neck)) return(output) } get_action_Allplayer <- function(players, action) { action <- action %>% dplyr::select(step, action_team = team, ball_x, ball_y, pass, dribble) output <- players %>% dplyr::inner_join(action, by = "step") return(output) } get_pass_Allplayer <- function(players, pass) { pass <- pass %>% dplyr::select(step, px, py, pass_team = team, ball_x, ball_y, ball_vx, ball_vy, pass_scc) output <- players %>% dplyr::inner_join(pass, by = "step") return(output) } get_dribble_Allplayer <- function(players, dribble) { dribble <- dribble %>% dplyr::select(step, dribble_team = team, ball_x, ball_y, dribble_scc) output <- players %>% dplyr::inner_join(dribble, by = "step") return(output) } get_pass <- function(kick) { output <- kick |> dplyr::filter(pass == TRUE) %>% distinct(step, .keep_all = TRUE) %>% dplyr::select(step,team,numu,px,py,pvx,pvy,ball_x,ball_y,ball_vx,ball_vy,next_ball_x,next_ball_y,next_ball_vx,next_ball_vy,pass,pass_scc) return(output) } get_dribble <- function(kick) { output <- kick %>% dplyr::mutate(dribble = ((!a_sameteam & a_tackle_scc) | (a_sameteam & a_sameunum))) %>% dplyr::mutate(dribble_scc = (a_sameteam & a_sameunum)) %>% group_by(grc = cumsum(!dribble)) %>% mutate(touch = row_number()) %>% ungroup() %>% dplyr::filter(dribble) %>% select(-c(a_tackle_scc, tackle_scc, dribble, a_sameteam, a_sameunum, next_team, next_unum, dribble, grc)) return(output) } before_goal <- function(kick_log, goal_step, goal_team) { playlist <- kick_log %>% dplyr::arrange(desc(step)) %>% dplyr::filter( step > goal_step - 100, step < goal_step, team == goal_team, ) } get_goal_playlist <- function(kick_log, goal) { if (length(goal$step) < 1) { return(NA) } i <- 1 output <- before_goal(kick_log, goal$step[i], goal$name[i]) i <- i + 1 while (i <= length(goal$step)) { # print(i) i_list <- before_goal(kick_log, goal$step[i], goal$name[i]) output <- output |> bind_rows(i_list) i <- i + 1 } # for(i in goal$step){ # i_list <- before_goal(kick_log,goal$step[i],goal$name[i]) # output <- output |> bind_rows(i_list) # print(i) # } return(output) } convert_by_step <- function(rcg, rcl) { output <- dplyr::inner_join(rcg, rcl, by = "step") return(output) } get_dribble_point <- function(log_data) { output <- log_data %>% filter(dribble == TRUE, pass == FALSE) return(output) } get_pass_point <- function(log_data) { output <- log_data %>% filter(pass == TRUE) return(output) } get_tackle_point <- function(log_data) { output <- log_data %>% filter(tackle == TRUE) return(output) } get_rcl <- function(path_rcl) { output <- path_rcl |> read_rcl() return(output) } get_name <- function(path_rcg) { team_name <- path_rcg |> stringr::str_extract("[a-zA-Z0-9_-]*.rcg") |> stringr::str_remove("[0-9]*-") |> stringr::str_remove(".rcl") l_team <- team_name |> stringr::str_extract("[a-zA-Z0-9_]*-vs-") |> stringr::str_remove("_[0-9]*-vs-") r_team <- path_rcg |> stringr::str_extract("[a-zA-Z0-9_]*.rcg") |> stringr::str_remove("_[0-9]*.rcg") name_table <- tibble::tribble( ~side, ~name, "l", l_team, "r", r_team, ) return(name_table) } replase_rcg_to_rcl <- function(path_rcg) { output <- path_rcg |> stringr::str_replace(pattern = ".rcg", replacement = ".rcl") } replase_rcl_to_rcg <- function(path_rcl) { output <- path_rcl |> stringr::str_replace(pattern = ".rcl", replacement = ".rcg") } kick_dist <- function(rcg) { ball_path <- rcg |> dplyr::group_nest(step, ball_x, ball_y) |> dplyr::mutate( move_dist_x = ball_x - dplyr::lag(ball_x), move_dist_y = ball_y - dplyr::lag(ball_y), move_dist = sqrt(move_dist_x^2 + move_dist_y^2), move_dist = dplyr::if_else(is.na(move_dist), 0, move_dist) ) |> dplyr::filter(move_dist != 0 & move_dist < 40) } select_name <- function(data, name) { output <- data %>% dplyr::filter(team %in% name) return(output) } get_AttackLine <- function(pass) { output <- pass %>% dplyr::group_by(step) %>% filter(px == max(px)) %>% dplyr::select( step, pass_team, pass_scc, AL = px ) return(output) } get_DefendLine <- function(pass) { output <- pass %>% dplyr::group_by(step) %>% filter(px == min(px)) %>% dplyr::select(step, DL = px) return(output) } get_MedianLine <- function(pass) { output <- pass %>% dplyr::group_by(step) %>% dplyr::summarize(ML = median(px)) %>% dplyr::select(step, ML) return(output) } get_DynamicPressureLine <- function(pass) { pass <- pass %>% filter(unum != 1) ad <- get_AttackLine(pass) dd <- get_DefendLine(pass) md <- get_MedianLine(pass) output <- dplyr::inner_join(ad, dd, by = "step") %>% dplyr::inner_join(md, by = "step") %>% distinct(step, .keep_all = TRUE) return(output) }