mirror of https://gitlab.com/drummyfish/anarch.git
Continue mouse
This commit is contained in:
parent
b7b6ce3839
commit
1b081bdefb
37
main.c
37
main.c
|
@ -34,8 +34,11 @@
|
||||||
#define SFG_KEY_STRAFE_LEFT 8
|
#define SFG_KEY_STRAFE_LEFT 8
|
||||||
#define SFG_KEY_STRAFE_RIGHT 9
|
#define SFG_KEY_STRAFE_RIGHT 9
|
||||||
#define SFG_KEY_MAP 10
|
#define SFG_KEY_MAP 10
|
||||||
|
#define SFG_KEY_TOGGLE_FREELOOK 11
|
||||||
|
#define SFG_KEY_NEXT_WEAPON 12
|
||||||
|
#define SFG_KEY_PREVIOUS_WEAPON 13
|
||||||
|
|
||||||
#define SFG_KEY_COUNT 10 ///< Number of keys.
|
#define SFG_KEY_COUNT 14 ///< Number of keys.
|
||||||
|
|
||||||
/* ============================= PORTING =================================== */
|
/* ============================= PORTING =================================== */
|
||||||
|
|
||||||
|
@ -230,6 +233,10 @@ struct
|
||||||
uint32_t lastItemTakenFrame;
|
uint32_t lastItemTakenFrame;
|
||||||
|
|
||||||
uint8_t ammo[SFG_AMMO_TOTAL];
|
uint8_t ammo[SFG_AMMO_TOTAL];
|
||||||
|
|
||||||
|
uint8_t freeLook; /**< If on, the vertical looking (shear) does
|
||||||
|
not automatically shear back. This is mainly
|
||||||
|
for mouse control. */
|
||||||
} SFG_player;
|
} SFG_player;
|
||||||
|
|
||||||
RCL_RayConstraints SFG_rayConstraints;
|
RCL_RayConstraints SFG_rayConstraints;
|
||||||
|
@ -1090,6 +1097,8 @@ void SFG_init()
|
||||||
SFG_setAndInitLevel(&SFG_level0);
|
SFG_setAndInitLevel(&SFG_level0);
|
||||||
|
|
||||||
SFG_lastFrameTimeMs = SFG_getTimeMs();
|
SFG_lastFrameTimeMs = SFG_getTimeMs();
|
||||||
|
|
||||||
|
SFG_player.freeLook = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SFG_getPlayerWeaponInfo(
|
void SFG_getPlayerWeaponInfo(
|
||||||
|
@ -1099,9 +1108,13 @@ void SFG_getPlayerWeaponInfo(
|
||||||
|
|
||||||
*projectileCount = SFG_GET_WEAPON_PROJECTILE_COUNT(SFG_player.weapon);
|
*projectileCount = SFG_GET_WEAPON_PROJECTILE_COUNT(SFG_player.weapon);
|
||||||
|
|
||||||
|
#if SFG_INFINITE_AMMO
|
||||||
|
*canShoot = 1;
|
||||||
|
#else
|
||||||
*canShoot =
|
*canShoot =
|
||||||
(*ammoType == SFG_AMMO_NONE ||
|
(*ammoType == SFG_AMMO_NONE ||
|
||||||
SFG_player.ammo[*ammoType] >= *projectileCount);
|
SFG_player.ammo[*ammoType] >= *projectileCount);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void SFG_playerRotateWeapon(uint8_t next)
|
void SFG_playerRotateWeapon(uint8_t next)
|
||||||
|
@ -1752,6 +1765,9 @@ void SFG_gameStep()
|
||||||
|
|
||||||
int8_t shearing = 0;
|
int8_t shearing = 0;
|
||||||
|
|
||||||
|
if (SFG_keyJustPressed(SFG_KEY_TOGGLE_FREELOOK))
|
||||||
|
SFG_player.freeLook = !SFG_player.freeLook;
|
||||||
|
|
||||||
#if SFG_PREVIEW_MODE == 0
|
#if SFG_PREVIEW_MODE == 0
|
||||||
if (
|
if (
|
||||||
SFG_keyIsDown(SFG_KEY_B) &&
|
SFG_keyIsDown(SFG_KEY_B) &&
|
||||||
|
@ -1865,6 +1881,11 @@ void SFG_gameStep()
|
||||||
} // attack
|
} // attack
|
||||||
#endif // SFG_PREVIEW_MODE == 0
|
#endif // SFG_PREVIEW_MODE == 0
|
||||||
|
|
||||||
|
if (SFG_keyJustPressed(SFG_KEY_NEXT_WEAPON))
|
||||||
|
SFG_playerRotateWeapon(1);
|
||||||
|
else if (SFG_keyJustPressed(SFG_KEY_PREVIOUS_WEAPON))
|
||||||
|
SFG_playerRotateWeapon(0);
|
||||||
|
|
||||||
if (SFG_keyIsDown(SFG_KEY_A))
|
if (SFG_keyIsDown(SFG_KEY_A))
|
||||||
{
|
{
|
||||||
if (SFG_keyIsDown(SFG_KEY_UP))
|
if (SFG_keyIsDown(SFG_KEY_UP))
|
||||||
|
@ -1893,9 +1914,9 @@ void SFG_gameStep()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (SFG_keyJustPressed(SFG_KEY_LEFT) | SFG_keyJustPressed(SFG_KEY_A))
|
if (SFG_keyJustPressed(SFG_KEY_LEFT) || SFG_keyJustPressed(SFG_KEY_A))
|
||||||
SFG_playerRotateWeapon(0);
|
SFG_playerRotateWeapon(0);
|
||||||
else if (SFG_keyJustPressed(SFG_KEY_RIGHT) | SFG_keyJustPressed(SFG_KEY_B))
|
else if (SFG_keyJustPressed(SFG_KEY_RIGHT) || SFG_keyJustPressed(SFG_KEY_B))
|
||||||
SFG_playerRotateWeapon(1);
|
SFG_playerRotateWeapon(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1931,6 +1952,14 @@ void SFG_gameStep()
|
||||||
SFG_player.camera.direction +=
|
SFG_player.camera.direction +=
|
||||||
(mouseX * SFG_MOUSE_SENSITIVITY_HORIZONTAL) / 128;
|
(mouseX * SFG_MOUSE_SENSITIVITY_HORIZONTAL) / 128;
|
||||||
|
|
||||||
|
if (SFG_player.freeLook)
|
||||||
|
SFG_player.camera.shear =
|
||||||
|
RCL_max(RCL_min(
|
||||||
|
SFG_player.camera.shear - (mouseY * SFG_MOUSE_SENSITIVITY_VERTICAL)
|
||||||
|
/ 128,
|
||||||
|
SFG_CAMERA_MAX_SHEAR_PIXELS),
|
||||||
|
-1 * SFG_CAMERA_MAX_SHEAR_PIXELS);
|
||||||
|
|
||||||
recomputeDirection = 1;
|
recomputeDirection = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1986,7 +2015,7 @@ void SFG_gameStep()
|
||||||
(SFG_player.verticalSpeed - SFG_GRAVITY_SPEED_INCREASE_PER_FRAME);
|
(SFG_player.verticalSpeed - SFG_GRAVITY_SPEED_INCREASE_PER_FRAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!shearing && SFG_player.camera.shear != 0)
|
if (!shearing && SFG_player.camera.shear != 0 && !SFG_player.freeLook)
|
||||||
{
|
{
|
||||||
// gradually shear back to zero
|
// gradually shear back to zero
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
|
|
||||||
const uint8_t *sdlKeyboardState;
|
const uint8_t *sdlKeyboardState;
|
||||||
|
|
||||||
|
int8_t mouseWheel;
|
||||||
|
|
||||||
uint16_t screen[SFG_SCREEN_RESOLUTION_X * SFG_SCREEN_RESOLUTION_Y]; // RGB565 format
|
uint16_t screen[SFG_SCREEN_RESOLUTION_X * SFG_SCREEN_RESOLUTION_Y]; // RGB565 format
|
||||||
|
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
|
@ -106,7 +108,7 @@ int8_t SFG_keyPressed(uint8_t key)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SFG_KEY_B:
|
case SFG_KEY_B:
|
||||||
return sdlKeyboardState[SDL_SCANCODE_H];
|
return sdlKeyboardState[SDL_SCANCODE_H] || SDL_GetMouseState(0,0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SFG_KEY_C:
|
case SFG_KEY_C:
|
||||||
|
@ -131,17 +133,43 @@ int8_t SFG_keyPressed(uint8_t key)
|
||||||
return sdlKeyboardState[SDL_SCANCODE_TAB];
|
return sdlKeyboardState[SDL_SCANCODE_TAB];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SFG_KEY_TOGGLE_FREELOOK:
|
||||||
|
return sdlKeyboardState[SDL_SCANCODE_T];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SFG_KEY_NEXT_WEAPON:
|
||||||
|
return sdlKeyboardState[SDL_SCANCODE_M] || (mouseWheel > 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SFG_KEY_PREVIOUS_WEAPON:
|
||||||
|
return sdlKeyboardState[SDL_SCANCODE_N] || (mouseWheel < 0);
|
||||||
|
break;
|
||||||
|
|
||||||
default: return 0; break;
|
default: return 0; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int running;
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
void mainLoopIteration()
|
void mainLoopIteration()
|
||||||
{
|
{
|
||||||
SDL_PumpEvents(); // updates the keyboard state
|
SDL_PumpEvents(); // updates the keyboard state
|
||||||
|
|
||||||
|
mouseWheel = 0;
|
||||||
|
|
||||||
|
SDL_Event event;
|
||||||
|
|
||||||
|
while(SDL_PollEvent(&event))
|
||||||
|
if(event.type == SDL_MOUSEWHEEL)
|
||||||
|
{
|
||||||
|
if(event.wheel.y > 0)
|
||||||
|
mouseWheel = 1;
|
||||||
|
else
|
||||||
|
mouseWheel = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (sdlKeyboardState[SDL_SCANCODE_ESCAPE])
|
if (sdlKeyboardState[SDL_SCANCODE_ESCAPE])
|
||||||
return;
|
running = 0;
|
||||||
|
|
||||||
SFG_mainLoopBody();
|
SFG_mainLoopBody();
|
||||||
|
|
||||||
|
@ -152,6 +180,7 @@ void mainLoopIteration()
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
typedef void (*em_callback_func)(void);
|
typedef void (*em_callback_func)(void);
|
||||||
void emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);
|
void emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);
|
||||||
#endif
|
#endif
|
||||||
|
@ -221,26 +250,13 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
SFG_init();
|
SFG_init();
|
||||||
|
|
||||||
int running = 1;
|
running = 1;
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
emscripten_set_main_loop(mainLoopIteration,0,1);
|
emscripten_set_main_loop(mainLoopIteration,0,1);
|
||||||
#else
|
#else
|
||||||
while (running)
|
while (running)
|
||||||
{
|
mainLoopIteration();
|
||||||
SDL_PumpEvents(); // updates the keyboard state
|
|
||||||
|
|
||||||
if (sdlKeyboardState[SDL_SCANCODE_ESCAPE])
|
|
||||||
break;
|
|
||||||
|
|
||||||
SFG_mainLoopBody();
|
|
||||||
|
|
||||||
SDL_UpdateTexture(texture,NULL,screen,SFG_SCREEN_RESOLUTION_X * sizeof(uint16_t));
|
|
||||||
|
|
||||||
SDL_RenderClear(renderer);
|
|
||||||
SDL_RenderCopy(renderer,texture,NULL,NULL);
|
|
||||||
SDL_RenderPresent(renderer);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("SDL: freeing SDL\n");
|
printf("SDL: freeing SDL\n");
|
||||||
|
|
11
settings.h
11
settings.h
|
@ -33,6 +33,12 @@
|
||||||
*/
|
*/
|
||||||
#define SFG_MOUSE_SENSITIVITY_HORIZONTAL 32
|
#define SFG_MOUSE_SENSITIVITY_HORIZONTAL 32
|
||||||
|
|
||||||
|
/**
|
||||||
|
Like SFG_MOUSE_SENSITIVITY_HORIZONTAL but for vertical look. 128 means 1
|
||||||
|
shear pixel per mouse pixel travelled.
|
||||||
|
*/
|
||||||
|
#define SFG_MOUSE_SENSITIVITY_VERTICAL 64
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Width of the screen in pixels. Set this to ACTUAL resolution. If you want the
|
Width of the screen in pixels. Set this to ACTUAL resolution. If you want the
|
||||||
game to run at smaller resolution (with bigger pixels), do his using
|
game to run at smaller resolution (with bigger pixels), do his using
|
||||||
|
@ -169,4 +175,9 @@
|
||||||
*/
|
*/
|
||||||
#define SFG_BACKGROUND_BLUR 0
|
#define SFG_BACKGROUND_BLUR 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
Developer cheat for having infinite ammo in all weapons.
|
||||||
|
*/
|
||||||
|
#define SFG_INFINITE_AMMO 1
|
||||||
|
|
||||||
#endif // guard
|
#endif // guard
|
||||||
|
|
Loading…
Reference in New Issue