forked from jaildesigner-jailgames/jaildoctors_dilemma
Añadido el objeto resource a todas las secciones
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 690 B |
@@ -1,9 +1,10 @@
|
|||||||
#include "credits.h"
|
#include "credits.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Credits::Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
|
Credits::Credits(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options)
|
||||||
{
|
{
|
||||||
// Copia la dirección de los objetos
|
// Copia la dirección de los objetos
|
||||||
|
this->resource = resource;
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
this->screen = screen;
|
this->screen = screen;
|
||||||
this->asset = asset;
|
this->asset = asset;
|
||||||
@@ -12,7 +13,7 @@ Credits::Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t
|
|||||||
// Reserva memoria para los punteros
|
// Reserva memoria para los punteros
|
||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
||||||
texture = new Texture(renderer, asset->get("shine.png"));
|
texture = resource->getTexture("shine.png");
|
||||||
sprite = new AnimatedSprite(texture, renderer, asset->get("shine.ani"));
|
sprite = new AnimatedSprite(texture, renderer, asset->get("shine.ani"));
|
||||||
|
|
||||||
// Inicializa variables
|
// Inicializa variables
|
||||||
@@ -82,8 +83,6 @@ Credits::~Credits()
|
|||||||
{
|
{
|
||||||
delete eventHandler;
|
delete eventHandler;
|
||||||
delete text;
|
delete text;
|
||||||
texture->unload();
|
|
||||||
delete texture;
|
|
||||||
delete sprite;
|
delete sprite;
|
||||||
SDL_DestroyTexture(textTexture);
|
SDL_DestroyTexture(textTexture);
|
||||||
SDL_DestroyTexture(coverTexture);
|
SDL_DestroyTexture(coverTexture);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "common/animatedsprite.h"
|
#include "common/animatedsprite.h"
|
||||||
#include "common/asset.h"
|
#include "common/asset.h"
|
||||||
#include "common/jail_audio.h"
|
#include "common/jail_audio.h"
|
||||||
|
#include "common/resource.h"
|
||||||
#include "common/screen.h"
|
#include "common/screen.h"
|
||||||
#include "common/sprite.h"
|
#include "common/sprite.h"
|
||||||
#include "common/text.h"
|
#include "common/text.h"
|
||||||
@@ -27,6 +28,7 @@ private:
|
|||||||
// Objetos y punteros
|
// Objetos y punteros
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Screen *screen; // Objeto encargado de dibujar en pantalla
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
|
Resource *resource; // Objeto con los recursos
|
||||||
Asset *asset; // Objeto con los ficheros de recursos
|
Asset *asset; // Objeto con los ficheros de recursos
|
||||||
SDL_Event *eventHandler; // Manejador de eventos
|
SDL_Event *eventHandler; // Manejador de eventos
|
||||||
Text *text; // Objeto para escribir texto en pantalla
|
Text *text; // Objeto para escribir texto en pantalla
|
||||||
@@ -62,7 +64,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
|
Credits(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Credits();
|
~Credits();
|
||||||
|
|||||||
@@ -180,7 +180,44 @@ bool Director::saveConfig()
|
|||||||
// Carga los recursos
|
// Carga los recursos
|
||||||
void Director::loadResources(section_t section)
|
void Director::loadResources(section_t section)
|
||||||
{
|
{
|
||||||
if (section.name == SECTION_PROG_GAME || section.name == SECTION_PROG_DEMO)
|
if (section.name == SECTION_PROG_LOGO)
|
||||||
|
{
|
||||||
|
std::vector<std::string> textureList;
|
||||||
|
textureList.push_back("jailgames.png");
|
||||||
|
textureList.push_back("since_1998.png");
|
||||||
|
|
||||||
|
resource->loadTextures(textureList);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (section.name == SECTION_PROG_INTRO)
|
||||||
|
{
|
||||||
|
std::vector<std::string> textureList;
|
||||||
|
textureList.push_back("loading_screen_bn.png");
|
||||||
|
textureList.push_back("loading_screen_color.png");
|
||||||
|
textureList.push_back("loading_screen_bn_zxarne.png");
|
||||||
|
textureList.push_back("loading_screen_color_zxarne.png");
|
||||||
|
|
||||||
|
resource->loadTextures(textureList);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (section.name == SECTION_PROG_TITLE)
|
||||||
|
{
|
||||||
|
std::vector<std::string> textureList;
|
||||||
|
textureList.push_back("loading_screen_color.png");
|
||||||
|
textureList.push_back("loading_screen_color_zxarne.png");
|
||||||
|
|
||||||
|
resource->loadTextures(textureList);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (section.name == SECTION_PROG_CREDITS)
|
||||||
|
{
|
||||||
|
std::vector<std::string> textureList;
|
||||||
|
textureList.push_back("shine.png");
|
||||||
|
|
||||||
|
resource->loadTextures(textureList);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (section.name == SECTION_PROG_GAME || section.name == SECTION_PROG_DEMO)
|
||||||
{
|
{
|
||||||
std::vector<std::string> textureList;
|
std::vector<std::string> textureList;
|
||||||
|
|
||||||
@@ -703,7 +740,6 @@ bool Director::setFileList()
|
|||||||
// Logo
|
// Logo
|
||||||
asset->add("/data/logo/jailgames.png", t_bitmap);
|
asset->add("/data/logo/jailgames.png", t_bitmap);
|
||||||
asset->add("/data/logo/since_1998.png", t_bitmap);
|
asset->add("/data/logo/since_1998.png", t_bitmap);
|
||||||
asset->add("/data/logo/seagull.png", t_bitmap);
|
|
||||||
|
|
||||||
// Intro
|
// Intro
|
||||||
asset->add("/data/title/loading_screen_bn.png", t_bitmap);
|
asset->add("/data/title/loading_screen_bn.png", t_bitmap);
|
||||||
@@ -739,17 +775,21 @@ void Director::setSection(section_t section)
|
|||||||
// Ejecuta la seccion de juego con el logo
|
// Ejecuta la seccion de juego con el logo
|
||||||
void Director::runLogo()
|
void Director::runLogo()
|
||||||
{
|
{
|
||||||
logo = new Logo(renderer, screen, asset, options, section.subsection);
|
loadResources(section);
|
||||||
|
logo = new Logo(renderer, screen, resource, asset, options, section.subsection);
|
||||||
setSection(logo->run());
|
setSection(logo->run());
|
||||||
delete logo;
|
delete logo;
|
||||||
|
resource->freeTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta la seccion de juego de la introducción
|
// Ejecuta la seccion de juego de la introducción
|
||||||
void Director::runIntro()
|
void Director::runIntro()
|
||||||
{
|
{
|
||||||
intro = new Intro(renderer, screen, asset, options);
|
loadResources(section);
|
||||||
|
intro = new Intro(renderer, screen, resource, asset, options);
|
||||||
setSection(intro->run());
|
setSection(intro->run());
|
||||||
delete intro;
|
delete intro;
|
||||||
|
resource->freeTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta la seccion de juego con el titulo y los menus
|
// Ejecuta la seccion de juego con el titulo y los menus
|
||||||
@@ -759,17 +799,21 @@ void Director::runTitle()
|
|||||||
{
|
{
|
||||||
JA_PlayMusic(music);
|
JA_PlayMusic(music);
|
||||||
}
|
}
|
||||||
title = new Title(renderer, screen, asset, options);
|
loadResources(section);
|
||||||
|
title = new Title(renderer, screen, resource, asset, options);
|
||||||
setSection(title->run());
|
setSection(title->run());
|
||||||
delete title;
|
delete title;
|
||||||
|
resource->freeTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta la seccion de los creditos del juego
|
// Ejecuta la seccion de los creditos del juego
|
||||||
void Director::runCredits()
|
void Director::runCredits()
|
||||||
{
|
{
|
||||||
credits = new Credits(renderer, screen, asset, options);
|
loadResources(section);
|
||||||
|
credits = new Credits(renderer, screen, resource, asset, options);
|
||||||
setSection(credits->run());
|
setSection(credits->run());
|
||||||
delete credits;
|
delete credits;
|
||||||
|
resource->freeTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta la seccion de la demo, donde se ven pantallas del juego
|
// Ejecuta la seccion de la demo, donde se ven pantallas del juego
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
#include "intro.h"
|
#include "intro.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
|
Intro::Intro(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options)
|
||||||
{
|
{
|
||||||
// Copia la dirección de los objetos
|
// Copia la dirección de los objetos
|
||||||
|
this->resource = resource;
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
this->screen = screen;
|
this->screen = screen;
|
||||||
this->asset = asset;
|
this->asset = asset;
|
||||||
@@ -13,13 +14,13 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *op
|
|||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
if (options->palette == p_zxspectrum)
|
if (options->palette == p_zxspectrum)
|
||||||
{
|
{
|
||||||
loadingScreenTexture1 = new Texture(renderer, asset->get("loading_screen_bn.png"));
|
loadingScreenTexture1 =resource->getTexture("loading_screen_bn.png");
|
||||||
loadingScreenTexture2 = new Texture(renderer, asset->get("loading_screen_color.png"));
|
loadingScreenTexture2 =resource->getTexture("loading_screen_color.png");
|
||||||
}
|
}
|
||||||
else if (options->palette == p_zxarne)
|
else if (options->palette == p_zxarne)
|
||||||
{
|
{
|
||||||
loadingScreenTexture1 = new Texture(renderer, asset->get("loading_screen_bn_zxarne.png"));
|
loadingScreenTexture1 =resource->getTexture("loading_screen_bn_zxarne.png");
|
||||||
loadingScreenTexture2 = new Texture(renderer, asset->get("loading_screen_color_zxarne.png"));
|
loadingScreenTexture2 =resource->getTexture("loading_screen_color_zxarne.png");
|
||||||
}
|
}
|
||||||
sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer);
|
sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer);
|
||||||
sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, renderer);
|
sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, renderer);
|
||||||
@@ -72,8 +73,6 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *op
|
|||||||
// Destructor
|
// Destructor
|
||||||
Intro::~Intro()
|
Intro::~Intro()
|
||||||
{
|
{
|
||||||
delete loadingScreenTexture1;
|
|
||||||
delete loadingScreenTexture2;
|
|
||||||
delete sprite1;
|
delete sprite1;
|
||||||
delete sprite2;
|
delete sprite2;
|
||||||
delete eventHandler;
|
delete eventHandler;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "common/asset.h"
|
#include "common/asset.h"
|
||||||
#include "common/jail_audio.h"
|
#include "common/jail_audio.h"
|
||||||
|
#include "common/resource.h"
|
||||||
#include "common/screen.h"
|
#include "common/screen.h"
|
||||||
#include "common/sprite.h"
|
#include "common/sprite.h"
|
||||||
#include "common/utils.h"
|
#include "common/utils.h"
|
||||||
@@ -21,6 +22,7 @@ private:
|
|||||||
// Objetos y punteros
|
// Objetos y punteros
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Screen *screen; // Objeto encargado de dibujar en pantalla
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
|
Resource *resource; // Objeto con los recursos
|
||||||
Asset *asset; // Objeto con los ficheros de recursos
|
Asset *asset; // Objeto con los ficheros de recursos
|
||||||
Texture *loadingScreenTexture1; // Textura con la pantalla de carga en blanco y negro
|
Texture *loadingScreenTexture1; // Textura con la pantalla de carga en blanco y negro
|
||||||
Texture *loadingScreenTexture2; // Textura con la pantalla de carga en color
|
Texture *loadingScreenTexture2; // Textura con la pantalla de carga en color
|
||||||
@@ -64,7 +66,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
|
Intro(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Intro();
|
~Intro();
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
#include "logo.h"
|
#include "logo.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, int subsection)
|
Logo::Logo(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, int subsection)
|
||||||
{
|
{
|
||||||
// Copia la dirección de los objetos
|
// Copia la dirección de los objetos
|
||||||
|
this->resource = resource;
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
this->screen = screen;
|
this->screen = screen;
|
||||||
this->asset = asset;
|
this->asset = asset;
|
||||||
@@ -11,8 +12,8 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti
|
|||||||
|
|
||||||
// Reserva memoria para los punteros
|
// Reserva memoria para los punteros
|
||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
texture = new Texture(renderer, asset->get("jailgames.png"));
|
texture = resource->getTexture("jailgames.png");
|
||||||
texture2 = new Texture(renderer, asset->get("since_1998.png"));
|
texture2 = resource->getTexture("since_1998.png");
|
||||||
sprite2 = new Sprite((256 - texture2->getWidth()) / 2, 83 + texture->getHeight() + 5, texture2->getWidth(), texture2->getHeight(), texture2, renderer);
|
sprite2 = new Sprite((256 - texture2->getWidth()) / 2, 83 + texture->getHeight() + 5, texture2->getWidth(), texture2->getHeight(), texture2, renderer);
|
||||||
sprite2->setSpriteClip(0, 0, texture2->getWidth(), texture2->getHeight());
|
sprite2->setSpriteClip(0, 0, texture2->getWidth(), texture2->getHeight());
|
||||||
texture2->setColor(0, 0, 0);
|
texture2->setColor(0, 0, 0);
|
||||||
@@ -55,9 +56,6 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti
|
|||||||
// Destructor
|
// Destructor
|
||||||
Logo::~Logo()
|
Logo::~Logo()
|
||||||
{
|
{
|
||||||
delete texture;
|
|
||||||
delete texture2;
|
|
||||||
|
|
||||||
for (auto s : sprite)
|
for (auto s : sprite)
|
||||||
{
|
{
|
||||||
delete s;
|
delete s;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "common/asset.h"
|
#include "common/asset.h"
|
||||||
#include "common/jail_audio.h"
|
#include "common/jail_audio.h"
|
||||||
|
#include "common/resource.h"
|
||||||
#include "common/screen.h"
|
#include "common/screen.h"
|
||||||
#include "common/sprite.h"
|
#include "common/sprite.h"
|
||||||
#include "common/utils.h"
|
#include "common/utils.h"
|
||||||
@@ -18,6 +19,7 @@ private:
|
|||||||
// Objetos y punteros
|
// Objetos y punteros
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Screen *screen; // Objeto encargado de dibujar en pantalla
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
|
Resource *resource; // Objeto con los recursos
|
||||||
Asset *asset; // Objeto con los ficheros de recursos
|
Asset *asset; // Objeto con los ficheros de recursos
|
||||||
Texture *texture; // Textura con los graficos "JAILGAMES"
|
Texture *texture; // Textura con los graficos "JAILGAMES"
|
||||||
Texture *texture2; // Textura con los graficos "Since 1998"
|
Texture *texture2; // Textura con los graficos "Since 1998"
|
||||||
@@ -53,7 +55,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, int subsection);
|
Logo(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, int subsection);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Logo();
|
~Logo();
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
#include "title.h"
|
#include "title.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
|
Title::Title(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options)
|
||||||
{
|
{
|
||||||
// Copia la dirección de los objetos
|
// Copia la dirección de los objetos
|
||||||
|
this->resource = resource;
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
this->screen = screen;
|
this->screen = screen;
|
||||||
this->asset = asset;
|
this->asset = asset;
|
||||||
@@ -13,11 +14,11 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *op
|
|||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
if (options->palette == p_zxspectrum)
|
if (options->palette == p_zxspectrum)
|
||||||
{
|
{
|
||||||
texture = new Texture(renderer, asset->get("loading_screen_color.png"));
|
texture =resource->getTexture("loading_screen_color.png");
|
||||||
}
|
}
|
||||||
else if (options->palette == p_zxarne)
|
else if (options->palette == p_zxarne)
|
||||||
{
|
{
|
||||||
texture = new Texture(renderer, asset->get("loading_screen_color_zxarne.png"));
|
texture =resource->getTexture("loading_screen_color_zxarne.png");
|
||||||
}
|
}
|
||||||
sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer);
|
sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer);
|
||||||
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
||||||
@@ -48,7 +49,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *op
|
|||||||
Title::~Title()
|
Title::~Title()
|
||||||
{
|
{
|
||||||
delete eventHandler;
|
delete eventHandler;
|
||||||
delete texture;
|
|
||||||
delete sprite;
|
delete sprite;
|
||||||
delete text;
|
delete text;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "common/asset.h"
|
#include "common/asset.h"
|
||||||
#include "common/jail_audio.h"
|
#include "common/jail_audio.h"
|
||||||
|
#include "common/resource.h"
|
||||||
#include "common/screen.h"
|
#include "common/screen.h"
|
||||||
#include "common/sprite.h"
|
#include "common/sprite.h"
|
||||||
#include "common/text.h"
|
#include "common/text.h"
|
||||||
@@ -26,6 +27,7 @@ private:
|
|||||||
// Objetos y punteros
|
// Objetos y punteros
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Screen *screen; // Objeto encargado de dibujar en pantalla
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
|
Resource *resource; // Objeto con los recursos
|
||||||
Asset *asset; // Objeto con los ficheros de recursos
|
Asset *asset; // Objeto con los ficheros de recursos
|
||||||
SDL_Event *eventHandler; // Manejador de eventos
|
SDL_Event *eventHandler; // Manejador de eventos
|
||||||
Texture *texture; // Textura con los graficos
|
Texture *texture; // Textura con los graficos
|
||||||
@@ -64,7 +66,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
|
Title(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Title();
|
~Title();
|
||||||
|
|||||||
Reference in New Issue
Block a user