mirror of
https://github.com/blupi-games/planetblupi
synced 2024-12-30 10:15:36 +01:00
Cosmetic: apply clang-format
This commit is contained in:
parent
914878634a
commit
1e8e8213a7
@ -2850,7 +2850,7 @@ CDecor::BlupiNextGoal (Sint32 rank)
|
|||||||
this->m_pSound->StopSound (true, rank);
|
this->m_pSound->StopSound (true, rank);
|
||||||
BlupiSound (rank, SOUND_TRAP, pos);
|
BlupiSound (rank, SOUND_TRAP, pos);
|
||||||
PutObject (cel, CHOBJECT, 96); // araignée piégée
|
PutObject (cel, CHOBJECT, 96); // araignée piégée
|
||||||
BlupiDelete (rank, SDL_TRUE); // supprime araignée
|
BlupiDelete (rank, SDL_TRUE); // supprime araignée
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2948,7 +2948,7 @@ CDecor::BlupiNextGoal (Sint32 rank)
|
|||||||
this->m_pSound->StopSound (true, rank);
|
this->m_pSound->StopSound (true, rank);
|
||||||
BlupiSound (rank, SOUND_TRAP, pos);
|
BlupiSound (rank, SOUND_TRAP, pos);
|
||||||
PutObject (cel, CHOBJECT, 97); // tracks piégé
|
PutObject (cel, CHOBJECT, 97); // tracks piégé
|
||||||
BlupiDelete (rank, SDL_TRUE); // supprime tracks
|
BlupiDelete (rank, SDL_TRUE); // supprime tracks
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3029,7 +3029,7 @@ CDecor::BlupiNextGoal (Sint32 rank)
|
|||||||
this->m_pSound->StopSound (true, rank);
|
this->m_pSound->StopSound (true, rank);
|
||||||
BlupiSound (rank, SOUND_TRAP, pos);
|
BlupiSound (rank, SOUND_TRAP, pos);
|
||||||
PutObject (cel, CHOBJECT, 98); // robot piégé
|
PutObject (cel, CHOBJECT, 98); // robot piégé
|
||||||
BlupiDelete (rank, SDL_TRUE); // supprime robot
|
BlupiDelete (rank, SDL_TRUE); // supprime robot
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3076,7 +3076,7 @@ CDecor::BlupiNextGoal (Sint32 rank)
|
|||||||
this->m_pSound->StopSound (true, rank);
|
this->m_pSound->StopSound (true, rank);
|
||||||
BlupiSound (rank, SOUND_TRAP, pos);
|
BlupiSound (rank, SOUND_TRAP, pos);
|
||||||
PutObject (cel, CHOBJECT, 114); // bombe piégée
|
PutObject (cel, CHOBJECT, 114); // bombe piégée
|
||||||
BlupiDelete (rank, SDL_TRUE); // supprime bombe
|
BlupiDelete (rank, SDL_TRUE); // supprime bombe
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3121,7 +3121,7 @@ CDecor::BlupiNextGoal (Sint32 rank)
|
|||||||
this->m_pSound->StopSound (true, rank);
|
this->m_pSound->StopSound (true, rank);
|
||||||
BlupiSound (rank, SOUND_TRAP, pos);
|
BlupiSound (rank, SOUND_TRAP, pos);
|
||||||
PutObject (cel, CHOBJECT, 19); // électro piégée
|
PutObject (cel, CHOBJECT, 19); // électro piégée
|
||||||
BlupiDelete (rank, SDL_TRUE); // supprime électro
|
BlupiDelete (rank, SDL_TRUE); // supprime électro
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ void
|
|||||||
CDecor::MapInitColors ()
|
CDecor::MapInitColors ()
|
||||||
{
|
{
|
||||||
// FIXME: add big-endian support
|
// FIXME: add big-endian support
|
||||||
const auto MapRGB = [](Uint8 r, Uint8 g, Uint8 b) {
|
const auto MapRGB = [] (Uint8 r, Uint8 g, Uint8 b) {
|
||||||
return r << 16 | g << 8 | b << 0;
|
return r << 16 | g << 8 | b << 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -515,7 +515,7 @@ CDecor::GenerateMap ()
|
|||||||
Point pos, cel;
|
Point pos, cel;
|
||||||
Sint32 dx, rank, i;
|
Sint32 dx, rank, i;
|
||||||
|
|
||||||
auto DrawMap = [&]() -> bool {
|
auto DrawMap = [&] () -> bool {
|
||||||
if (!m_SurfaceMap)
|
if (!m_SurfaceMap)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1915,9 +1915,8 @@ CDecor::CelOkForAction (
|
|||||||
cel.x--;
|
cel.x--;
|
||||||
cel.y--;
|
cel.y--;
|
||||||
|
|
||||||
if (
|
if (!bStrong || bTransport || bVehicule || m_blupi[rank].perso == 8) // disciple
|
||||||
!bStrong || bTransport || bVehicule ||
|
// ?
|
||||||
m_blupi[rank].perso == 8) // disciple ?
|
|
||||||
{
|
{
|
||||||
error = Errors::MISC; // pas assez fort
|
error = Errors::MISC; // pas assez fort
|
||||||
}
|
}
|
||||||
@ -1970,9 +1969,8 @@ CDecor::CelOkForAction (
|
|||||||
cel.x--;
|
cel.x--;
|
||||||
cel.y--;
|
cel.y--;
|
||||||
|
|
||||||
if (
|
if (!bStrong || bTransport || bVehicule || m_blupi[rank].perso == 8) // disciple
|
||||||
!bStrong || bTransport || bVehicule ||
|
// ?
|
||||||
m_blupi[rank].perso == 8) // disciple ?
|
|
||||||
{
|
{
|
||||||
error = Errors::MISC; // pas assez fort
|
error = Errors::MISC; // pas assez fort
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ public:
|
|||||||
bool
|
bool
|
||||||
IsFreeCelEmbarque (Point cel, Sint32 rank, Sint32 & action, Point & limit);
|
IsFreeCelEmbarque (Point cel, Sint32 rank, Sint32 & action, Point & limit);
|
||||||
bool
|
bool
|
||||||
IsFreeCelDebarque (Point cel, Sint32 rank, Sint32 & action, Point & limit);
|
IsFreeCelDebarque (Point cel, Sint32 rank, Sint32 & action, Point & limit);
|
||||||
bool IsFreeJump (Point cel, Sint32 direct, Sint32 rank, Sint32 & action);
|
bool IsFreeJump (Point cel, Sint32 direct, Sint32 rank, Sint32 & action);
|
||||||
bool IsFreeGlisse (Point cel, Sint32 direct, Sint32 rank, Sint32 & action);
|
bool IsFreeGlisse (Point cel, Sint32 direct, Sint32 rank, Sint32 & action);
|
||||||
Sint32 DirectSearch (Point cel, Point goal);
|
Sint32 DirectSearch (Point cel, Point goal);
|
||||||
@ -349,7 +349,7 @@ public:
|
|||||||
// DecIO.cpp
|
// DecIO.cpp
|
||||||
bool Write (Sint32 rank, bool bUser, Sint32 world, Sint32 time, Sint32 total);
|
bool Write (Sint32 rank, bool bUser, Sint32 world, Sint32 time, Sint32 total);
|
||||||
bool
|
bool
|
||||||
Read (Sint32 rank, bool bUser, Sint32 & world, Sint32 & time, Sint32 & total);
|
Read (Sint32 rank, bool bUser, Sint32 & world, Sint32 & time, Sint32 & total);
|
||||||
bool FileExist (
|
bool FileExist (
|
||||||
Sint32 rank, bool bUser, Sint32 & world, Sint32 & time, Sint32 & total);
|
Sint32 rank, bool bUser, Sint32 & world, Sint32 & time, Sint32 & total);
|
||||||
void Flush ();
|
void Flush ();
|
||||||
|
@ -2878,7 +2878,7 @@ CEvent::DrawButtons ()
|
|||||||
DrawText (m_pPixmap, pos, text);
|
DrawText (m_pPixmap, pos, text);
|
||||||
|
|
||||||
text = gettext ("We hope you have had as much fun playing the game as we "
|
text = gettext ("We hope you have had as much fun playing the game as we "
|
||||||
"had making it !");
|
"had making it !");
|
||||||
lg = GetTextWidth (text);
|
lg = GetTextWidth (text);
|
||||||
lg = IsRightReading () ? -lg : lg;
|
lg = IsRightReading () ? -lg : lg;
|
||||||
pos.x = LXIMAGE () / 2 - lg / 2;
|
pos.x = LXIMAGE () / 2 - lg / 2;
|
||||||
@ -2913,7 +2913,7 @@ CEvent::DrawButtons ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
text = gettext ("This game is an original creation of Epsitec SA, CH-1400 "
|
text = gettext ("This game is an original creation of Epsitec SA, CH-1400 "
|
||||||
"Yverdon-les-Bains");
|
"Yverdon-les-Bains");
|
||||||
lg = GetTextWidth (text);
|
lg = GetTextWidth (text);
|
||||||
lg = IsRightReading () ? -lg : lg;
|
lg = IsRightReading () ? -lg : lg;
|
||||||
pos.x = LXIMAGE () / 2 - lg / 2;
|
pos.x = LXIMAGE () / 2 - lg / 2;
|
||||||
|
@ -102,7 +102,7 @@ public:
|
|||||||
bool IsDemoPlaying ();
|
bool IsDemoPlaying ();
|
||||||
Point GetMousePos ();
|
Point GetMousePos ();
|
||||||
void
|
void
|
||||||
Create (CPixmap * pPixmap, CDecor * pDecor, CSound * pSound, CMovie * pMovie);
|
Create (CPixmap * pPixmap, CDecor * pDecor, CSound * pSound, CMovie * pMovie);
|
||||||
void SetFullScreen (bool bFullScreen, double prevScale = 1);
|
void SetFullScreen (bool bFullScreen, double prevScale = 1);
|
||||||
Sint32 GetWorld ();
|
Sint32 GetWorld ();
|
||||||
Sint32 GetPhysicalWorld ();
|
Sint32 GetPhysicalWorld ();
|
||||||
@ -182,7 +182,7 @@ protected:
|
|||||||
void BuildFloor (Point cel, Sint32 insIcon);
|
void BuildFloor (Point cel, Sint32 insIcon);
|
||||||
void BuildWater (Point cel, Sint32 insIcon);
|
void BuildWater (Point cel, Sint32 insIcon);
|
||||||
bool
|
bool
|
||||||
BuildDown (Point pos, Uint16 mod, const SDL_Event * event, bool bMix = true);
|
BuildDown (Point pos, Uint16 mod, const SDL_Event * event, bool bMix = true);
|
||||||
bool BuildMove (Point pos, Uint16 mod, const SDL_Event & event);
|
bool BuildMove (Point pos, Uint16 mod, const SDL_Event & event);
|
||||||
|
|
||||||
void PrivateLibelle ();
|
void PrivateLibelle ();
|
||||||
@ -195,7 +195,7 @@ protected:
|
|||||||
bool DemoPlayStart (const std::string * demoFile = nullptr);
|
bool DemoPlayStart (const std::string * demoFile = nullptr);
|
||||||
void DemoPlayStop ();
|
void DemoPlayStop ();
|
||||||
static void
|
static void
|
||||||
WinToSDLEvent (Uint32 msg, WParam wParam, LParam lParam, SDL_Event & event);
|
WinToSDLEvent (Uint32 msg, WParam wParam, LParam lParam, SDL_Event & event);
|
||||||
void DemoRecEvent (const SDL_Event & event);
|
void DemoRecEvent (const SDL_Event & event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -125,10 +125,11 @@ CPixmap::CreateMainTexture ()
|
|||||||
|
|
||||||
Sint32
|
Sint32
|
||||||
CPixmap::Blit (
|
CPixmap::Blit (
|
||||||
Sint32 dstCh, SDL_Texture * src, const SDL_Rect & dstRect, double angle, SDL_RendererFlip flip)
|
Sint32 dstCh, SDL_Texture * src, const SDL_Rect & dstRect, double angle,
|
||||||
|
SDL_RendererFlip flip)
|
||||||
{
|
{
|
||||||
Sint32 res;
|
Sint32 res;
|
||||||
auto target = SDL_GetRenderTarget (g_renderer);
|
auto target = SDL_GetRenderTarget (g_renderer);
|
||||||
|
|
||||||
if (dstCh < 0)
|
if (dstCh < 0)
|
||||||
{
|
{
|
||||||
@ -150,8 +151,7 @@ CPixmap::Blit (
|
|||||||
if (this->mainTexture)
|
if (this->mainTexture)
|
||||||
SDL_SetRenderTarget (g_renderer, target ? target : this->mainTexture);
|
SDL_SetRenderTarget (g_renderer, target ? target : this->mainTexture);
|
||||||
res = SDL_RenderCopyEx (
|
res = SDL_RenderCopyEx (
|
||||||
g_renderer, src, nullptr, &dstRect, angle,
|
g_renderer, src, nullptr, &dstRect, angle, nullptr, flip);
|
||||||
nullptr, flip);
|
|
||||||
if (this->mainTexture)
|
if (this->mainTexture)
|
||||||
SDL_SetRenderTarget (g_renderer, target);
|
SDL_SetRenderTarget (g_renderer, target);
|
||||||
}
|
}
|
||||||
@ -159,8 +159,7 @@ CPixmap::Blit (
|
|||||||
{
|
{
|
||||||
SDL_SetRenderTarget (g_renderer, m_SDLTextureInfo[dstCh].texture);
|
SDL_SetRenderTarget (g_renderer, m_SDLTextureInfo[dstCh].texture);
|
||||||
res = SDL_RenderCopyEx (
|
res = SDL_RenderCopyEx (
|
||||||
g_renderer, src, nullptr, &dstRect, angle,
|
g_renderer, src, nullptr, &dstRect, angle, nullptr, flip);
|
||||||
nullptr, flip);
|
|
||||||
SDL_SetRenderTarget (g_renderer, target);
|
SDL_SetRenderTarget (g_renderer, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,8 +435,7 @@ CPixmap::Cache (
|
|||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case FIX:
|
case FIX:
|
||||||
case FIX_REVERSABLE:
|
case FIX_REVERSABLE: {
|
||||||
{
|
|
||||||
if (channel == CHBACK && (ow < LXIMAGE () || oh < LYIMAGE ()))
|
if (channel == CHBACK && (ow < LXIMAGE () || oh < LYIMAGE ()))
|
||||||
{
|
{
|
||||||
if (!wideName.empty ())
|
if (!wideName.empty ())
|
||||||
@ -467,8 +465,7 @@ CPixmap::Cache (
|
|||||||
}
|
}
|
||||||
|
|
||||||
case EXPAND:
|
case EXPAND:
|
||||||
case EXPAND_REVERSABLE:
|
case EXPAND_REVERSABLE: {
|
||||||
{
|
|
||||||
auto isFlipped = flip == SDL_FLIP_HORIZONTAL;
|
auto isFlipped = flip == SDL_FLIP_HORIZONTAL;
|
||||||
|
|
||||||
SDL_Rect src, dst;
|
SDL_Rect src, dst;
|
||||||
|
14
src/pixmap.h
14
src/pixmap.h
@ -106,7 +106,9 @@ public:
|
|||||||
void FromGameToDisplay (Sint32 & x, Sint32 & y);
|
void FromGameToDisplay (Sint32 & x, Sint32 & y);
|
||||||
|
|
||||||
Sint32 Blit (
|
Sint32 Blit (
|
||||||
Sint32 dstCh, SDL_Texture * src, const SDL_Rect & dstRect, double angle, SDL_RendererFlip flip);
|
Sint32 dstCh, SDL_Texture * src, const SDL_Rect & dstRect, double angle,
|
||||||
|
SDL_RendererFlip flip);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Sint32 BltFast (
|
Sint32 BltFast (
|
||||||
Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR,
|
Sint32 dstCh, size_t srcCh, Rect dstR, Rect srcR,
|
||||||
@ -133,11 +135,13 @@ protected:
|
|||||||
|
|
||||||
CEvent * event;
|
CEvent * event;
|
||||||
|
|
||||||
SDL_Cursor * m_lpCurrentCursor;
|
SDL_Cursor * m_lpCurrentCursor;
|
||||||
SDL_Cursor * m_lpSDLCursors[MAXCURSORS];
|
SDL_Cursor * m_lpSDLCursors[MAXCURSORS];
|
||||||
SDL_Surface * m_lpSDLBlupi;
|
SDL_Surface * m_lpSDLBlupi;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SDL_Texture * mainTexture;
|
SDL_Texture * mainTexture;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::unordered_map<size_t, TextureInfo> m_SDLTextureInfo;
|
std::unordered_map<size_t, TextureInfo> m_SDLTextureInfo;
|
||||||
};
|
};
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
class Platform
|
class Platform
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static std::function<void(const SDL_Event &)> handleEvent;
|
static std::function<void (const SDL_Event &)> handleEvent;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void timer (void *);
|
static void timer (void *);
|
||||||
@ -33,5 +33,5 @@ public:
|
|||||||
enum Type { JS, SDL };
|
enum Type { JS, SDL };
|
||||||
|
|
||||||
static Platform::Type getType ();
|
static Platform::Type getType ();
|
||||||
static void run (std::function<void(const SDL_Event &)> handleEvent);
|
static void run (std::function<void (const SDL_Event &)> handleEvent);
|
||||||
};
|
};
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "../event.h"
|
#include "../event.h"
|
||||||
#include "../platform.h"
|
#include "../platform.h"
|
||||||
|
|
||||||
std::function<void(const SDL_Event &)> Platform::handleEvent;
|
std::function<void (const SDL_Event &)> Platform::handleEvent;
|
||||||
|
|
||||||
Platform::Type
|
Platform::Type
|
||||||
Platform::getType ()
|
Platform::getType ()
|
||||||
@ -33,12 +33,12 @@ Platform::getType ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Platform::run (std::function<void(const SDL_Event &)> handleEvent)
|
Platform::run (std::function<void (const SDL_Event &)> handleEvent)
|
||||||
{
|
{
|
||||||
Platform::handleEvent = handleEvent;
|
Platform::handleEvent = handleEvent;
|
||||||
Platform::timer (nullptr);
|
Platform::timer (nullptr);
|
||||||
emscripten_set_main_loop (
|
emscripten_set_main_loop (
|
||||||
[]() {
|
[] () {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent (&event))
|
while (SDL_PollEvent (&event))
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "../event.h"
|
#include "../event.h"
|
||||||
#include "../platform.h"
|
#include "../platform.h"
|
||||||
|
|
||||||
std::function<void(const SDL_Event &)> Platform::handleEvent;
|
std::function<void (const SDL_Event &)> Platform::handleEvent;
|
||||||
|
|
||||||
Platform::Type
|
Platform::Type
|
||||||
Platform::getType ()
|
Platform::getType ()
|
||||||
@ -30,11 +30,11 @@ Platform::getType ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Platform::run (std::function<void(const SDL_Event &)> handleEvent)
|
Platform::run (std::function<void (const SDL_Event &)> handleEvent)
|
||||||
{
|
{
|
||||||
SDL_TimerID updateTimer = SDL_AddTimer (
|
SDL_TimerID updateTimer = SDL_AddTimer (
|
||||||
g_timerInterval,
|
g_timerInterval,
|
||||||
[](Uint32 interval, void * param) -> Uint32 {
|
[] (Uint32 interval, void * param) -> Uint32 {
|
||||||
CEvent::PushUserEvent (EV_UPDATE);
|
CEvent::PushUserEvent (EV_UPDATE);
|
||||||
return interval;
|
return interval;
|
||||||
},
|
},
|
||||||
|
@ -127,7 +127,7 @@ CSound::Create ()
|
|||||||
|
|
||||||
Mix_AllocateChannels (MAXSOUND);
|
Mix_AllocateChannels (MAXSOUND);
|
||||||
|
|
||||||
Mix_HookMusicFinished ([]() { CEvent::PushUserEvent (EV_MUSIC_STOP); });
|
Mix_HookMusicFinished ([] () { CEvent::PushUserEvent (EV_MUSIC_STOP); });
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ public:
|
|||||||
Sint32 channel, Sint32 volume = 0, Uint8 panLeft = 255,
|
Sint32 channel, Sint32 volume = 0, Uint8 panLeft = 255,
|
||||||
Uint8 panRight = 255);
|
Uint8 panRight = 255);
|
||||||
bool
|
bool
|
||||||
PlayImage (Sounds channel, Point pos, Sint32 rank = -1, bool stop = false);
|
PlayImage (Sounds channel, Point pos, Sint32 rank = -1, bool stop = false);
|
||||||
bool PlayMusic (const std::string & lpszMIDIFilename);
|
bool PlayMusic (const std::string & lpszMIDIFilename);
|
||||||
bool RestartMusic ();
|
bool RestartMusic ();
|
||||||
void SuspendMusic ();
|
void SuspendMusic ();
|
||||||
|
10
src/text.cxx
10
src/text.cxx
@ -145,7 +145,11 @@ public:
|
|||||||
TTF_SetFontDirection (this->font, TTF_DIRECTION_RTL);
|
TTF_SetFontDirection (this->font, TTF_DIRECTION_RTL);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Font () { this->cache.Clear (); TTF_CloseFont (this->font); }
|
~Font ()
|
||||||
|
{
|
||||||
|
this->cache.Clear ();
|
||||||
|
TTF_CloseFont (this->font);
|
||||||
|
}
|
||||||
|
|
||||||
TTF_Font * GetFont () { return this->font; }
|
TTF_Font * GetFont () { return this->font; }
|
||||||
|
|
||||||
@ -390,9 +394,7 @@ public:
|
|||||||
TTF_SetFontScriptName (this->arabicWhite->GetFont (), "Arab");
|
TTF_SetFontScriptName (this->arabicWhite->GetFont (), "Arab");
|
||||||
}
|
}
|
||||||
|
|
||||||
~Fonts ()
|
~Fonts () {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clear ()
|
void Clear ()
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
class Fonts;
|
class Fonts;
|
||||||
|
|
||||||
Fonts * GetFonts ();
|
Fonts * GetFonts ();
|
||||||
void DisposeFonts ();
|
void DisposeFonts ();
|
||||||
|
|
||||||
void DrawText (
|
void DrawText (
|
||||||
CPixmap * pPixmap, Point pos, const char * pText, Sint32 font = 0,
|
CPixmap * pPixmap, Point pos, const char * pText, Sint32 font = 0,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user