Merge branch 'master' of https://git.wmi.amu.edu.pl/s478993/fantastyczne_gole
451
.Rhistory
@ -1,388 +1,16 @@
|
|||||||
error = function(e) {
|
data4 <- read.csv("data/data4.csv")
|
||||||
# handle the error
|
setwd("~/Desktop/fantastyczne_gole")
|
||||||
print(paste("An error occurred:", e$message))
|
data4 <- read.csv("data/data4.csv")
|
||||||
})
|
nrow
|
||||||
data$shot <- data$shot %>% select(-freeze_frame, -statsbomb_xg, -key_pass_id)
|
nrow(data4)
|
||||||
data$shot$body_part <- data$shot$body_part %>% select(-id)
|
data_list
|
||||||
data$shot$technique <- data$shot$technique %>% select(-id)
|
|
||||||
data$shot$type <- data$shot$type %>% select(-id)
|
|
||||||
data$position <- data$position %>% select(-id)
|
|
||||||
data$shot <- data$shot %>% select(-end_location)
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
if ("one_on_one" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$one_on_one), ]$shot$one_on_one <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$one_on_one <- FALSE
|
|
||||||
}
|
|
||||||
if ("first_time" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$first_time), ]$shot$first_time <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$first_time <- FALSE
|
|
||||||
}
|
|
||||||
if ("aerial_won" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$aerial_won), ]$shot$aerial_won <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$aerial_won <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_to_post" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_to_post), ]$shot$saved_to_post <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_to_post <- FALSE
|
|
||||||
}
|
|
||||||
if ("deflected" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$deflected), ]$shot$deflected <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$deflected <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_off_target" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_off_target), ]$shot$saved_off_target <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_off_target <- FALSE
|
|
||||||
}
|
|
||||||
if ("open_goal" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$open_goal), ]$shot$open_goal <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$open_goal <- FALSE
|
|
||||||
}
|
|
||||||
if ("follows_dribble" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$follows_dribble), ]$shot$follows_dribble <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$follows_dribble <- FALSE
|
|
||||||
}
|
|
||||||
if ("redirect" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$redirect), ]$shot$redirect <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$redirect <- FALSE
|
|
||||||
}
|
|
||||||
if ("kick_off" %in% colnames(data$kick_off)) {
|
|
||||||
data[is.na(data$kick_off$kick_off), ]$kick_off$kick_off <- FALSE
|
|
||||||
} else {
|
|
||||||
data$kick_off$kick_off <- FALSE
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data <- data %>% mutate(angle = atan(7.32 * x1 / (x1^2 + y1^2 - (7.32/2)^2)),
|
|
||||||
is_goal = ifelse(shot$outcome$id == 97, 1, 0)) %>%
|
|
||||||
select(-location)
|
|
||||||
data$shot$outcome <- data$shot$outcome %>% select(-id)
|
|
||||||
data <- data %>% unnest(shot, names_sep = "_")
|
|
||||||
data$angle <- ifelse(data$angle<0, base::pi + data$angle, data$angle)
|
|
||||||
data
|
|
||||||
}
|
|
||||||
data_test <- get_shots2("data/la_liga_events/303377.json")
|
|
||||||
View(data_test)
|
|
||||||
# TODO not all json data have these same keys/fields, customize function to cover all cases
|
|
||||||
get_shots2 <- function(json_file) {
|
|
||||||
data <- fromJSON(json_file) %>% filter(type$name == "Shot") %>% dplyr::select(c(minute, position, location, shot))
|
|
||||||
df_temp <- do.call(rbind, data$location)
|
|
||||||
colnames(df_temp) <- c("x1", "y1")
|
|
||||||
data$x1 <- df_temp[,1]
|
|
||||||
data$y1 <- df_temp[,2]
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
data$number_of_players <- mapply(function(sublist, x1_threshold) {
|
|
||||||
# Extracting the first location value and converting it to numeric
|
|
||||||
first_location_values <- sapply(sublist$location, function(loc) as.numeric(loc[1]))
|
|
||||||
if ("teammate" %in% names(sublist)) {
|
|
||||||
# Filtering and counting
|
|
||||||
res <- sum(!sublist$teammate & first_location_values > x1_threshold) # error here
|
|
||||||
} else {
|
|
||||||
res <- 0
|
|
||||||
}
|
|
||||||
res
|
|
||||||
}, data$shot$freeze_frame, data$x1)
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data$shot <- data$shot %>% select(-freeze_frame, -statsbomb_xg, -key_pass_id)
|
|
||||||
data$shot$body_part <- data$shot$body_part %>% select(-id)
|
|
||||||
data$shot$technique <- data$shot$technique %>% select(-id)
|
|
||||||
data$shot$type <- data$shot$type %>% select(-id)
|
|
||||||
data$position <- data$position %>% select(-id)
|
|
||||||
data$shot <- data$shot %>% select(-end_location)
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
if ("one_on_one" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$one_on_one), ]$shot$one_on_one <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$one_on_one <- FALSE
|
|
||||||
}
|
|
||||||
if ("first_time" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$first_time), ]$shot$first_time <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$first_time <- FALSE
|
|
||||||
}
|
|
||||||
if ("aerial_won" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$aerial_won), ]$shot$aerial_won <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$aerial_won <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_to_post" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_to_post), ]$shot$saved_to_post <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_to_post <- FALSE
|
|
||||||
}
|
|
||||||
if ("deflected" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$deflected), ]$shot$deflected <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$deflected <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_off_target" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_off_target), ]$shot$saved_off_target <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_off_target <- FALSE
|
|
||||||
}
|
|
||||||
if ("open_goal" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$open_goal), ]$shot$open_goal <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$open_goal <- FALSE
|
|
||||||
}
|
|
||||||
if ("follows_dribble" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$follows_dribble), ]$shot$follows_dribble <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$follows_dribble <- FALSE
|
|
||||||
}
|
|
||||||
if ("redirect" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$redirect), ]$shot$redirect <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$redirect <- FALSE
|
|
||||||
}
|
|
||||||
if ("kick_off" %in% colnames(data$kick_off)) {
|
|
||||||
data[is.na(data$kick_off$kick_off), ]$kick_off$kick_off <- FALSE
|
|
||||||
} else {
|
|
||||||
data$kick_off$kick_off <- FALSE
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data <- data %>% mutate(angle = atan(7.32 * x1 / (x1^2 + y1^2 - (7.32/2)^2)),
|
|
||||||
is_goal = ifelse(shot$outcome$id == 97, 1, 0)) %>%
|
|
||||||
select(-location)
|
|
||||||
data$angle <- ifelse(data$angle<0, base::pi + data$angle, data$angle)
|
|
||||||
data$shot$outcome <- data$shot$outcome %>% select(-id)
|
|
||||||
data <- data %>% unnest(shot, names_sep = "_")
|
|
||||||
%>% unnest(position, names_sep = "_")
|
|
||||||
# TODO not all json data have these same keys/fields, customize function to cover all cases
|
|
||||||
get_shots2 <- function(json_file) {
|
|
||||||
data <- fromJSON(json_file) %>% filter(type$name == "Shot") %>% dplyr::select(c(minute, position, location, shot))
|
|
||||||
df_temp <- do.call(rbind, data$location)
|
|
||||||
colnames(df_temp) <- c("x1", "y1")
|
|
||||||
data$x1 <- df_temp[,1]
|
|
||||||
data$y1 <- df_temp[,2]
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
data$number_of_players <- mapply(function(sublist, x1_threshold) {
|
|
||||||
# Extracting the first location value and converting it to numeric
|
|
||||||
first_location_values <- sapply(sublist$location, function(loc) as.numeric(loc[1]))
|
|
||||||
if ("teammate" %in% names(sublist)) {
|
|
||||||
# Filtering and counting
|
|
||||||
res <- sum(!sublist$teammate & first_location_values > x1_threshold) # error here
|
|
||||||
} else {
|
|
||||||
res <- 0
|
|
||||||
}
|
|
||||||
res
|
|
||||||
}, data$shot$freeze_frame, data$x1)
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data$shot <- data$shot %>% select(-freeze_frame, -statsbomb_xg, -key_pass_id)
|
|
||||||
data$shot$body_part <- data$shot$body_part %>% select(-id)
|
|
||||||
data$shot$technique <- data$shot$technique %>% select(-id)
|
|
||||||
data$shot$type <- data$shot$type %>% select(-id)
|
|
||||||
data$position <- data$position %>% select(-id)
|
|
||||||
data$shot <- data$shot %>% select(-end_location)
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
if ("one_on_one" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$one_on_one), ]$shot$one_on_one <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$one_on_one <- FALSE
|
|
||||||
}
|
|
||||||
if ("first_time" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$first_time), ]$shot$first_time <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$first_time <- FALSE
|
|
||||||
}
|
|
||||||
if ("aerial_won" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$aerial_won), ]$shot$aerial_won <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$aerial_won <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_to_post" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_to_post), ]$shot$saved_to_post <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_to_post <- FALSE
|
|
||||||
}
|
|
||||||
if ("deflected" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$deflected), ]$shot$deflected <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$deflected <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_off_target" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_off_target), ]$shot$saved_off_target <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_off_target <- FALSE
|
|
||||||
}
|
|
||||||
if ("open_goal" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$open_goal), ]$shot$open_goal <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$open_goal <- FALSE
|
|
||||||
}
|
|
||||||
if ("follows_dribble" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$follows_dribble), ]$shot$follows_dribble <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$follows_dribble <- FALSE
|
|
||||||
}
|
|
||||||
if ("redirect" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$redirect), ]$shot$redirect <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$redirect <- FALSE
|
|
||||||
}
|
|
||||||
if ("kick_off" %in% colnames(data$kick_off)) {
|
|
||||||
data[is.na(data$kick_off$kick_off), ]$kick_off$kick_off <- FALSE
|
|
||||||
} else {
|
|
||||||
data$kick_off$kick_off <- FALSE
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data <- data %>% mutate(angle = atan(7.32 * x1 / (x1^2 + y1^2 - (7.32/2)^2)),
|
|
||||||
is_goal = ifelse(shot$outcome$id == 97, 1, 0)) %>%
|
|
||||||
select(-location)
|
|
||||||
data$angle <- ifelse(data$angle<0, base::pi + data$angle, data$angle)
|
|
||||||
data$shot$outcome <- data$shot$outcome %>% select(-id)
|
|
||||||
data <- data %>% unnest(shot, names_sep = "_") %>%
|
|
||||||
unnest(position, names_sep = "_") %>%
|
|
||||||
unnest(shot_type, names_sep = "_") %>%
|
|
||||||
unnest(shot_outcome, names_sep = "_") %>%
|
|
||||||
unnest(shot_technique, names_sep = "_")
|
|
||||||
data
|
|
||||||
}
|
|
||||||
data_test <- get_shots2("data/la_liga_events/303377.json")
|
|
||||||
View(data_test)
|
|
||||||
write.csv(data_test, file = "data/data_test.csv")
|
|
||||||
colnames(data_test)
|
|
||||||
data_test$kick_off
|
|
||||||
data_test$shot_body_part
|
|
||||||
data_df <- as.data.frame(data_test)
|
|
||||||
# TODO not all json data have these same keys/fields, customize function to cover all cases
|
|
||||||
get_shots2 <- function(json_file) {
|
|
||||||
data <- fromJSON(json_file) %>% filter(type$name == "Shot") %>% dplyr::select(c(minute, position, location, shot))
|
|
||||||
df_temp <- do.call(rbind, data$location)
|
|
||||||
colnames(df_temp) <- c("x1", "y1")
|
|
||||||
data$x1 <- df_temp[,1]
|
|
||||||
data$y1 <- df_temp[,2]
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
data$number_of_players <- mapply(function(sublist, x1_threshold) {
|
|
||||||
# Extracting the first location value and converting it to numeric
|
|
||||||
first_location_values <- sapply(sublist$location, function(loc) as.numeric(loc[1]))
|
|
||||||
if ("teammate" %in% names(sublist)) {
|
|
||||||
# Filtering and counting
|
|
||||||
res <- sum(!sublist$teammate & first_location_values > x1_threshold) # error here
|
|
||||||
} else {
|
|
||||||
res <- 0
|
|
||||||
}
|
|
||||||
res
|
|
||||||
}, data$shot$freeze_frame, data$x1)
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data$shot <- data$shot %>% select(-freeze_frame, -statsbomb_xg, -key_pass_id)
|
|
||||||
data$shot$body_part <- data$shot$body_part %>% select(-id)
|
|
||||||
data$shot$technique <- data$shot$technique %>% select(-id)
|
|
||||||
data$shot$type <- data$shot$type %>% select(-id)
|
|
||||||
data$position <- data$position %>% select(-id)
|
|
||||||
data$shot <- data$shot %>% select(-end_location)
|
|
||||||
tryCatch({ # TODO reduce error cases
|
|
||||||
if ("one_on_one" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$one_on_one), ]$shot$one_on_one <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$one_on_one <- FALSE
|
|
||||||
}
|
|
||||||
if ("first_time" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$first_time), ]$shot$first_time <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$first_time <- FALSE
|
|
||||||
}
|
|
||||||
if ("aerial_won" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$aerial_won), ]$shot$aerial_won <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$aerial_won <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_to_post" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_to_post), ]$shot$saved_to_post <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_to_post <- FALSE
|
|
||||||
}
|
|
||||||
if ("deflected" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$deflected), ]$shot$deflected <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$deflected <- FALSE
|
|
||||||
}
|
|
||||||
if ("saved_off_target" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$saved_off_target), ]$shot$saved_off_target <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$saved_off_target <- FALSE
|
|
||||||
}
|
|
||||||
if ("open_goal" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$open_goal), ]$shot$open_goal <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$open_goal <- FALSE
|
|
||||||
}
|
|
||||||
if ("follows_dribble" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$follows_dribble), ]$shot$follows_dribble <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$follows_dribble <- FALSE
|
|
||||||
}
|
|
||||||
if ("redirect" %in% colnames(data$shot)) {
|
|
||||||
data[is.na(data$shot$redirect), ]$shot$redirect <- FALSE
|
|
||||||
} else {
|
|
||||||
data$shot$redirect <- FALSE
|
|
||||||
}
|
|
||||||
if ("kick_off" %in% colnames(data$kick_off)) {
|
|
||||||
data[is.na(data$shot$kick_off), ]$shotf$kick_off <- FALSE
|
|
||||||
} else {
|
|
||||||
data$kick_off <- FALSE
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error = function(e) {
|
|
||||||
# handle the error
|
|
||||||
print(paste("An error occurred:", e$message))
|
|
||||||
})
|
|
||||||
data <- data %>% mutate(angle = atan(7.32 * x1 / (x1^2 + y1^2 - (7.32/2)^2)),
|
|
||||||
is_goal = ifelse(shot$outcome$id == 97, 1, 0)) %>%
|
|
||||||
select(-location)
|
|
||||||
data$angle <- ifelse(data$angle<0, base::pi + data$angle, data$angle)
|
|
||||||
data$shot$outcome <- data$shot$outcome %>% select(-id)
|
|
||||||
data <- data %>% unnest(shot, names_sep = "_") %>%
|
|
||||||
unnest(position, names_sep = "_") %>%
|
|
||||||
unnest(shot_type, names_sep = "_") %>%
|
|
||||||
unnest(shot_outcome, names_sep = "_") %>%
|
|
||||||
unnest(shot_technique, names_sep = "_") %>%
|
|
||||||
unnest(shot_body_part, names_sep = "_")
|
|
||||||
data
|
|
||||||
}
|
|
||||||
data_test <- get_shots2("data/la_liga_events/303377.json")
|
|
||||||
write.csv(data_test, file = "data/data_test.csv")
|
|
||||||
file_names <- list.files(path = "data/la_liga_events/", pattern = "*.json")
|
file_names <- list.files(path = "data/la_liga_events/", pattern = "*.json")
|
||||||
|
length(file_names)
|
||||||
data_list <- lapply(paste("data/la_liga_events/", file_names, sep = ""), get_shots2)
|
data_list <- lapply(paste("data/la_liga_events/", file_names, sep = ""), get_shots2)
|
||||||
combined_data <- do.call(rbind, data_list)
|
library(jsonlite)
|
||||||
data_test <- data <- fromJSON(("data/la_liga_events/303377.json") %>% filter(type$name == "Shot")
|
library(tidyverse)
|
||||||
data_test <- fromJSON("data/la_liga_events/303377.json") %>% filter(type$name == "Shot")
|
library(ggsoccer)
|
||||||
data_test <- fromJSON("data/la_liga_events/303377.json") %>% filter(type$name == "Shot")
|
library(dplyr)
|
||||||
data_test$id
|
|
||||||
data_test$index
|
|
||||||
data4 <- read.csv("data/data4.csv", nrows = 1000)
|
|
||||||
View(data4)
|
|
||||||
# TODO not all json data have these same keys/fields, customize function to cover all cases
|
# TODO not all json data have these same keys/fields, customize function to cover all cases
|
||||||
get_shots2 <- function(json_file) {
|
get_shots2 <- function(json_file) {
|
||||||
data <- fromJSON(json_file) %>% filter(type$name == "Shot") %>% dplyr::select(c(minute, position, location, shot))
|
data <- fromJSON(json_file) %>% filter(type$name == "Shot") %>% dplyr::select(c(minute, position, location, shot))
|
||||||
@ -499,14 +127,51 @@ unnest(shot_technique, names_sep = "_") %>%
|
|||||||
unnest(shot_body_part, names_sep = "_")
|
unnest(shot_body_part, names_sep = "_")
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
# sample data
|
data_list <- lapply(paste("data/la_liga_events/", file_names, sep = ""), get_shots2)
|
||||||
data_test <- get_shots2("data/la_liga_events/303377.json")
|
length(data_list)
|
||||||
write.csv(data_test, file = "data/data3_test.csv")
|
ss <- lapply(data_list, nrow())
|
||||||
data1 <- read.csv("data/data1.csv", nrows = 1000)
|
ss <- lapply(data_list, nrow)
|
||||||
|
ss
|
||||||
|
sum(ss)
|
||||||
|
sss <- unlist(ss)
|
||||||
|
sss
|
||||||
|
sum(sss)
|
||||||
|
source("notebooks/dataCleaning.R")
|
||||||
|
source("notebooks/dataCleaning.R")
|
||||||
|
# generate random data
|
||||||
|
random_data <- as.data.frame(x = rnorm(100),
|
||||||
|
y = rnorm(100, mean = 1, sd = 3))
|
||||||
|
# unit tests
|
||||||
|
expect_silent(
|
||||||
|
data <- get_shots(file_path = "data/events/events_England.json", name_detail = "EN")
|
||||||
|
)
|
||||||
|
library(tinytest)
|
||||||
|
# unit tests
|
||||||
|
expect_silent(
|
||||||
|
data <- get_shots(file_path = "data/events/events_England.json", name_detail = "EN")
|
||||||
|
)
|
||||||
|
expect_silent(
|
||||||
|
data <- get_shots2(json_file = "data/la_liga_events/ (1).json")
|
||||||
|
)
|
||||||
|
expect_error(
|
||||||
|
get_final_data(data = random_data)
|
||||||
|
)
|
||||||
|
data1 <- get_shots2(json_file = "data/la_liga_events/ (1).json")
|
||||||
|
data2 <- get_shots2(json_file = "data/la_liga_events/ (2).json")
|
||||||
|
expect_equivalent(colnames(data1), colnames(data2))
|
||||||
|
expect_false(is.vector(data1))
|
||||||
|
expect_true(is.data.frame(data1))
|
||||||
colnames(data1)
|
colnames(data1)
|
||||||
View(data1)
|
colnames(data2)
|
||||||
data2 <- read.csv("data/data2.csv", nrows = 1000)
|
expect_length(length(colnames(data1)), length(colnames(data2)))
|
||||||
View(data2)
|
length(colnames(data1))
|
||||||
data3 <- read.csv("data/data3_test.csv", nrows = 1000)
|
length(colnames(data2))
|
||||||
colnames(data3)
|
?expect_length
|
||||||
View(data3)
|
expect_length(colnames(data1), colnames(data2))
|
||||||
|
expect_length(colnames(data1), colnames(data2))
|
||||||
|
expect_length(colnames(data1), 22)
|
||||||
|
expect_length(colnames(data2), 22)
|
||||||
|
expect_false(is.vector(data1))
|
||||||
|
expect_true(is.data.frame(data1))
|
||||||
|
df <- read.csv("data/data4.csv", nrows = 1000)
|
||||||
|
View(df)
|
||||||
|
20
app/.eslintrc.cjs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
env: { browser: true, es2020: true },
|
||||||
|
extends: [
|
||||||
|
'eslint:recommended',
|
||||||
|
'plugin:react/recommended',
|
||||||
|
'plugin:react/jsx-runtime',
|
||||||
|
'plugin:react-hooks/recommended',
|
||||||
|
],
|
||||||
|
ignorePatterns: ['dist', '.eslintrc.cjs'],
|
||||||
|
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
|
||||||
|
settings: { react: { version: '18.2' } },
|
||||||
|
plugins: ['react-refresh'],
|
||||||
|
rules: {
|
||||||
|
'react-refresh/only-export-components': [
|
||||||
|
'warn',
|
||||||
|
{ allowConstantExport: true },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
24
app/.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
8
app/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# React + Vite
|
||||||
|
|
||||||
|
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
||||||
|
|
||||||
|
Currently, two official plugins are available:
|
||||||
|
|
||||||
|
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
|
||||||
|
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
245
app/boisko.html
@ -1,245 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
||||||
<title>Football Field with Ball</title>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
margin: 100px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
background: radial-gradient(blue, black);
|
|
||||||
--line: 0.3em solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
position: relative;
|
|
||||||
width: 120em;
|
|
||||||
height: 80em;
|
|
||||||
background-color: green;
|
|
||||||
font-size: 5px;
|
|
||||||
padding: 5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container span {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.field {
|
|
||||||
border: var(--line);
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
width: inherit;
|
|
||||||
height: inherit;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.halfway-line {
|
|
||||||
width: 60em;
|
|
||||||
height: 80em;
|
|
||||||
border-right: var(--line);
|
|
||||||
}
|
|
||||||
|
|
||||||
.centre-circle,
|
|
||||||
.penalty-arc {
|
|
||||||
width: 20em;
|
|
||||||
height: 20em;
|
|
||||||
border: var(--line);
|
|
||||||
border-radius: 50%;
|
|
||||||
position: absolute;
|
|
||||||
top: 30em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.centre-circle {
|
|
||||||
left: calc((120em - 20em - 0.3em) / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.centre-mark {
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
background-color: white;
|
|
||||||
border-radius: 50%;
|
|
||||||
position: absolute;
|
|
||||||
top: calc(80em / 2 - 1em);
|
|
||||||
left: calc(120em / 2 - 1em + 0.3em / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.penalty-mark {
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
background-color: white;
|
|
||||||
border-radius: 50%;
|
|
||||||
position: absolute;
|
|
||||||
top: calc(80em / 2 - 1em);
|
|
||||||
left: calc(12em - 2em / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.penalty-area {
|
|
||||||
width: 18em;
|
|
||||||
height: 44em;
|
|
||||||
border: var(--line);
|
|
||||||
position: absolute;
|
|
||||||
top: calc((80em - 44em) / 2);
|
|
||||||
left: -0.3em;
|
|
||||||
background-color: green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.penalty-arc {
|
|
||||||
left: calc(12em - 20em / 2);
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.goal-area {
|
|
||||||
width: 6em;
|
|
||||||
height: 20em;
|
|
||||||
border: var(--line);
|
|
||||||
position: absolute;
|
|
||||||
top: calc((80em - 20em) / 2);
|
|
||||||
left: -0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.corner-arc {
|
|
||||||
border: 1px solid blue;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.corner-arc::after,
|
|
||||||
.corner-arc::before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
width: 5em;
|
|
||||||
height: 5em;
|
|
||||||
border: 0.3em solid white;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.corner-arc::before {
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.corner-arc::after {
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right {
|
|
||||||
position: absolute;
|
|
||||||
top: 0px;
|
|
||||||
left: 50%;
|
|
||||||
transform: rotateY(180deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.football {
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
background-color: #FFD700;
|
|
||||||
border-radius: 50%;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reset-button {
|
|
||||||
position: absolute;
|
|
||||||
top: -40px;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
padding: 10px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-button {
|
|
||||||
position: absolute;
|
|
||||||
top: -80px;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
padding: 10px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<button class="reset-button" onclick="resetField()">Reset</button>
|
|
||||||
<button class="info-button" onclick="getBallPosition()">Pobierz pozycję piłki</button>
|
|
||||||
<div class="field" id="footballField">
|
|
||||||
<div class="left">
|
|
||||||
<span class="halfway-line"></span>
|
|
||||||
<span class="centre-circle"></span>
|
|
||||||
<span class="centre-mark"></span>
|
|
||||||
<span class="penalty-area"></span>
|
|
||||||
<span class="penalty-mark"></span>
|
|
||||||
<span class="penalty-arc"></span>
|
|
||||||
<span class="goal-area"></span>
|
|
||||||
<span class="corner-arc"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="right">
|
|
||||||
<span class="halfway-line"></span>
|
|
||||||
<span class="centre-circle"></span>
|
|
||||||
<span class="centre-mark"></span>
|
|
||||||
<span class="penalty-area"></span>
|
|
||||||
<span class="penalty-mark"></span>
|
|
||||||
<span class="penalty-arc"></span>
|
|
||||||
<span class="goal-area"></span>
|
|
||||||
<span class="corner-arc"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function resetField() {
|
|
||||||
var footballField = document.getElementById('footballField');
|
|
||||||
var footballs = document.querySelectorAll('.football');
|
|
||||||
|
|
||||||
footballs.forEach(function (ball) {
|
|
||||||
footballField.removeChild(ball);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getBallPosition() {
|
|
||||||
var ball = document.querySelector('.football');
|
|
||||||
|
|
||||||
if (ball) {
|
|
||||||
var x = ball.style.left;
|
|
||||||
var y = ball.style.top;
|
|
||||||
alert('Pozycja piłki:\nX: ' + x + '\nY: ' + y);
|
|
||||||
} else {
|
|
||||||
alert('Piłka nie jest obecnie na boisku.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
var footballField = document.getElementById('footballField');
|
|
||||||
|
|
||||||
footballField.addEventListener('click', function (event) {
|
|
||||||
var x = event.clientX - footballField.getBoundingClientRect().left;
|
|
||||||
var y = event.clientY - footballField.getBoundingClientRect().top;
|
|
||||||
|
|
||||||
var existingBall = document.querySelector('.football');
|
|
||||||
if (!existingBall) {
|
|
||||||
var ball = document.createElement('div');
|
|
||||||
ball.className = 'football';
|
|
||||||
ball.style.left = x + 'px';
|
|
||||||
ball.style.top = y + 'px';
|
|
||||||
|
|
||||||
footballField.appendChild(ball);
|
|
||||||
} else {
|
|
||||||
alert('Możesz dodać tylko jedną piłkę!');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
|
|
||||||
<!-- https://github.com/zhenfei666/a-football-pitch-CSS-/blob/master/soccer-pitch.html -->
|
|
13
app/index.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="logo.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Football analysys</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.jsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
5497
app/package-lock.json
generated
Normal file
41
app/package.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "react_bs_web",
|
||||||
|
"private": true,
|
||||||
|
"proxy": "http://localhost:5000",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build",
|
||||||
|
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@emailjs/browser": "^3.11.0",
|
||||||
|
"@react-three/drei": "^9.89.3",
|
||||||
|
"@react-three/fiber": "^8.15.12",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"framer-motion": "^10.16.12",
|
||||||
|
"maath": "^0.10.4",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0",
|
||||||
|
"react-router-dom": "^6.20.1",
|
||||||
|
"react-tilt": "^1.0.2",
|
||||||
|
"react-vertical-timeline-component": "^3.6.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "^18.2.37",
|
||||||
|
"@types/react-dom": "^18.2.15",
|
||||||
|
"@vitejs/plugin-react": "^4.2.0",
|
||||||
|
"autoprefixer": "^10.4.16",
|
||||||
|
"css": "^3.0.0",
|
||||||
|
"eslint": "^8.53.0",
|
||||||
|
"eslint-plugin-react": "^7.33.2",
|
||||||
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.4",
|
||||||
|
"post": "^0.0.1",
|
||||||
|
"postcss": "^8.4.32",
|
||||||
|
"tailwindcss": "^3.3.5",
|
||||||
|
"vite": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
6
app/postcss.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
}
|
11
app/public/desktop_pc/license.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Model Information:
|
||||||
|
* title: Gaming Desktop PC
|
||||||
|
* source: https://sketchfab.com/3d-models/gaming-desktop-pc-d1d8282c9916438091f11aeb28787b66
|
||||||
|
* author: Yolala1232 (https://sketchfab.com/Yolala1232)
|
||||||
|
|
||||||
|
Model License:
|
||||||
|
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
||||||
|
* requirements: Author must be credited. Commercial use is allowed.
|
||||||
|
|
||||||
|
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
|
||||||
|
This work is based on "Gaming Desktop PC" (https://sketchfab.com/3d-models/gaming-desktop-pc-d1d8282c9916438091f11aeb28787b66) by Yolala1232 (https://sketchfab.com/Yolala1232) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
BIN
app/public/desktop_pc/scene.bin
Normal file
87680
app/public/desktop_pc/scene.gltf
Normal file
BIN
app/public/desktop_pc/textures/Material.002_baseColor.png
Normal file
After Width: | Height: | Size: 229 B |
BIN
app/public/desktop_pc/textures/Material.023_baseColor.jpeg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
app/public/desktop_pc/textures/Material.024_baseColor.jpeg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/public/desktop_pc/textures/Material.074_0_baseColor.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
app/public/desktop_pc/textures/Material.074_10_baseColor.jpeg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
app/public/desktop_pc/textures/Material.074_11_baseColor.png
Normal file
After Width: | Height: | Size: 912 B |
BIN
app/public/desktop_pc/textures/Material.074_12_baseColor.jpeg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
app/public/desktop_pc/textures/Material.074_13_baseColor.png
Normal file
After Width: | Height: | Size: 232 KiB |
BIN
app/public/desktop_pc/textures/Material.074_14_baseColor.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
app/public/desktop_pc/textures/Material.074_15_baseColor.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
app/public/desktop_pc/textures/Material.074_16_baseColor.png
Normal file
After Width: | Height: | Size: 220 KiB |
BIN
app/public/desktop_pc/textures/Material.074_17_baseColor.png
Normal file
After Width: | Height: | Size: 303 KiB |
BIN
app/public/desktop_pc/textures/Material.074_18_baseColor.png
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
app/public/desktop_pc/textures/Material.074_18_emissive.png
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
app/public/desktop_pc/textures/Material.074_19_baseColor.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
app/public/desktop_pc/textures/Material.074_1_baseColor.jpeg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
app/public/desktop_pc/textures/Material.074_20_baseColor.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
app/public/desktop_pc/textures/Material.074_21_baseColor.png
Normal file
After Width: | Height: | Size: 166 KiB |
BIN
app/public/desktop_pc/textures/Material.074_22_baseColor.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
app/public/desktop_pc/textures/Material.074_23_baseColor.png
Normal file
After Width: | Height: | Size: 166 KiB |
BIN
app/public/desktop_pc/textures/Material.074_24_baseColor.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
app/public/desktop_pc/textures/Material.074_24_emissive.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/public/desktop_pc/textures/Material.074_25_baseColor.jpeg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
app/public/desktop_pc/textures/Material.074_26_baseColor.png
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
app/public/desktop_pc/textures/Material.074_27_baseColor.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
app/public/desktop_pc/textures/Material.074_27_emissive.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
app/public/desktop_pc/textures/Material.074_28_baseColor.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/public/desktop_pc/textures/Material.074_29_baseColor.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/public/desktop_pc/textures/Material.074_2_baseColor.jpeg
Normal file
After Width: | Height: | Size: 394 KiB |
BIN
app/public/desktop_pc/textures/Material.074_30_baseColor.png
Normal file
After Width: | Height: | Size: 380 KiB |
BIN
app/public/desktop_pc/textures/Material.074_31_baseColor.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/public/desktop_pc/textures/Material.074_32_baseColor.jpeg
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
app/public/desktop_pc/textures/Material.074_33_baseColor.png
Normal file
After Width: | Height: | Size: 99 B |
BIN
app/public/desktop_pc/textures/Material.074_34_baseColor.jpeg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
app/public/desktop_pc/textures/Material.074_35_baseColor.png
Normal file
After Width: | Height: | Size: 99 B |
BIN
app/public/desktop_pc/textures/Material.074_36_baseColor.jpeg
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
app/public/desktop_pc/textures/Material.074_39_baseColor.jpeg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
app/public/desktop_pc/textures/Material.074_3_baseColor.png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
app/public/desktop_pc/textures/Material.074_40_baseColor.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
app/public/desktop_pc/textures/Material.074_4_baseColor.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
app/public/desktop_pc/textures/Material.074_4_emissive.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
app/public/desktop_pc/textures/Material.074_5_baseColor.png
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
app/public/desktop_pc/textures/Material.074_6_baseColor.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/public/desktop_pc/textures/Material.074_7_baseColor.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
app/public/desktop_pc/textures/Material.074_8_baseColor.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
app/public/desktop_pc/textures/Material.074_9_baseColor.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
app/public/desktop_pc/textures/Material.074_9_emissive.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/public/desktop_pc/textures/Material.074_baseColor.png
Normal file
After Width: | Height: | Size: 550 KiB |
BIN
app/public/desktop_pc/textures/Material_baseColor.jpeg
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
app/public/desktop_pc/textures/Material_metallicRoughness.png
Normal file
After Width: | Height: | Size: 640 KiB |
BIN
app/public/desktop_pc/textures/Tasten_2_baseColor.jpeg
Normal file
After Width: | Height: | Size: 21 KiB |
124
app/public/logo.svg
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="556.000000pt" height="535.000000pt" viewBox="0 0 556.000000 535.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
|
||||||
|
<g transform="translate(0.000000,535.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M0 2675 l0 -2675 2780 0 2780 0 0 2675 0 2675 -2780 0 -2780 0 0
|
||||||
|
-2675z m2789 2558 c26 -19 55 -33 72 -33 29 0 29 0 29 -65 0 -57 -3 -69 -25
|
||||||
|
-90 -13 -14 -37 -25 -52 -26 -15 0 -93 -2 -173 -4 -326 -8 -516 -76 -963 -342
|
||||||
|
-201 -121 -228 -140 -366 -267 -282 -258 -415 -414 -510 -596 -109 -208 -129
|
||||||
|
-290 -176 -725 -35 -319 -37 -333 -72 -415 l-36 -85 23 -165 c12 -91 24 -179
|
||||||
|
27 -196 5 -29 3 -31 -20 -27 -36 7 -52 -26 -37 -72 16 -47 36 -62 62 -46 11 7
|
||||||
|
22 11 24 9 2 -3 31 -71 65 -154 33 -82 77 -175 96 -208 20 -32 108 -133 197
|
||||||
|
-224 145 -148 521 -509 646 -620 l48 -42 49 10 c26 6 56 18 65 27 17 15 18 15
|
||||||
|
18 -1 0 -9 -14 -30 -31 -45 l-30 -28 23 -15 c51 -34 167 -87 233 -107 41 -13
|
||||||
|
146 -30 255 -41 101 -11 200 -22 220 -26 88 -14 296 -57 317 -65 15 -6 47 -3
|
||||||
|
91 7 37 9 116 22 175 29 103 13 110 15 152 52 34 30 43 45 44 72 1 27 4 31 14
|
||||||
|
22 19 -15 28 -3 20 28 -6 24 -5 25 11 12 10 -8 24 -28 32 -43 l15 -29 20 25
|
||||||
|
c24 30 39 33 39 9 0 -15 2 -16 10 -3 5 8 10 27 10 43 0 29 14 37 24 12 8 -22
|
||||||
|
21 -18 34 10 10 21 18 25 57 25 41 0 45 -2 45 -25 0 -38 25 -41 68 -6 l39 30
|
||||||
|
23 -24 c14 -15 35 -25 52 -25 50 0 499 313 974 678 l44 34 1 -39 1 -38 16 48
|
||||||
|
c13 39 20 47 35 43 30 -7 45 3 79 53 37 53 135 158 160 172 17 9 17 6 -1 -38
|
||||||
|
-110 -278 -235 -496 -405 -706 -61 -75 -84 -112 -89 -141 -10 -59 -40 -86 -99
|
||||||
|
-86 -66 0 -112 -24 -105 -55 3 -21 1 -23 -14 -15 -25 14 -55 12 -116 -7 -61
|
||||||
|
-19 -67 -36 -27 -74 28 -26 54 -77 54 -106 -1 -13 -12 -5 -39 26 l-38 44 -34
|
||||||
|
-21 c-19 -11 -79 -66 -133 -122 -97 -98 -100 -103 -104 -153 l-4 -52 -53 3
|
||||||
|
c-71 5 -95 -17 -95 -88 0 -28 -5 -50 -10 -50 -6 0 -32 23 -59 50 -27 28 -51
|
||||||
|
50 -54 50 -24 0 -159 -33 -189 -46 -30 -13 -36 -21 -35 -43 3 -40 -26 -37
|
||||||
|
-123 9 -101 50 -165 64 -225 50 -35 -8 -61 -6 -127 10 -126 30 -301 36 -513
|
||||||
|
16 -98 -10 -183 -20 -187 -22 -4 -3 -8 13 -8 35 0 45 -2 46 -28 30 -15 -10
|
||||||
|
-36 -1 -123 50 -57 34 -156 88 -219 120 -102 52 -124 59 -190 64 -83 6 -167
|
||||||
|
37 -228 85 -64 51 -82 56 -208 62 -111 6 -128 9 -188 39 -108 53 -183 166
|
||||||
|
-220 330 -22 95 -40 129 -78 145 -27 12 -35 26 -75 137 -44 120 -80 206 -254
|
||||||
|
604 -81 185 -83 192 -87 283 l-4 92 25 0 c41 0 50 20 38 87 -28 152 -77 293
|
||||||
|
-161 463 l-57 115 13 75 c8 41 27 160 44 264 62 379 118 487 385 737 149 140
|
||||||
|
178 178 214 274 31 82 33 83 204 251 182 179 287 273 326 294 16 8 59 11 135
|
||||||
|
9 l110 -4 23 48 c28 58 94 125 148 152 28 14 63 20 118 21 88 2 93 5 189 93
|
||||||
|
64 59 97 75 99 49 1 -7 1 -33 -1 -57 -2 -48 -5 -48 68 2 58 39 169 90 322 147
|
||||||
|
141 53 138 53 229 -17z m981 -117 c164 -30 387 -122 545 -228 44 -29 123 -96
|
||||||
|
176 -148 92 -91 107 -113 351 -505 140 -225 259 -416 263 -424 15 -25 55 -385
|
||||||
|
62 -543 7 -177 11 -184 63 -118 18 23 34 39 36 37 2 -2 -3 -23 -11 -47 -32
|
||||||
|
-90 -73 -316 -76 -412 l-1 -43 -11 42 c-7 31 -6 79 5 175 8 73 14 134 12 136
|
||||||
|
-1 2 -12 -6 -24 -18 -27 -27 -45 -14 -52 38 -5 29 -21 52 -79 112 -51 52 -88
|
||||||
|
102 -117 158 -43 82 -44 83 -32 134 15 62 7 148 -17 191 -10 17 -43 51 -73 76
|
||||||
|
-30 24 -67 61 -81 82 -40 58 -89 217 -89 288 0 36 -4 61 -10 61 -6 0 -27 -8
|
||||||
|
-48 -19 -88 -44 -74 -50 -353 150 -270 193 -445 310 -599 402 -87 51 -102 57
|
||||||
|
-181 66 -189 21 -329 114 -329 218 0 59 37 88 123 96 36 3 79 2 96 -3 26 -7
|
||||||
|
32 -5 46 16 9 14 26 29 38 34 34 14 283 11 367 -4z m-860 -1131 c30 -8 98 -36
|
||||||
|
150 -62 78 -39 110 -63 180 -133 96 -96 148 -178 187 -295 25 -74 27 -93 27
|
||||||
|
-235 0 -141 -3 -162 -26 -227 -44 -122 -94 -201 -188 -295 -75 -74 -102 -93
|
||||||
|
-191 -136 -134 -65 -237 -87 -369 -79 -118 8 -191 27 -300 80 -70 34 -102 59
|
||||||
|
-181 137 -81 81 -102 109 -142 190 -59 121 -77 197 -77 336 0 214 63 366 215
|
||||||
|
519 69 70 109 100 170 132 147 75 232 94 390 87 55 -2 125 -11 155 -19z
|
||||||
|
m-1422 -1571 c32 -5 32 -5 32 -63 l0 -59 -44 5 c-47 6 -86 -9 -86 -32 0 -10
|
||||||
|
10 -15 30 -15 l30 0 0 -60 0 -60 -30 0 -30 0 0 -90 0 -90 30 0 30 0 0 -60 0
|
||||||
|
-60 -130 0 -130 0 0 60 c0 47 3 60 15 60 12 0 15 17 15 90 0 73 -3 90 -15 90
|
||||||
|
-12 0 -15 13 -15 60 0 45 4 60 14 60 8 0 17 15 21 37 22 119 93 153 263 127z
|
||||||
|
m1492 -109 c0 -58 4 -105 8 -105 5 0 17 9 27 20 36 40 110 45 173 11 39 -21
|
||||||
|
64 -94 65 -189 0 -145 -41 -210 -142 -220 -42 -4 -52 -1 -83 27 -43 38 -48 38
|
||||||
|
-48 6 l0 -25 -100 0 -100 0 0 60 c0 53 2 60 20 60 19 0 20 7 20 171 0 162 -1
|
||||||
|
171 -20 176 -17 5 -20 14 -20 59 l0 54 100 0 100 0 0 -105z m970 -125 c0 -223
|
||||||
|
1 -230 20 -230 18 0 20 -7 20 -60 l0 -60 -120 0 -120 0 0 60 c0 53 2 60 20 60
|
||||||
|
19 0 20 7 20 171 0 162 -1 171 -20 176 -17 5 -20 14 -20 59 l0 54 100 0 100 0
|
||||||
|
0 -230z m270 0 c0 -198 2 -230 15 -230 12 0 15 -13 15 -60 l0 -60 -115 0 -115
|
||||||
|
0 0 60 c0 47 3 60 15 60 13 0 15 26 15 175 0 149 -2 175 -15 175 -12 0 -15 13
|
||||||
|
-15 55 l0 55 100 0 100 0 0 -230z m-1580 115 l0 -45 55 0 55 0 0 -60 0 -60
|
||||||
|
-55 0 -55 0 0 -64 c0 -36 4 -76 10 -90 8 -23 15 -26 55 -26 l45 0 0 -54 0 -54
|
||||||
|
-50 -11 c-106 -23 -175 -6 -210 51 -17 27 -20 50 -20 136 0 95 -2 104 -20 109
|
||||||
|
-17 5 -20 14 -20 64 0 44 4 59 14 59 24 0 46 29 46 61 l0 29 75 0 75 0 0 -45z
|
||||||
|
m-826 -60 c34 -15 76 -56 97 -95 7 -14 13 -59 13 -100 0 -97 -24 -148 -91
|
||||||
|
-187 -42 -25 -58 -28 -133 -28 -97 0 -133 15 -183 77 -26 32 -31 48 -35 111
|
||||||
|
-9 141 40 212 161 237 49 10 128 3 171 -15z m480 0 c34 -15 76 -56 97 -95 7
|
||||||
|
-14 13 -59 13 -100 1 -96 -27 -152 -94 -190 -38 -21 -58 -25 -130 -25 -97 0
|
||||||
|
-133 15 -183 77 -26 32 -31 48 -35 111 -9 141 40 212 161 237 49 10 128 3 171
|
||||||
|
-15z m1315 -3 c62 -30 75 -60 79 -177 3 -81 7 -105 18 -105 10 0 14 -16 14
|
||||||
|
-60 l0 -60 -95 0 c-95 0 -95 0 -95 25 0 14 -4 25 -10 25 -5 0 -10 -4 -10 -9 0
|
||||||
|
-17 -67 -51 -99 -51 -43 0 -97 24 -110 48 -14 27 -14 94 1 126 14 32 99 76
|
||||||
|
147 77 20 1 47 4 61 8 l24 7 -23 23 c-22 22 -29 23 -92 17 -37 -3 -79 -10 -93
|
||||||
|
-16 l-26 -10 0 65 c0 35 5 67 11 71 18 11 151 22 209 17 30 -3 70 -12 89 -21z
|
||||||
|
m-2290 -534 c6 -13 34 -88 61 -167 38 -110 47 -147 37 -153 -19 -12 -47 -9
|
||||||
|
-47 5 -1 32 -16 38 -55 22 -28 -12 -40 -13 -49 -5 -14 14 26 50 55 50 23 0 23
|
||||||
|
19 0 85 -14 39 -19 46 -24 30 -57 -191 -58 -195 -78 -195 -11 0 -22 6 -25 14
|
||||||
|
-3 8 12 70 34 138 22 68 43 140 46 161 8 42 27 48 45 15z m529 -149 c2 -105
|
||||||
|
-1 -161 -9 -176 -13 -23 -29 -31 -29 -13 0 5 -21 44 -47 87 l-48 78 -3 -76
|
||||||
|
c-2 -69 -5 -77 -24 -82 -12 -4 -25 -4 -30 -1 -12 8 -10 331 2 339 6 4 10 -5
|
||||||
|
10 -19 0 -16 6 -26 15 -26 8 0 15 -5 15 -11 0 -11 75 -125 88 -133 5 -3 7 42
|
||||||
|
4 99 l-5 104 29 -8 29 -7 3 -155z m352 157 c0 -8 4 -16 8 -18 13 -5 105 -287
|
||||||
|
98 -303 -9 -25 -45 -18 -52 11 -5 18 -11 23 -23 19 -42 -17 -71 -23 -76 -14
|
||||||
|
-10 14 5 30 41 45 37 16 37 18 9 100 -8 24 -15 33 -18 24 -3 -8 -18 -55 -34
|
||||||
|
-105 -21 -66 -33 -91 -47 -93 -10 -2 -22 0 -27 5 -4 4 12 71 36 148 24 77 46
|
||||||
|
152 50 168 5 28 35 39 35 13z m388 1 c8 -7 12 -46 12 -134 l0 -125 28 6 c74
|
||||||
|
19 79 19 85 -4 5 -18 -2 -25 -36 -41 -23 -10 -51 -19 -62 -19 -12 0 -26 -5
|
||||||
|
-31 -10 -6 -6 -18 -8 -27 -4 -15 5 -17 26 -17 173 0 153 2 168 18 168 9 0 23
|
||||||
|
-4 30 -10z m399 -52 l31 -66 27 66 c28 65 37 73 64 56 13 -8 9 -24 -24 -98
|
||||||
|
-32 -71 -40 -103 -43 -166 -4 -73 -6 -78 -26 -75 -19 3 -22 11 -27 83 -6 77
|
||||||
|
-32 159 -65 211 -19 28 -12 54 14 54 13 0 28 -19 49 -65z m769 -3 l31 -63 28
|
||||||
|
66 c28 65 37 73 65 56 12 -8 7 -25 -28 -106 -36 -83 -42 -106 -42 -166 0 -67
|
||||||
|
-1 -70 -22 -67 -21 3 -23 10 -29 83 -4 64 -13 96 -42 160 -21 43 -35 85 -32
|
||||||
|
93 11 29 41 5 71 -56z m-306 43 c11 -14 7 -22 -29 -59 l-42 -42 51 -43 c27
|
||||||
|
-23 50 -50 50 -59 0 -19 -98 -122 -116 -122 -6 0 -18 7 -25 16 -12 14 -7 21
|
||||||
|
34 56 26 22 47 43 47 47 0 4 -22 24 -50 45 -64 49 -64 68 0 129 55 52 61 54
|
||||||
|
80 32z m770 0 c11 -14 7 -23 -29 -59 l-42 -43 50 -42 c28 -24 51 -50 51 -60 0
|
||||||
|
-9 -24 -41 -54 -70 -42 -42 -58 -52 -75 -46 -32 10 -25 30 24 72 l46 38 -56
|
||||||
|
52 c-64 60 -64 62 9 131 51 47 58 49 76 27z"/>
|
||||||
|
<path d="M560 1975 c0 -3 9 -23 20 -45 11 -22 20 -49 20 -60 0 -28 17 -61 44
|
||||||
|
-82 36 -30 45 -21 22 25 -11 23 -32 66 -44 95 -13 29 -32 57 -43 62 -10 6 -19
|
||||||
|
8 -19 5z"/>
|
||||||
|
<path d="M490 1955 c-10 -12 -6 -22 24 -60 21 -25 39 -45 41 -45 8 0 -32 114
|
||||||
|
-41 117 -6 2 -17 -3 -24 -12z"/>
|
||||||
|
<path d="M3048 3630 c-87 -26 -138 -93 -138 -180 0 -106 79 -183 185 -182 82
|
||||||
|
1 138 38 170 114 41 99 -18 218 -123 248 -42 11 -56 11 -94 0z"/>
|
||||||
|
<path d="M2996 2108 c-18 -26 -21 -109 -6 -139 7 -12 21 -19 40 -19 38 0 50
|
||||||
|
23 50 94 0 58 -16 86 -50 86 -10 0 -26 -10 -34 -22z"/>
|
||||||
|
<path d="M1670 2115 c-17 -20 -24 -84 -13 -125 7 -29 14 -36 38 -38 19 -3 33
|
||||||
|
2 42 14 19 26 17 129 -3 148 -19 20 -48 20 -64 1z"/>
|
||||||
|
<path d="M2150 2115 c-17 -20 -24 -84 -13 -125 7 -28 15 -36 37 -38 44 -5 56
|
||||||
|
13 56 84 0 44 -5 67 -16 78 -19 20 -48 20 -64 1z"/>
|
||||||
|
<path d="M3472 1994 c-27 -19 -28 -40 -3 -53 24 -13 48 4 57 42 5 22 3 27 -13
|
||||||
|
27 -10 0 -29 -7 -41 -16z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.4 KiB |
11
app/public/planet/license.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Model Information:
|
||||||
|
* title: Stylized planet
|
||||||
|
* source: https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70
|
||||||
|
* author: cmzw (https://sketchfab.com/cmzw)
|
||||||
|
|
||||||
|
Model License:
|
||||||
|
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
||||||
|
* requirements: Author must be credited. Commercial use is allowed.
|
||||||
|
|
||||||
|
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
|
||||||
|
This work is based on "Stylized planet" (https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70) by cmzw (https://sketchfab.com/cmzw) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
BIN
app/public/planet/scene.bin
Normal file
536
app/public/planet/scene.gltf
Normal file
@ -0,0 +1,536 @@
|
|||||||
|
{
|
||||||
|
"accessors": [
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 26495,
|
||||||
|
"max": [
|
||||||
|
0.8758764863014221,
|
||||||
|
0.8545469045639038,
|
||||||
|
0.8728971481323242
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.8763356804847717,
|
||||||
|
-0.8634992837905884,
|
||||||
|
-0.8758782148361206
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 317940,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 26495,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
0.9999911785125732,
|
||||||
|
0.9991646409034729
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-1.0,
|
||||||
|
-0.9999968409538269,
|
||||||
|
-0.9999611377716064
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 26495,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"componentType": 5125,
|
||||||
|
"count": 103014,
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 635880,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6596,
|
||||||
|
"max": [
|
||||||
|
0.6551179885864258,
|
||||||
|
0.6613333821296692,
|
||||||
|
0.6618664860725403
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.6606217622756958,
|
||||||
|
-0.6490849852561951,
|
||||||
|
-0.6526646018028259
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 2,
|
||||||
|
"byteOffset": 715032,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6596,
|
||||||
|
"max": [
|
||||||
|
0.999987006187439,
|
||||||
|
0.9998384118080139,
|
||||||
|
0.9999796748161316
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.9995425939559937,
|
||||||
|
-0.999676525592804,
|
||||||
|
-0.9994800686836243
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"byteOffset": 211960,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 6596,
|
||||||
|
"max": [
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"byteOffset": 412056,
|
||||||
|
"componentType": 5125,
|
||||||
|
"count": 39042,
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 3,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 451,
|
||||||
|
"max": [
|
||||||
|
15.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 5,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 451,
|
||||||
|
"max": [
|
||||||
|
0.20017318427562714,
|
||||||
|
0.979751706123352,
|
||||||
|
0.2001722753047943,
|
||||||
|
0.9797602891921997
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.018710684031248093,
|
||||||
|
-0.9797568917274475,
|
||||||
|
-0.1991616040468216,
|
||||||
|
0.0026621678844094276
|
||||||
|
],
|
||||||
|
"type": "VEC4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 3,
|
||||||
|
"byteOffset": 1804,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 125,
|
||||||
|
"max": [
|
||||||
|
15.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 4,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 125,
|
||||||
|
"max": [
|
||||||
|
1.0000001192092896,
|
||||||
|
1.0,
|
||||||
|
1.0000001192092896
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.9999998807907104,
|
||||||
|
1.0,
|
||||||
|
0.9999998807907104
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 3,
|
||||||
|
"byteOffset": 2304,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 451,
|
||||||
|
"max": [
|
||||||
|
15.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 5,
|
||||||
|
"byteOffset": 7216,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 451,
|
||||||
|
"max": [
|
||||||
|
0.20017318427562714,
|
||||||
|
0.979751706123352,
|
||||||
|
0.2001722753047943,
|
||||||
|
0.9797602891921997
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
-0.018710684031248093,
|
||||||
|
-0.9797568917274475,
|
||||||
|
-0.1991616040468216,
|
||||||
|
0.0026621678844094276
|
||||||
|
],
|
||||||
|
"type": "VEC4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 3,
|
||||||
|
"byteOffset": 4108,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 125,
|
||||||
|
"max": [
|
||||||
|
15.0
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"type": "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 4,
|
||||||
|
"byteOffset": 1500,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 125,
|
||||||
|
"max": [
|
||||||
|
1.0000001192092896,
|
||||||
|
1.0,
|
||||||
|
1.0000001192092896
|
||||||
|
],
|
||||||
|
"min": [
|
||||||
|
0.9999998807907104,
|
||||||
|
1.0,
|
||||||
|
0.9999998807907104
|
||||||
|
],
|
||||||
|
"type": "VEC3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"animations": [
|
||||||
|
{
|
||||||
|
"channels": [
|
||||||
|
{
|
||||||
|
"sampler": 0,
|
||||||
|
"target": {
|
||||||
|
"node": 3,
|
||||||
|
"path": "rotation"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sampler": 1,
|
||||||
|
"target": {
|
||||||
|
"node": 3,
|
||||||
|
"path": "scale"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sampler": 2,
|
||||||
|
"target": {
|
||||||
|
"node": 5,
|
||||||
|
"path": "rotation"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sampler": 3,
|
||||||
|
"target": {
|
||||||
|
"node": 5,
|
||||||
|
"path": "scale"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "Animation",
|
||||||
|
"samplers": [
|
||||||
|
{
|
||||||
|
"input": 8,
|
||||||
|
"interpolation": "LINEAR",
|
||||||
|
"output": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": 10,
|
||||||
|
"interpolation": "LINEAR",
|
||||||
|
"output": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": 12,
|
||||||
|
"interpolation": "LINEAR",
|
||||||
|
"output": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": 14,
|
||||||
|
"interpolation": "LINEAR",
|
||||||
|
"output": 15
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"asset": {
|
||||||
|
"extras": {
|
||||||
|
"author": "cmzw (https://sketchfab.com/cmzw)",
|
||||||
|
"license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
|
||||||
|
"source": "https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70",
|
||||||
|
"title": "Stylized planet"
|
||||||
|
},
|
||||||
|
"generator": "Sketchfab-14.10.0",
|
||||||
|
"version": "2.0"
|
||||||
|
},
|
||||||
|
"bufferViews": [
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 568224,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34963
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 264728,
|
||||||
|
"byteOffset": 568224,
|
||||||
|
"byteStride": 8,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 794184,
|
||||||
|
"byteOffset": 832952,
|
||||||
|
"byteStride": 12,
|
||||||
|
"name": "floatBufferViews",
|
||||||
|
"target": 34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 4608,
|
||||||
|
"byteOffset": 1627136,
|
||||||
|
"name": "floatBufferViews"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 3000,
|
||||||
|
"byteOffset": 1631744,
|
||||||
|
"byteStride": 12,
|
||||||
|
"name": "floatBufferViews"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer": 0,
|
||||||
|
"byteLength": 14432,
|
||||||
|
"byteOffset": 1634744,
|
||||||
|
"byteStride": 16,
|
||||||
|
"name": "floatBufferViews"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers": [
|
||||||
|
{
|
||||||
|
"byteLength": 1649176,
|
||||||
|
"uri": "scene.bin"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extensionsUsed": [
|
||||||
|
"KHR_materials_unlit"
|
||||||
|
],
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"uri": "textures/Clouds_baseColor.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uri": "textures/Planet_baseColor.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"doubleSided": true,
|
||||||
|
"emissiveTexture": {
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
"extensions": {
|
||||||
|
"KHR_materials_unlit": {}
|
||||||
|
},
|
||||||
|
"name": "Clouds",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorTexture": {
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
"metallicFactor": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emissiveFactor": [
|
||||||
|
0.23391156271636818,
|
||||||
|
0.23391156271636818,
|
||||||
|
0.23391156271636818
|
||||||
|
],
|
||||||
|
"emissiveTexture": {
|
||||||
|
"index": 1
|
||||||
|
},
|
||||||
|
"extensions": {
|
||||||
|
"KHR_materials_unlit": {}
|
||||||
|
},
|
||||||
|
"name": "Planet",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorTexture": {
|
||||||
|
"index": 1
|
||||||
|
},
|
||||||
|
"metallicFactor": 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes": [
|
||||||
|
{
|
||||||
|
"name": "Object_0",
|
||||||
|
"primitives": [
|
||||||
|
{
|
||||||
|
"attributes": {
|
||||||
|
"NORMAL": 1,
|
||||||
|
"POSITION": 0,
|
||||||
|
"TEXCOORD_0": 2
|
||||||
|
},
|
||||||
|
"indices": 3,
|
||||||
|
"material": 0,
|
||||||
|
"mode": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Object_1",
|
||||||
|
"primitives": [
|
||||||
|
{
|
||||||
|
"attributes": {
|
||||||
|
"NORMAL": 5,
|
||||||
|
"POSITION": 4,
|
||||||
|
"TEXCOORD_0": 6
|
||||||
|
},
|
||||||
|
"indices": 7,
|
||||||
|
"material": 1,
|
||||||
|
"mode": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
0.9979661703109741,
|
||||||
|
0.06371438503265381,
|
||||||
|
0.001990502001717701,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.031225780025124772,
|
||||||
|
-0.9995123744010925,
|
||||||
|
0.0,
|
||||||
|
-0.06374546885490417,
|
||||||
|
0.9974795579910278,
|
||||||
|
0.031162271276116593,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "Sketchfab_model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"name": "root"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
3,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"matrix": [
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
1.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
-1.0,
|
||||||
|
2.220446049250313e-16,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"name": "GLTF_SceneRootNode"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"name": "Clouds_1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mesh": 0,
|
||||||
|
"name": "Object_4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"name": "Planet_2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mesh": 1,
|
||||||
|
"name": "Object_6"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers": [
|
||||||
|
{
|
||||||
|
"magFilter": 9729,
|
||||||
|
"minFilter": 9987,
|
||||||
|
"wrapS": 10497,
|
||||||
|
"wrapT": 10497
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scene": 0,
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"name": "Sketchfab_Scene",
|
||||||
|
"nodes": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"sampler": 0,
|
||||||
|
"source": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sampler": 0,
|
||||||
|
"source": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
app/public/planet/textures/Clouds_baseColor.png
Normal file
After Width: | Height: | Size: 713 KiB |
BIN
app/public/planet/textures/Planet_baseColor.png
Normal file
After Width: | Height: | Size: 612 KiB |
23
app/src/App.jsx
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { BrowserRouter } from "react-router-dom";
|
||||||
|
import { Hero, Navbar } from "./components";
|
||||||
|
|
||||||
|
|
||||||
|
const App = () => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BrowserRouter>
|
||||||
|
<div className='relative z-0 bg-primary'>
|
||||||
|
<div className='bg-hero-pattern bg-cover bg-no-repeat'>
|
||||||
|
<Navbar />
|
||||||
|
</div>
|
||||||
|
<div className='relative z-0'>
|
||||||
|
<Hero/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</BrowserRouter>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
BIN
app/src/assets/backend.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
app/src/assets/carrent.png
Normal file
After Width: | Height: | Size: 741 KiB |
3
app/src/assets/close.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="18" height="18" viewBox="0 0 18 18" fill="#FFF" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10.4099 9L16.7099 2.71C16.8982 2.5217 17.004 2.2663 17.004 2C17.004 1.7337 16.8982 1.47831 16.7099 1.29C16.5216 1.1017 16.2662 0.995911 15.9999 0.995911C15.7336 0.995911 15.4782 1.1017 15.2899 1.29L8.99994 7.59L2.70994 1.29C2.52164 1.1017 2.26624 0.995911 1.99994 0.995911C1.73364 0.995911 1.47824 1.1017 1.28994 1.29C1.10164 1.47831 0.995847 1.7337 0.995847 2C0.995847 2.2663 1.10164 2.5217 1.28994 2.71L7.58994 9L1.28994 15.29C1.19621 15.383 1.12182 15.4936 1.07105 15.6154C1.02028 15.7373 0.994141 15.868 0.994141 16C0.994141 16.132 1.02028 16.2627 1.07105 16.3846C1.12182 16.5064 1.19621 16.617 1.28994 16.71C1.3829 16.8037 1.4935 16.8781 1.61536 16.9289C1.73722 16.9797 1.86793 17.0058 1.99994 17.0058C2.13195 17.0058 2.26266 16.9797 2.38452 16.9289C2.50638 16.8781 2.61698 16.8037 2.70994 16.71L8.99994 10.41L15.2899 16.71C15.3829 16.8037 15.4935 16.8781 15.6154 16.9289C15.7372 16.9797 15.8679 17.0058 15.9999 17.0058C16.132 17.0058 16.2627 16.9797 16.3845 16.9289C16.5064 16.8781 16.617 16.8037 16.7099 16.71C16.8037 16.617 16.8781 16.5064 16.9288 16.3846C16.9796 16.2627 17.0057 16.132 17.0057 16C17.0057 15.868 16.9796 15.7373 16.9288 15.6154C16.8781 15.4936 16.8037 15.383 16.7099 15.29L10.4099 9Z" fill="#FFFFFF"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
BIN
app/src/assets/company/meta.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
app/src/assets/company/shopify.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
app/src/assets/company/starbucks.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/src/assets/company/tesla.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
app/src/assets/creator.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
app/src/assets/github.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/src/assets/herobg.png
Normal file
After Width: | Height: | Size: 909 KiB |
62
app/src/assets/index.js
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import logo from "./logo.svg";
|
||||||
|
import backend from "./backend.png";
|
||||||
|
import creator from "./creator.png";
|
||||||
|
import mobile from "./mobile.png";
|
||||||
|
import web from "./web.png";
|
||||||
|
import github from "./github.png";
|
||||||
|
import menu from "./menu.svg";
|
||||||
|
import close from "./close.svg";
|
||||||
|
|
||||||
|
import css from "./tech/css.png";
|
||||||
|
import docker from "./tech/docker.png";
|
||||||
|
import figma from "./tech/figma.png";
|
||||||
|
import git from "./tech/git.png";
|
||||||
|
import html from "./tech/html.png";
|
||||||
|
import javascript from "./tech/javascript.png";
|
||||||
|
import mongodb from "./tech/mongodb.png";
|
||||||
|
import nodejs from "./tech/nodejs.png";
|
||||||
|
import reactjs from "./tech/reactjs.png";
|
||||||
|
import redux from "./tech/redux.png";
|
||||||
|
import tailwind from "./tech/tailwind.png";
|
||||||
|
import typescript from "./tech/typescript.png";
|
||||||
|
import threejs from "./tech/threejs.svg";
|
||||||
|
|
||||||
|
import meta from "./company/meta.png";
|
||||||
|
import shopify from "./company/shopify.png";
|
||||||
|
import starbucks from "./company/starbucks.png";
|
||||||
|
import tesla from "./company/tesla.png";
|
||||||
|
|
||||||
|
import carrent from "./carrent.png";
|
||||||
|
import jobit from "./jobit.png";
|
||||||
|
import tripguide from "./tripguide.png";
|
||||||
|
|
||||||
|
export {
|
||||||
|
logo,
|
||||||
|
backend,
|
||||||
|
creator,
|
||||||
|
mobile,
|
||||||
|
web,
|
||||||
|
github,
|
||||||
|
menu,
|
||||||
|
close,
|
||||||
|
css,
|
||||||
|
docker,
|
||||||
|
figma,
|
||||||
|
git,
|
||||||
|
html,
|
||||||
|
javascript,
|
||||||
|
mongodb,
|
||||||
|
nodejs,
|
||||||
|
reactjs,
|
||||||
|
redux,
|
||||||
|
tailwind,
|
||||||
|
typescript,
|
||||||
|
threejs,
|
||||||
|
meta,
|
||||||
|
shopify,
|
||||||
|
starbucks,
|
||||||
|
tesla,
|
||||||
|
carrent,
|
||||||
|
jobit,
|
||||||
|
tripguide,
|
||||||
|
};
|
BIN
app/src/assets/jobit.png
Normal file
After Width: | Height: | Size: 737 KiB |
124
app/src/assets/logo.svg
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="556.000000pt" height="535.000000pt" viewBox="0 0 556.000000 535.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
|
||||||
|
<g transform="translate(0.000000,535.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M0 2675 l0 -2675 2780 0 2780 0 0 2675 0 2675 -2780 0 -2780 0 0
|
||||||
|
-2675z m2789 2558 c26 -19 55 -33 72 -33 29 0 29 0 29 -65 0 -57 -3 -69 -25
|
||||||
|
-90 -13 -14 -37 -25 -52 -26 -15 0 -93 -2 -173 -4 -326 -8 -516 -76 -963 -342
|
||||||
|
-201 -121 -228 -140 -366 -267 -282 -258 -415 -414 -510 -596 -109 -208 -129
|
||||||
|
-290 -176 -725 -35 -319 -37 -333 -72 -415 l-36 -85 23 -165 c12 -91 24 -179
|
||||||
|
27 -196 5 -29 3 -31 -20 -27 -36 7 -52 -26 -37 -72 16 -47 36 -62 62 -46 11 7
|
||||||
|
22 11 24 9 2 -3 31 -71 65 -154 33 -82 77 -175 96 -208 20 -32 108 -133 197
|
||||||
|
-224 145 -148 521 -509 646 -620 l48 -42 49 10 c26 6 56 18 65 27 17 15 18 15
|
||||||
|
18 -1 0 -9 -14 -30 -31 -45 l-30 -28 23 -15 c51 -34 167 -87 233 -107 41 -13
|
||||||
|
146 -30 255 -41 101 -11 200 -22 220 -26 88 -14 296 -57 317 -65 15 -6 47 -3
|
||||||
|
91 7 37 9 116 22 175 29 103 13 110 15 152 52 34 30 43 45 44 72 1 27 4 31 14
|
||||||
|
22 19 -15 28 -3 20 28 -6 24 -5 25 11 12 10 -8 24 -28 32 -43 l15 -29 20 25
|
||||||
|
c24 30 39 33 39 9 0 -15 2 -16 10 -3 5 8 10 27 10 43 0 29 14 37 24 12 8 -22
|
||||||
|
21 -18 34 10 10 21 18 25 57 25 41 0 45 -2 45 -25 0 -38 25 -41 68 -6 l39 30
|
||||||
|
23 -24 c14 -15 35 -25 52 -25 50 0 499 313 974 678 l44 34 1 -39 1 -38 16 48
|
||||||
|
c13 39 20 47 35 43 30 -7 45 3 79 53 37 53 135 158 160 172 17 9 17 6 -1 -38
|
||||||
|
-110 -278 -235 -496 -405 -706 -61 -75 -84 -112 -89 -141 -10 -59 -40 -86 -99
|
||||||
|
-86 -66 0 -112 -24 -105 -55 3 -21 1 -23 -14 -15 -25 14 -55 12 -116 -7 -61
|
||||||
|
-19 -67 -36 -27 -74 28 -26 54 -77 54 -106 -1 -13 -12 -5 -39 26 l-38 44 -34
|
||||||
|
-21 c-19 -11 -79 -66 -133 -122 -97 -98 -100 -103 -104 -153 l-4 -52 -53 3
|
||||||
|
c-71 5 -95 -17 -95 -88 0 -28 -5 -50 -10 -50 -6 0 -32 23 -59 50 -27 28 -51
|
||||||
|
50 -54 50 -24 0 -159 -33 -189 -46 -30 -13 -36 -21 -35 -43 3 -40 -26 -37
|
||||||
|
-123 9 -101 50 -165 64 -225 50 -35 -8 -61 -6 -127 10 -126 30 -301 36 -513
|
||||||
|
16 -98 -10 -183 -20 -187 -22 -4 -3 -8 13 -8 35 0 45 -2 46 -28 30 -15 -10
|
||||||
|
-36 -1 -123 50 -57 34 -156 88 -219 120 -102 52 -124 59 -190 64 -83 6 -167
|
||||||
|
37 -228 85 -64 51 -82 56 -208 62 -111 6 -128 9 -188 39 -108 53 -183 166
|
||||||
|
-220 330 -22 95 -40 129 -78 145 -27 12 -35 26 -75 137 -44 120 -80 206 -254
|
||||||
|
604 -81 185 -83 192 -87 283 l-4 92 25 0 c41 0 50 20 38 87 -28 152 -77 293
|
||||||
|
-161 463 l-57 115 13 75 c8 41 27 160 44 264 62 379 118 487 385 737 149 140
|
||||||
|
178 178 214 274 31 82 33 83 204 251 182 179 287 273 326 294 16 8 59 11 135
|
||||||
|
9 l110 -4 23 48 c28 58 94 125 148 152 28 14 63 20 118 21 88 2 93 5 189 93
|
||||||
|
64 59 97 75 99 49 1 -7 1 -33 -1 -57 -2 -48 -5 -48 68 2 58 39 169 90 322 147
|
||||||
|
141 53 138 53 229 -17z m981 -117 c164 -30 387 -122 545 -228 44 -29 123 -96
|
||||||
|
176 -148 92 -91 107 -113 351 -505 140 -225 259 -416 263 -424 15 -25 55 -385
|
||||||
|
62 -543 7 -177 11 -184 63 -118 18 23 34 39 36 37 2 -2 -3 -23 -11 -47 -32
|
||||||
|
-90 -73 -316 -76 -412 l-1 -43 -11 42 c-7 31 -6 79 5 175 8 73 14 134 12 136
|
||||||
|
-1 2 -12 -6 -24 -18 -27 -27 -45 -14 -52 38 -5 29 -21 52 -79 112 -51 52 -88
|
||||||
|
102 -117 158 -43 82 -44 83 -32 134 15 62 7 148 -17 191 -10 17 -43 51 -73 76
|
||||||
|
-30 24 -67 61 -81 82 -40 58 -89 217 -89 288 0 36 -4 61 -10 61 -6 0 -27 -8
|
||||||
|
-48 -19 -88 -44 -74 -50 -353 150 -270 193 -445 310 -599 402 -87 51 -102 57
|
||||||
|
-181 66 -189 21 -329 114 -329 218 0 59 37 88 123 96 36 3 79 2 96 -3 26 -7
|
||||||
|
32 -5 46 16 9 14 26 29 38 34 34 14 283 11 367 -4z m-860 -1131 c30 -8 98 -36
|
||||||
|
150 -62 78 -39 110 -63 180 -133 96 -96 148 -178 187 -295 25 -74 27 -93 27
|
||||||
|
-235 0 -141 -3 -162 -26 -227 -44 -122 -94 -201 -188 -295 -75 -74 -102 -93
|
||||||
|
-191 -136 -134 -65 -237 -87 -369 -79 -118 8 -191 27 -300 80 -70 34 -102 59
|
||||||
|
-181 137 -81 81 -102 109 -142 190 -59 121 -77 197 -77 336 0 214 63 366 215
|
||||||
|
519 69 70 109 100 170 132 147 75 232 94 390 87 55 -2 125 -11 155 -19z
|
||||||
|
m-1422 -1571 c32 -5 32 -5 32 -63 l0 -59 -44 5 c-47 6 -86 -9 -86 -32 0 -10
|
||||||
|
10 -15 30 -15 l30 0 0 -60 0 -60 -30 0 -30 0 0 -90 0 -90 30 0 30 0 0 -60 0
|
||||||
|
-60 -130 0 -130 0 0 60 c0 47 3 60 15 60 12 0 15 17 15 90 0 73 -3 90 -15 90
|
||||||
|
-12 0 -15 13 -15 60 0 45 4 60 14 60 8 0 17 15 21 37 22 119 93 153 263 127z
|
||||||
|
m1492 -109 c0 -58 4 -105 8 -105 5 0 17 9 27 20 36 40 110 45 173 11 39 -21
|
||||||
|
64 -94 65 -189 0 -145 -41 -210 -142 -220 -42 -4 -52 -1 -83 27 -43 38 -48 38
|
||||||
|
-48 6 l0 -25 -100 0 -100 0 0 60 c0 53 2 60 20 60 19 0 20 7 20 171 0 162 -1
|
||||||
|
171 -20 176 -17 5 -20 14 -20 59 l0 54 100 0 100 0 0 -105z m970 -125 c0 -223
|
||||||
|
1 -230 20 -230 18 0 20 -7 20 -60 l0 -60 -120 0 -120 0 0 60 c0 53 2 60 20 60
|
||||||
|
19 0 20 7 20 171 0 162 -1 171 -20 176 -17 5 -20 14 -20 59 l0 54 100 0 100 0
|
||||||
|
0 -230z m270 0 c0 -198 2 -230 15 -230 12 0 15 -13 15 -60 l0 -60 -115 0 -115
|
||||||
|
0 0 60 c0 47 3 60 15 60 13 0 15 26 15 175 0 149 -2 175 -15 175 -12 0 -15 13
|
||||||
|
-15 55 l0 55 100 0 100 0 0 -230z m-1580 115 l0 -45 55 0 55 0 0 -60 0 -60
|
||||||
|
-55 0 -55 0 0 -64 c0 -36 4 -76 10 -90 8 -23 15 -26 55 -26 l45 0 0 -54 0 -54
|
||||||
|
-50 -11 c-106 -23 -175 -6 -210 51 -17 27 -20 50 -20 136 0 95 -2 104 -20 109
|
||||||
|
-17 5 -20 14 -20 64 0 44 4 59 14 59 24 0 46 29 46 61 l0 29 75 0 75 0 0 -45z
|
||||||
|
m-826 -60 c34 -15 76 -56 97 -95 7 -14 13 -59 13 -100 0 -97 -24 -148 -91
|
||||||
|
-187 -42 -25 -58 -28 -133 -28 -97 0 -133 15 -183 77 -26 32 -31 48 -35 111
|
||||||
|
-9 141 40 212 161 237 49 10 128 3 171 -15z m480 0 c34 -15 76 -56 97 -95 7
|
||||||
|
-14 13 -59 13 -100 1 -96 -27 -152 -94 -190 -38 -21 -58 -25 -130 -25 -97 0
|
||||||
|
-133 15 -183 77 -26 32 -31 48 -35 111 -9 141 40 212 161 237 49 10 128 3 171
|
||||||
|
-15z m1315 -3 c62 -30 75 -60 79 -177 3 -81 7 -105 18 -105 10 0 14 -16 14
|
||||||
|
-60 l0 -60 -95 0 c-95 0 -95 0 -95 25 0 14 -4 25 -10 25 -5 0 -10 -4 -10 -9 0
|
||||||
|
-17 -67 -51 -99 -51 -43 0 -97 24 -110 48 -14 27 -14 94 1 126 14 32 99 76
|
||||||
|
147 77 20 1 47 4 61 8 l24 7 -23 23 c-22 22 -29 23 -92 17 -37 -3 -79 -10 -93
|
||||||
|
-16 l-26 -10 0 65 c0 35 5 67 11 71 18 11 151 22 209 17 30 -3 70 -12 89 -21z
|
||||||
|
m-2290 -534 c6 -13 34 -88 61 -167 38 -110 47 -147 37 -153 -19 -12 -47 -9
|
||||||
|
-47 5 -1 32 -16 38 -55 22 -28 -12 -40 -13 -49 -5 -14 14 26 50 55 50 23 0 23
|
||||||
|
19 0 85 -14 39 -19 46 -24 30 -57 -191 -58 -195 -78 -195 -11 0 -22 6 -25 14
|
||||||
|
-3 8 12 70 34 138 22 68 43 140 46 161 8 42 27 48 45 15z m529 -149 c2 -105
|
||||||
|
-1 -161 -9 -176 -13 -23 -29 -31 -29 -13 0 5 -21 44 -47 87 l-48 78 -3 -76
|
||||||
|
c-2 -69 -5 -77 -24 -82 -12 -4 -25 -4 -30 -1 -12 8 -10 331 2 339 6 4 10 -5
|
||||||
|
10 -19 0 -16 6 -26 15 -26 8 0 15 -5 15 -11 0 -11 75 -125 88 -133 5 -3 7 42
|
||||||
|
4 99 l-5 104 29 -8 29 -7 3 -155z m352 157 c0 -8 4 -16 8 -18 13 -5 105 -287
|
||||||
|
98 -303 -9 -25 -45 -18 -52 11 -5 18 -11 23 -23 19 -42 -17 -71 -23 -76 -14
|
||||||
|
-10 14 5 30 41 45 37 16 37 18 9 100 -8 24 -15 33 -18 24 -3 -8 -18 -55 -34
|
||||||
|
-105 -21 -66 -33 -91 -47 -93 -10 -2 -22 0 -27 5 -4 4 12 71 36 148 24 77 46
|
||||||
|
152 50 168 5 28 35 39 35 13z m388 1 c8 -7 12 -46 12 -134 l0 -125 28 6 c74
|
||||||
|
19 79 19 85 -4 5 -18 -2 -25 -36 -41 -23 -10 -51 -19 -62 -19 -12 0 -26 -5
|
||||||
|
-31 -10 -6 -6 -18 -8 -27 -4 -15 5 -17 26 -17 173 0 153 2 168 18 168 9 0 23
|
||||||
|
-4 30 -10z m399 -52 l31 -66 27 66 c28 65 37 73 64 56 13 -8 9 -24 -24 -98
|
||||||
|
-32 -71 -40 -103 -43 -166 -4 -73 -6 -78 -26 -75 -19 3 -22 11 -27 83 -6 77
|
||||||
|
-32 159 -65 211 -19 28 -12 54 14 54 13 0 28 -19 49 -65z m769 -3 l31 -63 28
|
||||||
|
66 c28 65 37 73 65 56 12 -8 7 -25 -28 -106 -36 -83 -42 -106 -42 -166 0 -67
|
||||||
|
-1 -70 -22 -67 -21 3 -23 10 -29 83 -4 64 -13 96 -42 160 -21 43 -35 85 -32
|
||||||
|
93 11 29 41 5 71 -56z m-306 43 c11 -14 7 -22 -29 -59 l-42 -42 51 -43 c27
|
||||||
|
-23 50 -50 50 -59 0 -19 -98 -122 -116 -122 -6 0 -18 7 -25 16 -12 14 -7 21
|
||||||
|
34 56 26 22 47 43 47 47 0 4 -22 24 -50 45 -64 49 -64 68 0 129 55 52 61 54
|
||||||
|
80 32z m770 0 c11 -14 7 -23 -29 -59 l-42 -43 50 -42 c28 -24 51 -50 51 -60 0
|
||||||
|
-9 -24 -41 -54 -70 -42 -42 -58 -52 -75 -46 -32 10 -25 30 24 72 l46 38 -56
|
||||||
|
52 c-64 60 -64 62 9 131 51 47 58 49 76 27z"/>
|
||||||
|
<path d="M560 1975 c0 -3 9 -23 20 -45 11 -22 20 -49 20 -60 0 -28 17 -61 44
|
||||||
|
-82 36 -30 45 -21 22 25 -11 23 -32 66 -44 95 -13 29 -32 57 -43 62 -10 6 -19
|
||||||
|
8 -19 5z"/>
|
||||||
|
<path d="M490 1955 c-10 -12 -6 -22 24 -60 21 -25 39 -45 41 -45 8 0 -32 114
|
||||||
|
-41 117 -6 2 -17 -3 -24 -12z"/>
|
||||||
|
<path d="M3048 3630 c-87 -26 -138 -93 -138 -180 0 -106 79 -183 185 -182 82
|
||||||
|
1 138 38 170 114 41 99 -18 218 -123 248 -42 11 -56 11 -94 0z"/>
|
||||||
|
<path d="M2996 2108 c-18 -26 -21 -109 -6 -139 7 -12 21 -19 40 -19 38 0 50
|
||||||
|
23 50 94 0 58 -16 86 -50 86 -10 0 -26 -10 -34 -22z"/>
|
||||||
|
<path d="M1670 2115 c-17 -20 -24 -84 -13 -125 7 -29 14 -36 38 -38 19 -3 33
|
||||||
|
2 42 14 19 26 17 129 -3 148 -19 20 -48 20 -64 1z"/>
|
||||||
|
<path d="M2150 2115 c-17 -20 -24 -84 -13 -125 7 -28 15 -36 37 -38 44 -5 56
|
||||||
|
13 56 84 0 44 -5 67 -16 78 -19 20 -48 20 -64 1z"/>
|
||||||
|
<path d="M3472 1994 c-27 -19 -28 -40 -3 -53 24 -13 48 4 57 42 5 22 3 27 -13
|
||||||
|
27 -10 0 -29 -7 -41 -16z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.4 KiB |
3
app/src/assets/menu.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="20" height="12" viewBox="0 0 20 12" fill="#FFF" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M9 2L19 2C19.2652 2 19.5196 1.89464 19.7071 1.70711C19.8946 1.51957 20 1.26522 20 1C20 0.734784 19.8946 0.480429 19.7071 0.292892C19.5196 0.105356 19.2652 0 19 0L9 0C8.73478 0 8.48043 0.105356 8.29289 0.292892C8.10536 0.480429 8 0.734784 8 1C8 1.26522 8.10536 1.51957 8.29289 1.70711C8.48043 1.89464 8.73478 2 9 2ZM19 10L1 10C0.734784 10 0.480429 10.1054 0.292892 10.2929C0.105356 10.4804 0 10.7348 0 11C0 11.2652 0.105356 11.5196 0.292892 11.7071C0.480429 11.8946 0.734784 12 1 12L19 12C19.2652 12 19.5196 11.8946 19.7071 11.7071C19.8946 11.5196 20 11.2652 20 11C20 10.7348 19.8946 10.4804 19.7071 10.2929C19.5196 10.1054 19.2652 10 19 10V10ZM1 7L19 7C19.2652 7 19.5196 6.89464 19.7071 6.70711C19.8946 6.51957 20 6.26522 20 6C20 5.73478 19.8946 5.48043 19.7071 5.29289C19.5196 5.10536 19.2652 5 19 5L1 5C0.734784 5 0.480429 5.10536 0.292892 5.29289C0.105356 5.48043 0 5.73478 0 6C0 6.26522 0.105356 6.51957 0.292892 6.70711C0.480429 6.89464 0.734784 7 1 7Z" fill="#FFFFFF"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/src/assets/mobile.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/src/assets/tech/css.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
app/src/assets/tech/docker.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
app/src/assets/tech/figma.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
app/src/assets/tech/git.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
app/src/assets/tech/html.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
app/src/assets/tech/javascript.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
app/src/assets/tech/mongodb.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
app/src/assets/tech/nodejs.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
app/src/assets/tech/reactjs.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
app/src/assets/tech/redux.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
app/src/assets/tech/tailwind.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
11
app/src/assets/tech/threejs.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg fill="none" stroke-linecap="square" stroke-miterlimit="10" version="1.1" viewBox="0 0 226.77 226.77" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g transform="translate(8.964 4.2527)" fill-rule="evenodd" stroke="#000" stroke-linecap="butt" stroke-linejoin="round" stroke-width="4">
|
||||||
|
<path d="m63.02 200.61-43.213-174.94 173.23 49.874z"/>
|
||||||
|
<path d="m106.39 50.612 21.591 87.496-86.567-24.945z"/>
|
||||||
|
<path d="m84.91 125.03-10.724-43.465 43.008 12.346z"/>
|
||||||
|
<path d="m63.458 38.153 10.724 43.465-43.008-12.346z"/>
|
||||||
|
<path d="m149.47 62.93 10.724 43.465-43.008-12.346z"/>
|
||||||
|
<path d="m84.915 125.06 10.724 43.465-43.008-12.346z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 677 B |
BIN
app/src/assets/tech/typescript.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
app/src/assets/tripguide.png
Normal file
After Width: | Height: | Size: 3.3 MiB |