[Add] Energy is actively in use now. ^.^

This commit is contained in:
Allanis 2013-03-17 16:36:59 +00:00
parent d970d85529
commit 2f59ae1b84
8 changed files with 46 additions and 19 deletions

1
TODO
View File

@ -2,7 +2,6 @@ Vital:
-- Missions
-- Save
-- Allow multiple ships in storage.
-- Make energy do something.
-- Main Menu.
-- Player death!
-- Player faction system.

View File

@ -15,7 +15,8 @@
<delay>500</delay>
<speed>550</speed>
<range>300</range>
<accuracy>30</accuracy>
<accuracy>30</accuracy>
<energy>8</energy>
<damage>
<armour>13</armour>
<shield>10</shield>
@ -37,7 +38,8 @@
<delay>300</delay>
<speed>550</speed>
<range>300</range>
<accuracy>30</accuracy>
<accuracy>30</accuracy>
<energy>10</energy>
<damage>
<armour>13</armour>
<shield>10</shield>
@ -131,7 +133,8 @@
<delay>400</delay>
<speed>650</speed>
<range>200</range>
<accuracy>15</accuracy>
<accuracy>15</accuracy>
<energy>5</energy>
<damage>
<armour>7</armour>
<shield>7</shield>

View File

@ -20,7 +20,7 @@
<energy>240</energy>
<shield_regen>80</shield_regen>
<armour_regen>50</armour_regen>
<energy_regen>40</energy_regen>
<energy_regen>500</energy_regen>
</health>
<characteristics>
<crew>2</crew>
@ -52,7 +52,7 @@
<energy>180</energy>
<shield_regen>150</shield_regen>
<armour_regen>60</armour_regen>
<energy_regen>40</energy_regen>
<energy_regen>500</energy_regen>
</health>
<characteristics>
<crew>2</crew>
@ -84,7 +84,7 @@
<energy>900</energy>
<shield_regen>300</shield_regen>
<armour_regen>80</armour_regen>
<energy_regen>50</energy_regen>
<energy_regen>1400</energy_regen>
</health>
<characteristics>
<crew>35</crew>
@ -118,7 +118,7 @@
<energy>360</energy>
<shield_regen>180</shield_regen>
<armour_regen>60</armour_regen>
<energy_regen>50</energy_regen>
<energy_regen>1080</energy_regen>
</health>
<characteristics>
<crew>9</crew>
@ -152,7 +152,7 @@
<energy>200</energy>
<shield_regen>100</shield_regen>
<armour_regen>40</armour_regen>
<energy_regen>250</energy_regen>
<energy_regen>650</energy_regen>
</health>
<characteristics>
<crew>13</crew>
@ -184,7 +184,7 @@
<energy>300</energy>
<shield_regen>240</shield_regen>
<armour_regen>420</armour_regen>
<energy_regen>240</energy_regen>
<energy_regen>600</energy_regen>
</health>
<characteristics>
<crew>1</crew>

View File

@ -3,8 +3,8 @@
<player>
<ship>Lancer</ship>
<credits>
<low>5000</low>
<high>15000</high>
<low>50000</low>
<high>150000</high>
</credits>
<system>
<name>KonoSys</name>

View File

