Skip to content

Commit

Permalink
#6: Fix weapon switch bug that will unequip current weapon in invento…
Browse files Browse the repository at this point in the history
…ry UI and other bugs
  • Loading branch information
Danil Ko committed Mar 3, 2021
1 parent 24bbdb9 commit 30c160c
Show file tree
Hide file tree
Showing 10 changed files with 87 additions and 129 deletions.
8 changes: 4 additions & 4 deletions agents/AIAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ protected override void DisconnectWeapon(Weapon currentWeapon, Weapon.WeaponOrde
if (currentWeapon != null && _agentAI != null && IsInstanceValid(_agentAI))
{
// Deregister weapon with ai
if (currentWeapon.IsConnected(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponReload"))
if (currentWeapon.IsConnected(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponNeedReload"))
{
currentWeapon.Disconnect(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponReload");
currentWeapon.Disconnect(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponNeedReload");
currentWeapon.Disconnect(nameof(Weapon.ReloadSignal), _agentAI, "_onWeaponReload");
}
}
Expand All @@ -69,9 +69,9 @@ protected override void ConnectWeapon(Weapon currentWeapon, Weapon.WeaponOrder w
if (currentWeapon != null && _agentAI != null && IsInstanceValid(_agentAI))
{
// Register weapon with AI
if (!currentWeapon.IsConnected(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponReload"))
if (!currentWeapon.IsConnected(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponNeedReload"))
{
currentWeapon.Connect(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponReload");
currentWeapon.Connect(nameof(Weapon.AmmoOutSignal), _agentAI, "_onWeaponNeedReload");
currentWeapon.Connect(nameof(Weapon.ReloadSignal), _agentAI, "_onWeaponReload");
}

Expand Down
28 changes: 13 additions & 15 deletions agents/Agent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,6 @@ public virtual void changeWeapon(int weaponIndex, Weapon.WeaponOrder weaponOrder
// Caculate actual index base on availble weapon
weaponIndex = weaponIndex % weapons.Count;

// Not need to switch if same weapon
if (CurrentWeaponIndex[weaponOrder] == weaponIndex)
{
return;
}

Weapon currentWeapon = ((Weapon)weapons[CurrentWeaponIndex[weaponOrder]]);

if (currentWeapon != null)
Expand All @@ -181,10 +175,10 @@ public virtual void changeWeapon(int weaponIndex, Weapon.WeaponOrder weaponOrder
{
currentWeapon.Show();

EmitSignal(nameof(WeaponChangeSignal), currentWeapon.CurrentWeaponType, weaponOrder);

ConnectWeapon(currentWeapon, weaponOrder);

EmitSignal(nameof(WeaponChangeSignal), CurrentInventory.GetItems()[CurrentInventory.GetEquipItemIndex(weaponOrder, weaponIndex)], weaponOrder);

// Emit signal to update info
currentWeapon.EmitSignal(nameof(Weapon.AmmoChangeSignal), currentWeapon.getAmmo(), currentWeapon.getMaxAmmo(), weaponOrder);
}
Expand Down Expand Up @@ -241,10 +235,11 @@ public bool EquipWeapon(PackedScene weaponScene, Weapon.WeaponOrder weaponOrder,
weapons[index] = weapon;
weapon.Hide();

// Set an incremental to current index, so weapon can be switched
int oldIndex = CurrentWeaponIndex[weaponOrder];
CurrentWeaponIndex[weaponOrder] = (CurrentWeaponIndex[weaponOrder] + 1) % weapons.Count;
changeWeapon(oldIndex, weaponOrder);
// If it is current weapon, then perform weapon change
if (index == CurrentWeaponIndex[weaponOrder])
{
changeWeapon(index, weaponOrder);
}

return true;
}
Expand All @@ -266,18 +261,21 @@ public Position2D GetWeaponsHolder(Weapon.WeaponOrder weaponOrder)
return ((Position2D)GetNode(weaponOrder + "WeaponHolder"));
}

/**
Unequip weapon at given weapon order's given index
**/
public void UnequipWeapon(Weapon.WeaponOrder weaponOrder, int index)
{
Godot.Collections.Array<Weapon> weapons = GetWeapons(weaponOrder);

Weapon weapon = (Weapon)weapons[CurrentWeaponIndex[weaponOrder]];
Weapon weapon = (Weapon)weapons[index];

if (weapon != null)
{
Position2D weaponHolder = GetWeaponsHolder(weaponOrder);
weaponHolder.RemoveChild(weapon);
// Null the weapon
weapons[CurrentWeaponIndex[weaponOrder]] = null;
weapons[index] = null;
DisconnectWeapon(weapon, Weapon.WeaponOrder.Left);
// Empty out weapon
weapon.QueueFree();
Expand Down Expand Up @@ -401,7 +399,7 @@ public void Fire(Weapon.WeaponOrder weaponOrder, int weaponAction)
// knock back effect
if (weapon.Fire(target) && MaxSpeed != 0)
{
Vector2 dir = (new Vector2(1, 0)).Rotated(GlobalRotation);
Vector2 dir = (new Vector2(1, 0)).Rotated(GlobalRotation);
MoveAndSlide(dir * -10 * weapon.KnockbackForce);
}
}
Expand Down
6 changes: 3 additions & 3 deletions agents/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ public void SetHUD(HUD hud, InventoryManager _inventoryManager)
{
ConnectWeapon(weapon, weaponOrder);

EmitSignal(nameof(WeaponChangeSignal), weapon.CurrentWeaponType, weaponOrder);
EmitSignal(nameof(WeaponChangeSignal), CurrentInventory.GetItems()[CurrentInventory.GetEquipItemIndex(weaponOrder, GetCurrentWeaponIndex(weaponOrder))], weaponOrder);
// Emit signal to update info
weapon.EmitSignal(nameof(Weapon.AmmoChangeSignal), weapon.getAmmo(), weapon.getMaxAmmo());
weapon.EmitSignal(nameof(Weapon.AmmoChangeSignal), weapon.getAmmo(), weapon.getMaxAmmo(), weaponOrder);
}
else
{
EmitSignal(nameof(WeaponChangeSignal), Weapon.WeaponType.EMPTY, weaponOrder);
EmitSignal(nameof(WeaponChangeSignal), null, weaponOrder);
}
}

Expand Down
3 changes: 1 addition & 2 deletions inventory/Inventory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,10 +171,9 @@ public void EquipItem(int itemIndex, Weapon.WeaponOrder weaponOrder, int weaponI
{
return;
}

// Unequip weapon first
UnequipItem(weaponOrder, weaponIndex);

_equipmentIndex.Add(weaponOrder + "_" + weaponIndex, itemIndex);
_usedIndex.Add(itemIndex);
_agent.EquipWeapon(_items[itemIndex].ReferencePackedScene, weaponOrder, weaponIndex);
Expand Down
10 changes: 1 addition & 9 deletions map/GameWorld.tscn
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[gd_scene load_steps=12 format=2]
[gd_scene load_steps=11 format=2]

[ext_resource path="res://terrain/terrain_tiles.tres" type="TileSet" id=1]
[ext_resource path="res://assets/ui/red_tick.png" type="Texture" id=2]
Expand All @@ -7,7 +7,6 @@
[ext_resource path="res://ui/HUD.tscn" type="PackedScene" id=5]
[ext_resource path="res://environments/CapaturableBaseManager.tscn" type="PackedScene" id=6]
[ext_resource path="res://environments/ObstacleManager.tscn" type="PackedScene" id=7]
[ext_resource path="res://items/Pickup.tscn" type="PackedScene" id=8]
[ext_resource path="res://agents/GameCamera.tscn" type="PackedScene" id=9]
[ext_resource path="res://inventory/InventoryManager.tscn" type="PackedScene" id=10]

Expand Down Expand Up @@ -35,13 +34,6 @@ position = Vector2( 11.1118, 10.3181 )

[node name="Pickups" type="Node2D" parent="."]

[node name="Pickup" parent="Pickups" instance=ExtResource( 8 )]
position = Vector2( 1245.08, 1220.1 )

[node name="Pickup2" parent="Pickups" instance=ExtResource( 8 )]
position = Vector2( 1390.92, 2052.33 )
type = 1

[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 1 )

Expand Down
56 changes: 22 additions & 34 deletions ui/HUD.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,61 +112,49 @@ public void UpdateWeaponAmmo(int current, int max, Weapon.WeaponOrder weaponOrde
// If not 0 ammo, disable the out ammo message
if (current == 0)
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoOut")).Visible = true;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Visible = true;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Text = "AMMO OUT";
}
else
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoOut")).Visible = false;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Visible = false;
}
}

public void UpdateWeaponAmmoOut(Weapon.WeaponOrder weaponOrder)
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoOut")).Visible = true;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Visible = true;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Text = "AMMO OUT";
}

public void UpdateWeaponReload(Weapon.WeaponOrder weaponOrder, bool reload)
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponReloading")).Visible = reload;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Visible = reload;

if (reload)
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmoMessage")).Text = "RELOADING";
}
}


public void UpdateWeapon(Weapon.WeaponType weaponType, Weapon.WeaponOrder weaponOrder)
public void UpdateWeapon(ItemResource itemResource, Weapon.WeaponOrder weaponOrder)
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponName")).Text = "" + weaponType.ToString();
Sprite symbol = ((Sprite)GetNode("controlGame/" + weaponOrder + "WeaponControl/spWeaponSymbol"));

if (weaponType == Weapon.WeaponType.LASER)
{
symbol.RegionRect = new Rect2(0f, 263f, 96f, 93f);
symbol.Scale = new Vector2(0.5f, 0.25f) * 0.75f;
}
else if (weaponType == Weapon.WeaponType.RIFILE)
{
symbol.RegionRect = new Rect2(763f, 39f, 71f, 28f);
symbol.Scale = new Vector2(1f, 1f) * 0.75f;
}
else if (weaponType == Weapon.WeaponType.MISSLELAUNCHER)
{
symbol.RegionRect = new Rect2(510f, 70f, 53f, 39f);
symbol.Scale = new Vector2(1f, 1f) * 0.75f;
}
else if (weaponType == Weapon.WeaponType.SHIELD)
{
symbol.RegionRect = new Rect2(183f, 295f, 45f, 62f);
symbol.Scale = new Vector2(1f, 1f) * 0.75f;
}
else if (weaponType == Weapon.WeaponType.LIGHTSABER)
{
symbol.RegionRect = new Rect2(411f, 3f, 77f, 18f);
symbol.Scale = new Vector2(1f, 1f) * 0.75f;
}
TextureRect symbol = (TextureRect)GetNode("controlGame/" + weaponOrder + "WeaponControl/textureWeaponSymbol");

if (weaponType != Weapon.WeaponType.EMPTY)
if (itemResource == null)
{
symbol.Scale = Vector2.Zero;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponName")).Text = "NO WEAPON";
symbol.RectScale = Vector2.Zero;
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponAmmo")).Text = "0/0";
}
else
{
((Label)GetNode("controlGame/" + weaponOrder + "WeaponControl/lblWeaponName")).Text = itemResource.ItemID + " " + itemResource.Name;
symbol.Texture = itemResource.ReferenceTexture;
symbol.RectScale = new Vector2(0.5f, 0.5f);
}
}

public void UpdateHealth(int value)
Expand Down

0 comments on commit 30c160c

Please sign in to comment.