Allow for switching of weapons. Show weapon info on hud.
This commit is contained in:
parent
204055ea72
commit
f206f2052b
|
@ -8,14 +8,24 @@
|
|||
"textureName" : "gfx/fighters/ray.png",
|
||||
"guns" : [
|
||||
{
|
||||
"type" : "BT_MAG",
|
||||
"type" : "BT_PLASMA",
|
||||
"x" : -12,
|
||||
"y" : -12
|
||||
},
|
||||
{
|
||||
"type" : "BT_MAG",
|
||||
"type" : "BT_PLASMA",
|
||||
"x" : 12,
|
||||
"y" : -12
|
||||
},
|
||||
{
|
||||
"type" : "BT_MAG",
|
||||
"x" : -8,
|
||||
"y" : -12
|
||||
},
|
||||
{
|
||||
"type" : "BT_MAG",
|
||||
"x" : 8,
|
||||
"y" : -12
|
||||
}
|
||||
],
|
||||
"missiles" : {
|
||||
|
|
|
@ -61,6 +61,7 @@ extern void scrollBackground(float x, float y);
|
|||
extern void initOptions(void (*returnFromOptions)(void));
|
||||
extern void drawOptions(void);
|
||||
extern void playSound(int id);
|
||||
extern void initPlayer(void);
|
||||
|
||||
extern App app;
|
||||
extern Battle battle;
|
||||
|
|
|
@ -230,7 +230,7 @@ void fireGuns(Fighter *owner)
|
|||
|
||||
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
|
||||
{
|
||||
if (owner->guns[i].type)
|
||||
if (owner->guns[i].type == owner->selectedGunType)
|
||||
{
|
||||
s = sin(TO_RAIDANS(owner->angle));
|
||||
c = cos(TO_RAIDANS(owner->angle));
|
||||
|
|
|
@ -73,6 +73,8 @@ Fighter *spawnFighter(char *name, int x, int y, int side)
|
|||
randomizeDart(f);
|
||||
}
|
||||
|
||||
f->selectedGunType = f->guns[0].type;
|
||||
|
||||
f->defaultAction = doAI;
|
||||
f->die = die;
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ static void drawPlayerTargeter(void);
|
|||
static void drawNumAllies(void);
|
||||
static void drawNumEnemies(void);
|
||||
static void drawHealthBars(void);
|
||||
static void drawMissileAmmoBar(void);
|
||||
static void drawWeaponInfo(void);
|
||||
static void drawObjectives(void);
|
||||
static void drawTargetDistance(void);
|
||||
static void drawHudMessages(void);
|
||||
|
@ -34,6 +34,7 @@ static HudMessage hudMessageHead;
|
|||
static HudMessage *hudMessageTail;
|
||||
|
||||
static int healthWarning;
|
||||
static char *gunName[] = {"", "Particle Cannon", "Plasma Cannon", "Laser Cannon", "Mag Cannon"};
|
||||
|
||||
void initHud(void)
|
||||
{
|
||||
|
@ -95,7 +96,7 @@ void drawHud(void)
|
|||
{
|
||||
drawHealthBars();
|
||||
|
||||
drawMissileAmmoBar();
|
||||
drawWeaponInfo();
|
||||
|
||||
drawNumAllies();
|
||||
|
||||
|
@ -181,46 +182,10 @@ static void drawHealthShieldBar(int current, int max, int x, int y, int r, int g
|
|||
}
|
||||
}
|
||||
|
||||
static void drawMissileAmmoBar(void)
|
||||
static void drawWeaponInfo(void)
|
||||
{
|
||||
int w;
|
||||
float i, percent, step;
|
||||
SDL_Rect rect;
|
||||
|
||||
rect.x = 10;
|
||||
rect.y = 50;
|
||||
rect.w = 250;
|
||||
rect.h = 12;
|
||||
|
||||
SDL_SetRenderDrawColor(app.renderer, 128, 64, 32, 255);
|
||||
SDL_RenderFillRect(app.renderer, &rect);
|
||||
|
||||
SDL_SetRenderDrawColor(app.renderer, 255, 255, 255, 255);
|
||||
SDL_RenderDrawRect(app.renderer, &rect);
|
||||
|
||||
rect.x += 2;
|
||||
rect.y += 2;
|
||||
rect.w -= 4;
|
||||
rect.h -= 4;
|
||||
|
||||
percent = player->missiles.ammo;
|
||||
percent /= player->missiles.maxAmmo;
|
||||
|
||||
step = rect.w;
|
||||
step /= player->missiles.maxAmmo;
|
||||
|
||||
w = rect.w;
|
||||
|
||||
rect.w *= percent;
|
||||
|
||||
SDL_SetRenderDrawColor(app.renderer, 255, 128, 0, 255);
|
||||
SDL_RenderFillRect(app.renderer, &rect);
|
||||
|
||||
for (i = step ; i < w ; i += step)
|
||||
{
|
||||
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 0);
|
||||
SDL_RenderDrawLine(app.renderer, rect.x + i, rect.y, rect.x + i, rect.y + rect.h);
|
||||
}
|
||||
drawText(10, 50, 14, TA_LEFT, colors.white, gunName[player->selectedGunType]);
|
||||
drawText(260, 50, 14, TA_RIGHT, colors.white, "Missiles (%d)", player->missiles.ammo);
|
||||
}
|
||||
|
||||
static void drawPlayerTargeter(void)
|
||||
|
|
|
@ -21,6 +21,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "player.h"
|
||||
|
||||
static void selectTarget(void);
|
||||
static void switchGuns(void);
|
||||
|
||||
static int availableGuns[BT_MAX];
|
||||
|
||||
void initPlayer(void)
|
||||
{
|
||||
int i, n;
|
||||
|
||||
memset(&availableGuns, 0, sizeof(int) * BT_MAX);
|
||||
|
||||
player->selectedGunType = -1;
|
||||
|
||||
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
|
||||
{
|
||||
n = player->guns[i].type;
|
||||
|
||||
if (n)
|
||||
{
|
||||
availableGuns[n] = 1;
|
||||
|
||||
if (player->selectedGunType == -1)
|
||||
{
|
||||
player->selectedGunType = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void doPlayer(void)
|
||||
{
|
||||
|
@ -55,6 +82,13 @@ void doPlayer(void)
|
|||
fireGuns(player);
|
||||
}
|
||||
|
||||
if (app.keyboard[SDL_SCANCODE_LSHIFT])
|
||||
{
|
||||
switchGuns();
|
||||
|
||||
app.keyboard[SDL_SCANCODE_LSHIFT] = 0;
|
||||
}
|
||||
|
||||
if (app.keyboard[SDL_SCANCODE_RETURN] && player->missiles.ammo && player->target)
|
||||
{
|
||||
fireMissile(player);
|
||||
|
@ -83,6 +117,21 @@ void doPlayer(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void switchGuns(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = player->selectedGunType;
|
||||
|
||||
do
|
||||
{
|
||||
i = (i + 1) % BT_MAX;
|
||||
}
|
||||
while (!availableGuns[i]);
|
||||
|
||||
player->selectedGunType = i;
|
||||
}
|
||||
|
||||
static void selectTarget(void)
|
||||
{
|
||||
unsigned int closest = 65535;
|
||||
|
|
|
@ -68,6 +68,9 @@ void loadMission(char *filename)
|
|||
battle.status = MS_IN_PROGRESS;
|
||||
}
|
||||
|
||||
|
||||
initPlayer();
|
||||
|
||||
playMusic(music);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ extern void startSectionTransition(void);
|
|||
extern void endSectionTransition(void);
|
||||
extern void playMusic(char *filename);
|
||||
extern void stopMusic(void);
|
||||
extern void initPlayer(void);
|
||||
|
||||
extern Battle battle;
|
||||
extern Fighter *player;
|
||||
|
|
|
@ -85,6 +85,7 @@ struct Fighter {
|
|||
int maxShield;
|
||||
int reload;
|
||||
int reloadTime;
|
||||
int selectedGunType;
|
||||
int shieldRecharge;
|
||||
int shieldRechargeRate;
|
||||
int systemPower;
|
||||
|
|
Loading…
Reference in New Issue