@ -569,6 +569,7 @@ void takeoff(void) {
// Heal the player.
player->armour = player->armour_max;
player->shield = player->shield_max;
player->energy = player->energy_max;
space_init(NULL);

View File

@ -126,6 +126,13 @@ int outfit_delay(const Outfit* o) {
return -1;
}
double outfit_energy(const Outfit* o) {
if(outfit_isWeapon(o)) return o->u.blt.energy;
else if(outfit_isAmmo(o)) return o->u.amm.energy;
else if(outfit_isTurret(o)) return o->u.blt.energy;
return -1.;
}
const char* outfit_typename[] = {
"NULL",
"Bolt Cannon",
@ -180,6 +187,7 @@ static void outfit_parseSWeapon(Outfit* tmp, const xmlNodePtr parent) {
else if(xml_isNode(node, "delay")) tmp->u.blt.delay = xml_getInt(node);
else if(xml_isNode(node, "range")) tmp->u.blt.range = xml_getFloat(node);
else if(xml_isNode(node, "accuracy")) tmp->u.blt.accuracy = xml_getFloat(node);
else if(xml_isNode(node, "energy")) tmp->u.blt.energy = xml_getFloat(node);
else if(xml_isNode(node, "gfx")) {
snprintf(str, strlen(xml_get(node))+sizeof(OUTFIT_GFX)+4,
OUTFIT_GFX"%s.png", xml_get(node));
@ -241,6 +249,7 @@ static void outfit_parseSAmmo(Outfit* tmp, const xmlNodePtr parent) {
if(xml_isNode(node, "thrust")) tmp->u.amm.thrust = xml_getFloat(node);
else if(xml_isNode(node, "turn")) tmp->u.amm.turn = xml_getFloat(node);
else if(xml_isNode(node, "speed")) tmp->u.amm.speed = xml_getFloat(node);
else if(xml_isNode(node, "energy")) tmp->u.amm.energy = xml_getFloat(node);
else if(xml_isNode(node, "duration"))
tmp->u.amm.duration = (unsigned int)1000.*xml_getFloat(node);
else if(xml_isNode(node, "lockon"))

View File

@ -47,9 +47,10 @@ typedef struct Outfit_ {
union {
struct { // Bolt.
unsigned int delay; // Delay between shots.
double speed; // Speed of shot. (not applicable to beam.
double speed; // Speed of shot. (not applicable to beam.
double range;
double accuracy; // Desviation accuracy.
double accuracy; // Desviation accuracy.
double energy; // Energy usage.
double damage_armour, damage_shield; // Damage.
glTexture* gfx_space;
@ -68,9 +69,10 @@ typedef struct Outfit_ {
} lau;
struct { // Ammo.
unsigned int duration; // Duration.
double speed; // Max speed.
double turn; // Turn vel.
double thrust; // Acceleration.
double speed; // Max speed.
double turn; // Turn vel.
double thrust; // Acceleration.
double energy; // Energy usage.
double damage_armour, damage_shield; // Damage.
glTexture* gfx_space;
@ -98,6 +100,7 @@ int outfit_spfx(const Outfit* o);
double outfit_dmgShield(const Outfit* o);
double outfit_dmgArmour(const Outfit* o);
int outfit_delay(const Outfit* o);
double outfit_energy(const Outfit* o);
// Load/free outfit stack.
int outfit_load(void);

View File

@ -171,6 +171,10 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
switch(w->outfit->type) {
case OUTFIT_TYPE_TURRET_BOLT:
case OUTFIT_TYPE_BOLT:
// Enough energy?
if(outfit_energy(w->outfit) > p->energy) return;
p->energy -= outfit_energy(w->outfit);
weapon_add(w->outfit, p->solid->dir, &p->solid->pos,
&p->solid->vel, p->id, t);
@ -185,6 +189,10 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
// Must be secondary weapon, Shooter can't be the target.
else if(outfit_isLauncher(w->outfit) && (w == p->secondary) && (p->id != t)) {
if(p->ammo && (p->ammo->quantity > 0)) {
// Enough energy?
if(outfit_energy(w->outfit) > p->energy) return;
p->energy -= outfit_energy(w->outfit);
weapon_add(p->ammo->outfit, p->solid->dir, &p->solid->pos,
&p->solid->vel, p->id, t);
@ -349,13 +357,17 @@ static void pilot_update(Pilot* pilot, const double dt) {
return;
}
// We are still alive.
else if(pilot->armour < pilot->armour_max)
else if(pilot->armour < pilot->armour_max) {
pilot->armour += pilot->ship->armour_regen*dt;
else
pilot->energy += pilot->ship->energy_regen*dt;
} else {
pilot->shield += pilot->ship->shield_regen*dt;
pilot->energy += pilot->ship->energy_regen*dt;
}
if(pilot->armour > pilot->armour_max) pilot->armour = pilot->armour_max;
if(pilot->shield > pilot->shield_max) pilot->shield = pilot->shield_max;
if(pilot->energy > pilot->energy_max) pilot->energy = pilot->energy_max;
// Update the solid.
(*pilot->solid->update)(pilot->solid, dt);