Ammo sharing done
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
<Color A="0" B="1.96078432" G="0" R="3.92156863"/>
|
<Color A="0" B="1.96078432" G="0" R="3.92156863"/>
|
||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
|
<c:NetworkComponent/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-0.0900000036" Z="-0.00600000005"/>
|
<Position X="0" Y="-0.0900000036" Z="-0.00600000005"/>
|
||||||
<Orientation X="1.57000005" Y="0" Z="0"/>
|
<Orientation X="1.57000005" Y="0" Z="0"/>
|
||||||
|
|||||||
@@ -79,45 +79,37 @@ std::string BoostSystem::DetermineClass(EntityWrapper inflictorPlayer)
|
|||||||
|
|
||||||
void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver)
|
void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver)
|
||||||
{
|
{
|
||||||
bool gaveAmmo = false;
|
|
||||||
|
|
||||||
if (receiver.HasComponent("AssaultWeapon")) {
|
if (receiver.HasComponent("AssaultWeapon")) {
|
||||||
int magazineSize = receiver["AssaultWeapon"]["MagazineSize"];
|
int magazineSize = receiver["AssaultWeapon"]["MagazineSize"];
|
||||||
int& magazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
|
int& magazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
|
||||||
|
int prevMagazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
|
||||||
int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"];
|
int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"];
|
||||||
int& ammo = receiver["AssaultWeapon"]["Ammo"];
|
int& ammo = receiver["AssaultWeapon"]["Ammo"];
|
||||||
|
|
||||||
if (magazineAmmo < magazineSize) {
|
int givenAmmo = 3;
|
||||||
magazineAmmo += 1;
|
|
||||||
gaveAmmo = true;
|
magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize);
|
||||||
} else if (ammo < maxAmmo) {
|
if (magazineAmmo > prevMagazineAmmo) {
|
||||||
ammo += 1;
|
givenAmmo = prevMagazineAmmo + givenAmmo - magazineSize;
|
||||||
gaveAmmo = true;
|
}
|
||||||
|
if (givenAmmo > 0) {
|
||||||
|
ammo = glm::clamp(ammo + givenAmmo, 0, maxAmmo);
|
||||||
}
|
}
|
||||||
} else if (receiver.HasComponent("DefenderWeapon")) {
|
} else if (receiver.HasComponent("DefenderWeapon")) {
|
||||||
int magazineSize = receiver["DefenderWeapon"]["MagazineSize"];
|
int magazineSize = receiver["DefenderWeapon"]["MagazineSize"];
|
||||||
int& magazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
|
int& magazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
|
||||||
|
int prevMagazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
|
||||||
int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"];
|
int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"];
|
||||||
int& ammo = receiver["DefenderWeapon"]["Ammo"];
|
int& ammo = receiver["DefenderWeapon"]["Ammo"];
|
||||||
|
|
||||||
if (magazineAmmo < magazineSize) {
|
int givenAmmo = 1;
|
||||||
magazineAmmo += 1;
|
|
||||||
gaveAmmo = true;
|
magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize);
|
||||||
} else if (ammo < maxAmmo) {
|
if (magazineAmmo > prevMagazineAmmo) {
|
||||||
ammo += 1;
|
givenAmmo = prevMagazineAmmo + givenAmmo - magazineSize;
|
||||||
gaveAmmo = true;
|
|
||||||
}
|
}
|
||||||
}
|
if (givenAmmo > 0) {
|
||||||
|
ammo = glm::clamp(ammo + givenAmmo, 0, maxAmmo);
|
||||||
|
|
||||||
if (gaveAmmo) {
|
|
||||||
EntityWrapper effectSpawner = giver.FirstChildByName("AmmoShareEffectSpawner");
|
|
||||||
if (effectSpawner.Valid()) {
|
|
||||||
if (effectSpawner.HasComponent("Spawner")) {
|
|
||||||
SpawnerSystem::Spawn(effectSpawner, effectSpawner);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,7 +281,44 @@ bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi
|
|||||||
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
|
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
|
||||||
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
|
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
|
||||||
damage = 0;
|
damage = 0;
|
||||||
//giveAmmo(cWeapon, wi, victim);
|
|
||||||
|
bool gaveAmmo = false;
|
||||||
|
|
||||||
|
if (victim.HasComponent("AssaultWeapon")) {
|
||||||
|
int magazineSize = victim["AssaultWeapon"]["MagazineSize"];
|
||||||
|
int magazineAmmo = victim["AssaultWeapon"]["MagazineAmmo"];
|
||||||
|
|
||||||
|
int maxAmmo = victim["AssaultWeapon"]["MaxAmmo"];
|
||||||
|
int ammo = victim["AssaultWeapon"]["Ammo"];
|
||||||
|
|
||||||
|
if (magazineAmmo < magazineSize) {
|
||||||
|
gaveAmmo = true;
|
||||||
|
} else if (ammo < maxAmmo) {
|
||||||
|
gaveAmmo = true;
|
||||||
|
}
|
||||||
|
} else if (victim.HasComponent("DefenderWeapon")) {
|
||||||
|
int magazineSize = victim["DefenderWeapon"]["MagazineSize"];
|
||||||
|
int magazineAmmo = victim["DefenderWeapon"]["MagazineAmmo"];
|
||||||
|
|
||||||
|
int maxAmmo = victim["DefenderWeapon"]["MaxAmmo"];
|
||||||
|
int ammo = victim["DefenderWeapon"]["Ammo"];
|
||||||
|
|
||||||
|
if (magazineAmmo < magazineSize) {
|
||||||
|
gaveAmmo = true;
|
||||||
|
} else if (ammo < maxAmmo) {
|
||||||
|
gaveAmmo = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (gaveAmmo) {
|
||||||
|
EntityWrapper effectSpawner = wi.FirstPersonEntity.FirstChildByName("AmmoShareEffectSpawner");
|
||||||
|
if (effectSpawner.Valid()) {
|
||||||
|
if (effectSpawner.HasComponent("Spawner")) {
|
||||||
|
SpawnerSystem::Spawn(effectSpawner, effectSpawner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deal damage!
|
// Deal damage!
|
||||||
|
|||||||
Reference in New Issue
Block a user