mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-11 21:35:54 +00:00
Basic weapon direction
This commit is contained in:
parent
9362f66fdf
commit
0146de8ab5
4 changed files with 92 additions and 6 deletions
|
|
@ -14,6 +14,10 @@ public partial class PlayerWeaponProvider : Node2D
|
|||
[Export] public PackedScene WeaponTemplate { get; private set; }
|
||||
|
||||
[Export] public double WeaponSwitchCooldown { get; private set; } = 0.5d;
|
||||
|
||||
[Export] public Marker2D WeaponRightOffset { get; private set; } // local offset when facing right
|
||||
[Export] public Marker2D WeaponLeftOffset { get; private set; } // local offset when facing left
|
||||
|
||||
public Array<Weapon> EquippedWeapons { get; set; } = [];
|
||||
|
||||
private int _currentWeaponIndex = 0;
|
||||
|
|
@ -64,6 +68,8 @@ public partial class PlayerWeaponProvider : Node2D
|
|||
|
||||
public void Update(double delta)
|
||||
{
|
||||
RotateWeapon();
|
||||
|
||||
if (!_switching) return;
|
||||
_switchCooldown += delta;
|
||||
if (_switchCooldown >= WeaponSwitchCooldown)
|
||||
|
|
@ -72,6 +78,24 @@ public partial class PlayerWeaponProvider : Node2D
|
|||
_switchCooldown = 0d;
|
||||
}
|
||||
}
|
||||
|
||||
private void RotateWeapon()
|
||||
{
|
||||
if (EquippedWeapon is null) return;
|
||||
|
||||
EquippedWeapon.RotateWeapon(StorageModule.FacingDirection, WeaponLeftOffset.Position, WeaponRightOffset.Position);
|
||||
|
||||
|
||||
|
||||
// EquippedWeapon.SetRotation(angle + Mathf.Pi / 2.0f);
|
||||
//
|
||||
//
|
||||
//
|
||||
// EquippedWeapon.FlipH = facingLeft;
|
||||
//
|
||||
// // 3. Position on correct side (assuming EquippedWeapon is a child of the Player node)
|
||||
// EquippedWeapon.Position = facingLeft ? WeaponLeftOffset : WeaponRightOffset;
|
||||
}
|
||||
|
||||
private void OnInventoryWeaponEquipped(string itemKey)
|
||||
{
|
||||
|
|
@ -192,7 +216,7 @@ public partial class PlayerWeaponProvider : Node2D
|
|||
var weapon = this.CreateSibling<Weapon>(WeaponTemplate);
|
||||
weapon.WeaponData = startingItem.WeaponData;
|
||||
|
||||
weapon.Texture = startingItem.InventorySprite;
|
||||
weapon.Sprite.Texture = startingItem.InventorySprite;
|
||||
|
||||
this.AddWeapon(weapon);
|
||||
return weapon;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ using Cirno.Scripts.Components;
|
|||
using Cirno.Scripts.Resources;
|
||||
using Cirno.Scripts.Utils;
|
||||
|
||||
public partial class Weapon : Sprite2D
|
||||
public partial class Weapon : Node2D
|
||||
{
|
||||
|
||||
[Export]
|
||||
|
|
@ -18,6 +18,12 @@ public partial class Weapon : Sprite2D
|
|||
[Export]
|
||||
public Marker2D Muzzle { get; set; }
|
||||
|
||||
[Export]
|
||||
public Marker2D Pivot { get; set; }
|
||||
|
||||
[Export]
|
||||
public Sprite2D Sprite { get; private set; }
|
||||
|
||||
[Signal]
|
||||
public delegate void ShootingEventHandler();
|
||||
|
||||
|
|
@ -189,4 +195,42 @@ public partial class Weapon : Sprite2D
|
|||
|
||||
_cooldownTimer.Start(WeaponData?.RateOfFire ?? 0);
|
||||
}
|
||||
|
||||
public void RotateWeapon(Vector2 facingDirection, Vector2 leftPosition, Vector2 rightPosition)
|
||||
{
|
||||
bool facingLeft = facingDirection.X < 0;
|
||||
|
||||
if (facingLeft)
|
||||
{
|
||||
Sprite.Position = leftPosition - Pivot.Position;
|
||||
Sprite.FlipH = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Sprite.Position = rightPosition - Pivot.Position;
|
||||
Sprite.FlipH = false;
|
||||
}
|
||||
|
||||
// var angle = Mathf.Atan2(StorageModule.FacingDirection.X, StorageModule.FacingDirection.Y);
|
||||
//
|
||||
// // Weapon is drawn pointing right, but we want it to point "up" along aim vector.
|
||||
// // So we apply a 90° offset (π/2), but...
|
||||
// // If facing left, we also add 180° (π) to "un-mirror" it visually.
|
||||
// float rotationOffset = (Mathf.Pi / 2f);
|
||||
//
|
||||
// if (facingLeft)
|
||||
// {
|
||||
// EquippedWeapon.Sprite.Rotation = -(angle + rotationOffset);// + rotationOffset + Mathf.Pi;
|
||||
// EquippedWeapon.Sprite.Position = WeaponLeftOffset;
|
||||
// EquippedWeapon.Sprite.FlipH = true; // disable FlipH to avoid messing with rotation
|
||||
// EquippedWeapon.Sprite.FlipV = false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EquippedWeapon.Sprite.Rotation = angle;// + rotationOffset;
|
||||
// EquippedWeapon.Sprite.Position = WeaponRightOffset;
|
||||
// EquippedWeapon.Sprite.FlipH = false;
|
||||
// EquippedWeapon.Sprite.FlipV = true;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue