lugares e obxetos na base de datos
This commit is contained in:
parent
991c64c544
commit
497339ab30
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"tag": "0",
|
|
||||||
"descripcion": "Estás en un pasillo muy oscuro.\nEscuchas un sonido de alarma en la lejanía.\nApenas puedes ver una luz pulsante al norte.\nEn el suelo encuntras una palanca.\n\n---\nSalidas: norte",
|
|
||||||
"salidas": {
|
|
||||||
"norte": "1",
|
|
||||||
"este": "",
|
|
||||||
"sur": "",
|
|
||||||
"oeste": ""
|
|
||||||
},
|
|
||||||
"objetos": ["o0"]
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"tag": "1",
|
|
||||||
"descripcion": "La única iluminación de esta sala es una pequeña luz pulsante en un panel. Parece el puente de mando. Un humo denso llena la sala irritando tus pulmones. Entre el humo ves una puerta al este tras la cual parece que suena una alarma.\n\n---\nSalidas: este, sur",
|
|
||||||
"salidas": {
|
|
||||||
"norte": "",
|
|
||||||
"este": "2",
|
|
||||||
"sur": "0",
|
|
||||||
"oeste": ""
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"tag": "2",
|
|
||||||
"descripcion": "De aquí surje el fuerte sonido de alarma que taladra tus tímpanos. Alrededor de la sala ves las vainas criogénicas en las que has estado durmiendo durante el viaje. Todas están vacías!\n\n---\nSalidas: oeste",
|
|
||||||
"salidas": {
|
|
||||||
"norte": "",
|
|
||||||
"este": "",
|
|
||||||
"sur": "",
|
|
||||||
"oeste": "1"
|
|
||||||
}
|
|
||||||
}
|
|
0
migrations/.keep
Normal file
0
migrations/.keep
Normal file
1
migrations/2022-09-12-114033_create_locations/down.sql
Normal file
1
migrations/2022-09-12-114033_create_locations/down.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
DROP TABLE location
|
12
migrations/2022-09-12-114033_create_locations/up.sql
Normal file
12
migrations/2022-09-12-114033_create_locations/up.sql
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
CREATE TABLE location (
|
||||||
|
tag varchar(100) NOT NULL,
|
||||||
|
nombre varchar(100),
|
||||||
|
descripcion varchar(2048) NOT NULL,
|
||||||
|
salida_norte varchar(100),
|
||||||
|
salida_sur varchar(100),
|
||||||
|
salida_este varchar(100),
|
||||||
|
salida_oeste varchar(100),
|
||||||
|
salida_arriba varchar(100),
|
||||||
|
salida_abajo varchar(100),
|
||||||
|
CONSTRAINT PK_Location PRIMARY KEY (tag)
|
||||||
|
)
|
1
migrations/2022-09-12-114839_populate_locations/down.sql
Normal file
1
migrations/2022-09-12-114839_populate_locations/down.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
TRUNCATE TABLE location;
|
6
migrations/2022-09-12-114839_populate_locations/up.sql
Normal file
6
migrations/2022-09-12-114839_populate_locations/up.sql
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
INSERT INTO location
|
||||||
|
(tag, nombre, descripcion, salida_norte, salida_sur, salida_este, salida_oeste, salida_arriba, salida_abajo)
|
||||||
|
VALUES
|
||||||
|
('0', 'Pasillo', 'Estás en un pasillo muy oscuro.\nEscuchas un sonido de alarma en la lejanía.\nApenas puedes ver una luz pulsante al norte.\nEn el suelo encuntras una palanca.\n\n---\nSalidas: norte', "1", NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('1', 'Puente', 'La única iluminación de esta sala es una pequeña luz pulsante en un panel. Parece el puente de mando. Un humo denso llena la sala irritando tus pulmones. Entre el humo ves una puerta al este tras la cual parece que suena una alarma.\n\n---\nSalidas: este, sur', NULL, "0", "2", NULL, NULL, NULL),
|
||||||
|
('2', 'Vainas', 'De aquí surje el fuerte sonido de alarma que taladra tus tímpanos. Alrededor de la sala ves las vainas criogénicas en las que has estado durmiendo durante el viaje. Todas están vacías!\n\n---\nSalidas: oeste', NULL, NULL, NULL, "1", NULL, NULL);
|
1
migrations/2022-09-12-174911_create_objects/down.sql
Normal file
1
migrations/2022-09-12-174911_create_objects/down.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
DROP TABLE object
|
7
migrations/2022-09-12-174911_create_objects/up.sql
Normal file
7
migrations/2022-09-12-174911_create_objects/up.sql
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE object (
|
||||||
|
tag varchar(100) NOT NULL,
|
||||||
|
nombre varchar(100),
|
||||||
|
descripcion varchar(2048) NOT NULL,
|
||||||
|
location_tag varchar(100) NOT NULL,
|
||||||
|
CONSTRAINT PK_Object PRIMARY KEY (tag)
|
||||||
|
)
|
1
migrations/2022-09-12-175351_populate_object/down.sql
Normal file
1
migrations/2022-09-12-175351_populate_object/down.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
-- This file should undo anything in `up.sql`
|
5
migrations/2022-09-12-175351_populate_object/up.sql
Normal file
5
migrations/2022-09-12-175351_populate_object/up.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
INSERT INTO object
|
||||||
|
(tag, nombre, descripcion, location_tag)
|
||||||
|
VALUES
|
||||||
|
('o0', 'palanca', 'Trozo de metal, servirá como palanca', '0'),
|
||||||
|
('o1', 'calmantes', 'Calmantes, sirven para el dolor', '2');
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"tag": "o0",
|
|
||||||
"nombre": "palanca",
|
|
||||||
"descripcion": "Trozo de metal, servirá como palanca."
|
|
||||||
}
|
|
@ -2,6 +2,9 @@ pub mod rlib;
|
|||||||
pub mod rlocation;
|
pub mod rlocation;
|
||||||
pub mod player;
|
pub mod player;
|
||||||
pub mod objects;
|
pub mod objects;
|
||||||
|
pub mod schema;
|
||||||
|
pub mod models;
|
||||||
|
pub mod database;
|
||||||
|
|
||||||
use crate::player::Player;
|
use crate::player::Player;
|
||||||
|
|
||||||
|
@ -1,25 +1,32 @@
|
|||||||
use serde::Deserialize;
|
use crate::models::*;
|
||||||
use std::fs::File;
|
use diesel::prelude::*;
|
||||||
use std::io::Read;
|
use crate::database::establish_connection;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
#[allow(dead_code)] // evita os warnings de que non se le o campo
|
|
||||||
pub struct Object {
|
|
||||||
pub tag: String, // tamén é o nome do arquivo, mentras non se implementa bbdd
|
|
||||||
pub nombre: String,
|
|
||||||
pub descripcion: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
// get_object le o arquivo do obxeto e devolve o json
|
|
||||||
pub fn get_object(tag: String) -> Object {
|
|
||||||
let dir = "objects";
|
|
||||||
let path = format!("{}/{}.json", dir, tag);
|
|
||||||
|
|
||||||
let mut file = File::open(path).expect("Obxeto non atopado.");
|
|
||||||
let mut data = String::new();
|
|
||||||
file.read_to_string(&mut data).expect("Error durante a lectura do obxeto.");
|
|
||||||
|
|
||||||
let object: Object = serde_json::from_str(&data).expect("JSON was not well-formatted");
|
|
||||||
|
|
||||||
|
//get_object trae da base de datos un obxeto pola sua pegatina
|
||||||
|
pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
|
||||||
|
use crate::schema::object::dsl::*;
|
||||||
|
let conn = &mut establish_connection();
|
||||||
object
|
object
|
||||||
|
.filter(tag.eq(pegatina))
|
||||||
|
.first(conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get_objects trae da base de datos todos os obxetos de unha localización
|
||||||
|
pub fn get_objects(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
|
||||||
|
use crate::schema::object::dsl::*;
|
||||||
|
let conn = &mut establish_connection();
|
||||||
|
object
|
||||||
|
.filter(location_tag.eq(pegatina))
|
||||||
|
.get_results(conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
//get_object_here trae da base de datos o obxeto polo nome e a pegatina da sala actual
|
||||||
|
pub fn get_object_here(pegatina: String, nome: String) -> Result<RObject, diesel::result::Error> {
|
||||||
|
use crate::schema::object::dsl::*;
|
||||||
|
let conn = &mut establish_connection();
|
||||||
|
object
|
||||||
|
.filter(location_tag.eq(pegatina))
|
||||||
|
.filter(nombre.eq(nome))
|
||||||
|
.first(conn)
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,10 @@
|
|||||||
use crate::player::Player;
|
use crate::player::Player;
|
||||||
use crate::objects::get_object;
|
use crate::objects::get_object_here;
|
||||||
use serde::Deserialize;
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
use crate::models::*;
|
||||||
#[allow(dead_code)] // evita os warnings de que non se le o campo
|
use diesel::prelude::*;
|
||||||
pub struct Location {
|
use crate::database::establish_connection;
|
||||||
tag: String, // tamén é o nome do arquivo, mentras non se implementa bbdd
|
|
||||||
descripcion: String,
|
|
||||||
salidas: Salidas,
|
|
||||||
objetos: Vec<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
#[allow(dead_code)] // evita os warnings de que non se le o campo
|
|
||||||
pub struct Salidas {
|
|
||||||
norte: String,
|
|
||||||
este: String,
|
|
||||||
sur: String,
|
|
||||||
oeste: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn execute_look(player: &mut Player, nombre: &str) -> String {
|
pub fn execute_look(player: &mut Player, nombre: &str) -> String {
|
||||||
let output: String;
|
let output: String;
|
||||||
@ -29,21 +13,20 @@ pub fn execute_look(player: &mut Player, nombre: &str) -> String {
|
|||||||
|
|
||||||
if nombre == "sala" {
|
if nombre == "sala" {
|
||||||
if player_location.as_str() != "" {
|
if player_location.as_str() != "" {
|
||||||
output = String::from(location.descripcion);
|
output = String::from(location.unwrap().descripcion);
|
||||||
} else {
|
} else {
|
||||||
output = String::from("Navengado el ether!");
|
output = String::from("Navengado el ether!");
|
||||||
}
|
}
|
||||||
} else {
|
} else if nombre != "" {
|
||||||
// Recorre os obxetos da sala
|
// Mira o obxeto que ven en nombre
|
||||||
for o in location.objetos {
|
let objeto = get_object_here(player_location.to_string(), nombre.to_string());
|
||||||
let objeto = get_object(o);
|
if objeto.is_ok() {
|
||||||
if nombre == objeto.nombre {
|
output = String::from(objeto.unwrap().descripcion);
|
||||||
output = String::from(objeto.descripcion);
|
} else {
|
||||||
return output;
|
output = String::from("No encuentro lo que quieres mirar.");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
output = String::from("Qué quieres mirar?")
|
output = String::from("Qué quieres mirar?");
|
||||||
}
|
}
|
||||||
|
|
||||||
return output
|
return output
|
||||||
@ -55,21 +38,21 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
|
|||||||
if coord != "" {
|
if coord != "" {
|
||||||
let tag: String;
|
let tag: String;
|
||||||
let player_location = &player.location;
|
let player_location = &player.location;
|
||||||
let current_location = get_location(player_location.to_string());
|
let current_location = get_location(player_location.to_string()).unwrap();
|
||||||
|
|
||||||
match coord {
|
match coord {
|
||||||
"n" => tag = current_location.salidas.norte,
|
"n" => if current_location.salida_norte.is_some() { tag = current_location.salida_norte.unwrap() } else { tag = String::from("")},
|
||||||
"e" => tag = current_location.salidas.este,
|
"e" => if current_location.salida_este.is_some() { tag = current_location.salida_este.unwrap()} else { tag = String::from("")},
|
||||||
"s" => tag = current_location.salidas.sur,
|
"s" => if current_location.salida_sur.is_some() { tag = current_location.salida_sur.unwrap()} else { tag = String::from("")},
|
||||||
"o" => tag = current_location.salidas.oeste,
|
"o" => if current_location.salida_oeste.is_some() { tag = current_location.salida_oeste.unwrap()} else { tag = String::from("")},
|
||||||
"norte" => tag = current_location.salidas.norte,
|
"norte" => if current_location.salida_norte.is_some() { tag = current_location.salida_norte.unwrap()} else { tag = String::from("")},
|
||||||
"este" => tag = current_location.salidas.este,
|
"este" => if current_location.salida_este.is_some() { tag = current_location.salida_este.unwrap()} else { tag = String::from("")},
|
||||||
"sur" => tag = current_location.salidas.sur,
|
"sur" => if current_location.salida_sur.is_some() { tag = current_location.salida_sur.unwrap()} else { tag = String::from("")},
|
||||||
"oeste" => tag = current_location.salidas.oeste,
|
"oeste" => if current_location.salida_oeste.is_some() { tag = current_location.salida_oeste.unwrap()} else { tag = String::from("")},
|
||||||
_ => return String::from("No existe esa dirección.")
|
_ => return String::from("No existe esa dirección.")
|
||||||
};
|
};
|
||||||
if tag.as_str() != "" {
|
if tag.as_str() != "" {
|
||||||
let location = get_location(tag);
|
let location = get_location(tag).unwrap();
|
||||||
if location.tag == player.location {
|
if location.tag == player.location {
|
||||||
output = String::from("No te puedes acercar mucho más...");
|
output = String::from("No te puedes acercar mucho más...");
|
||||||
} else {
|
} else {
|
||||||
@ -79,6 +62,7 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
|
|||||||
} else {
|
} else {
|
||||||
output = String::from("No existe esa salida.");
|
output = String::from("No existe esa salida.");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
output = String::from("No entiendo a donde quieres ir. Debes elegir una coordenada correspondiente a las salidas de esta sala.");
|
output = String::from("No entiendo a donde quieres ir. Debes elegir una coordenada correspondiente a las salidas de esta sala.");
|
||||||
}
|
}
|
||||||
@ -86,16 +70,11 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
|
|||||||
return output.to_string();
|
return output.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_location le o arquivo de localización e devolve o json
|
// get_location busca na base de datos a localización polo seu tag
|
||||||
fn get_location(tag: String) -> Location {
|
pub fn get_location(pegatina: String) -> Result<RLocation, diesel::result::Error> {
|
||||||
let dir = "locations";
|
use crate::schema::location::dsl::*;
|
||||||
let path = format!("{}/{}.json", dir, tag);
|
let conn = &mut establish_connection();
|
||||||
|
|
||||||
let mut file = File::open(path).expect("Localización non atopada.");
|
|
||||||
let mut data = String::new();
|
|
||||||
file.read_to_string(&mut data).expect("Error durante a lectura da localización.");
|
|
||||||
|
|
||||||
let location: Location = serde_json::from_str(&data).expect("JSON was not well-formatted");
|
|
||||||
|
|
||||||
location
|
location
|
||||||
|
.filter(tag.eq(pegatina))
|
||||||
|
.first(conn)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user