## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# }
# 
# shinyApp(ui, server)

## ----eval=FALSE---------------------------------------------------------------
# floor <- game$add_image(
#   name = "floor",
#   url = "assets/hedgehog/terrain/grass.png",
#   x = 800,
#   y = 300
# )

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# }
# 
# shinyApp(ui, server)
# 

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_2_add_background.png")

## ----eval=FALSE---------------------------------------------------------------
# hedgehog <- game$add_sprite(
#   name = "hedgehog",
#   url = "assets/hedgehog/sprites/hedgehog_32.png",
#   x = 140,
#   y = 260,
#   frame_width = 32,
#   frame_height = 32,
#   frame_count = 5,
#   frame_rate = 6
# )

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/hedgehog_32.png")

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# }
# 
# shinyApp(ui, server)

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_3_add_sprite.gif")

## ----eval=FALSE---------------------------------------------------------------
# hedgehog$add_player_controls(
#   directions = c("left", "right", "up", "down"),
#   speed = 220
# )

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# 
#   hedgehog$add_player_controls(
#     directions = c("left", "right", "up", "down"),
#     speed = 220
#   )
# }
# 
# shinyApp(ui, server)

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_4_player_controls.gif")

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/hedgehog_move_right_32.png")
knitr::include_graphics("assets/hedgehog_move_left_32.png")

## ----eval=FALSE---------------------------------------------------------------
# moves <- c("move_left", "move_right", "move_up", "move_down")
# 
# for (move in moves) {
#   hedgehog$add_animation(
#     suffix = move,
#     url = paste0("assets/hedgehog/sprites/hedgehog_", move, "_32.png"),
#     frame_width = 32,
#     frame_height = 32,
#     frame_rate = 5
#   )
# }

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# 
#   hedgehog$add_player_controls(
#     directions = c("left", "right", "up", "down"),
#     speed = 220
#   )
# 
#   moves <- c("move_left", "move_right", "move_up", "move_down")
# 
#   for (move in moves) {
#     hedgehog$add_animation(
#       suffix = move,
#       url = paste0("assets/hedgehog/sprites/hedgehog_", move, "_32.png"),
#       frame_width = 32,
#       frame_height = 32,
#       frame_rate = 5
#     )
#   }
# }
# 
# shinyApp(ui, server)

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_5_move_animation.gif")

## ----eval=FALSE---------------------------------------------------------------
# score <- reactiveVal(0)
# apples <- game$add_static_group("apples", "assets/hedgehog/perks/apple_20.png")
# 
# apples$create(260, 140)
# apples$create(640, 180)
# apples$create(730, 390)
# 
# score_text <- game$add_text(text = "Score: 0", id = "score", x = 20, y = 20)
# 
# game$add_overlap(
#   object_one = "hedgehog",
#   group = "apples",
#   callback_fun = function(evt) {
#     apples$disable(evt)        # hide collected apple
#     score(score() + 1)
#     score_text$set(paste("Score:", score()))
#   },
#   input = input
# )

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# 
#   hedgehog$add_player_controls(
#     directions = c("left", "right", "up", "down"),
#     speed = 220
#   )
# 
#   moves <- c("move_left", "move_right", "move_up", "move_down")
# 
#   for (move in moves) {
#     hedgehog$add_animation(
#       suffix = move,
#       url = paste0("assets/hedgehog/sprites/hedgehog_", move, "_32.png"),
#       frame_width = 32,
#       frame_height = 32,
#       frame_rate = 5
#     )
#   }
# 
#   score <- reactiveVal(0)
#   apples <- game$add_static_group("apples", "assets/hedgehog/perks/apple_20.png")
# 
#   apples$create(260, 140)
#   apples$create(640, 180)
#   apples$create(730, 390)
# 
#   score_text <- game$add_text(text = "Score: 0", id = "score", x = 20, y = 20)
# 
#   game$add_overlap(
#     object_one = "hedgehog",
#     group = "apples",
#     callback_fun = function(evt) {
#       apples$disable(evt)        # hide collected apple
#       score(score() + 1)
#       score_text$set(paste("Score:", score()))
#     },
#     input = input
#   )
# }
# shinyApp(ui, server)

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_6_overlap.gif")

## ----eval=FALSE---------------------------------------------------------------
# game$enable_terrain_collision("hedgehog")
# 
# rocks <- game$add_static_group(
#   name = "rocks",
#   url = "assets/hedgehog/obstacles/rock.png"
# )
# 
# rocks$create(
#   x = 400,
#   y = 400
# )
# rocks$create(
#   x = 600,
#   y = 500
# )

## ----eval=FALSE---------------------------------------------------------------
# game$add_collider(
#   object_one = "hedgehog",
#   group = "rocks"
# )

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# 
#   hedgehog$add_player_controls(
#     directions = c("left", "right", "up", "down"),
#     speed = 220
#   )
# 
#   game$enable_terrain_collision("hedgehog")
# 
#   moves <- c("move_left", "move_right", "move_up", "move_down")
# 
#   for (move in moves) {
#     hedgehog$add_animation(
#       suffix = move,
#       url = paste0("assets/hedgehog/sprites/hedgehog_", move, "_32.png"),
#       frame_width = 32,
#       frame_height = 32,
#       frame_rate = 5
#     )
#   }
# 
#   score <- reactiveVal(0)
#   apples <- game$add_static_group("apples", "assets/hedgehog/perks/apple_20.png")
# 
#   apples$create(260, 140)
#   apples$create(640, 180)
#   apples$create(730, 390)
# 
#   rocks <- game$add_static_group(
#     name = "rocks",
#     url = "assets/hedgehog/obstacles/rock.png"
#   )
# 
#   rocks$create(400, 200)
#   rocks$create(200, 300)
# 
#   score_text <- game$add_text(text = "Score: 0", id = "score", x = 20, y = 20)
# 
#   game$add_overlap(
#     object_one = "hedgehog",
#     group = "apples",
#     callback_fun = function(evt) {
#       apples$disable(evt)        # hide collected apple
#       score(score() + 1)
#       score_text$set(paste("Score:", score()))
#     },
#     input = input
#   )
# 
#   game$add_collider(
#     object_one = "hedgehog",
#     group = "rocks"
#   )
# }
# shinyApp(ui, server)

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_7_collide.gif")

## ----eval=FALSE---------------------------------------------------------------
# enemy <- game$add_sprite(
#   name = "badger",
#   url = "assets/hedgehog/sprites/badger_move_left_50.png",
#   x = 700,
#   y = 300,
#   frame_width = 50,
#   frame_height = 50,
#   frame_count = 1,
#   frame_rate = 1
# )
# 
# game$add_overlap(
#   object_one = "hedgehog",
#   object_two = "badger",
#   callback_fun = function(evt) {
#     shinyalert::shinyalert(
#       title = "Game over", type = "error",
#       closeOnClickOutside = FALSE, showCancelButton = FALSE,
#       callbackR = function(value) shiny::stopApp()
#     )
#   },
#   input = input
# )
# 
# shiny::observe({
#   shiny::invalidateLater(700, session)
#   dir <- sample(list(c(-1, 0), c(1, 0), c(0, -1), c(0, 1)), 1)[[1]]
#   enemy$set_in_motion(
#     dir_x = dir[1],
#     dir_y = dir[2],
#     speed = 70,
#     distance = 150,
#     lag = 0
#   )
# })

## ----echo=FALSE---------------------------------------------------------------
knitr::include_graphics("assets/first_game_8_full_example.gif")

## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(shinyphaser)
# 
# game <- PhaserGame$new(width = 1500, height = 800)
# 
# ui <- tagList(
#   game$use_phaser()
# )
# 
# server <- function(input, output, session) {
#   game$set_shiny_session()
# 
#   floor <- game$add_image(
#     name = "floor",
#     url = "assets/hedgehog/terrain/grass.png",
#     x = 800,
#     y = 300
#   )
# 
#   hedgehog <- game$add_sprite(
#     name = "hedgehog",
#     url = "assets/hedgehog/sprites/hedgehog_32.png",
#     x = 140,
#     y = 260,
#     frame_width = 32,
#     frame_height = 32,
#     frame_count = 5,
#     frame_rate = 6
#   )
# 
#   hedgehog$add_player_controls(
#     directions = c("left", "right", "up", "down"),
#     speed = 220
#   )
# 
#   game$enable_terrain_collision("hedgehog")
# 
#   moves <- c("move_left", "move_right", "move_up", "move_down")
# 
#   for (move in moves) {
#     hedgehog$add_animation(
#       suffix = move,
#       url = paste0("assets/hedgehog/sprites/hedgehog_", move, "_32.png"),
#       frame_width = 32,
#       frame_height = 32,
#       frame_rate = 5
#     )
#   }
# 
#   score <- reactiveVal(0)
#   apples <- game$add_static_group("apples", "assets/hedgehog/perks/apple_20.png")
# 
#   apples$create(260, 140)
#   apples$create(640, 180)
#   apples$create(730, 390)
# 
#   rocks <- game$add_static_group(
#     name = "rocks",
#     url = "assets/hedgehog/obstacles/rock.png"
#   )
# 
#   rocks$create(400, 200)
#   rocks$create(200, 300)
# 
#   score_text <- game$add_text(text = "Score: 0", id = "score", x = 20, y = 20)
# 
#   game$add_overlap(
#     object_one = "hedgehog",
#     group = "apples",
#     callback_fun = function(evt) {
#       apples$disable(evt)
#       score(score() + 1)
#       score_text$set(paste("Score:", score()))
#     },
#     input = input
#   )
# 
#   game$add_collider(
#     object_one = "hedgehog",
#     group = "rocks"
#   )
# 
#   enemy <- game$add_sprite(
#     name = "badger",
#     url = "assets/hedgehog/sprites/badger_move_left_50.png",
#     x = 700,
#     y = 300,
#     frame_width = 50,
#     frame_height = 50,
#     frame_count = 1,
#     frame_rate = 1
#   )
# 
#   game$add_overlap(
#     object_one = "hedgehog",
#     object_two = "badger",
#     callback_fun = function(evt) {
#       shinyalert::shinyalert(
#         title = "Game over", type = "error",
#         closeOnClickOutside = FALSE, showCancelButton = FALSE,
#         callbackR = function(value) shiny::stopApp()
#       )
#     },
#     input = input
#   )
# 
#   shiny::observe({
#     shiny::invalidateLater(700, session)
#     dir <- sample(list(c(-1, 0), c(1, 0), c(0, -1), c(0, 1)), 1)[[1]]
#     enemy$set_in_motion(
#       dir_x = dir[1],
#       dir_y = dir[2],
#       speed = 70,
#       distance = 150,
#       lag = 0
#     )
#   })
# }
# shinyApp(ui, server)

