Wednesday, 10 September 2025 01:31:36

This commit is contained in:
2025-09-10 01:31:39 -04:00
parent ac25e55bf3
commit 23700e2bcf
33 changed files with 411 additions and 374 deletions

View File

@@ -6,16 +6,20 @@ using System.Linq;
/// TODO alter code to player vs computer to account for differing logic
public partial class Manager : Node2D
{
public bool _dead, _ready;
public bool _dead, _ready, _moving;
public int _ballsMoving = 0, _health = 10, _healthMax, _speed = 5;
public string _imagePath;
public Vector2 _deskPosition;
public List<Vector2> _movements = new();
public CollisionShape2D _startArea;
public ManagerPanel _managerPanel = null;
public Sprite2D _image;
public Desk _desk = null;
public Manager _opponent;
public List<Worker> _workers = new();
public Worker _hoveredWorker, _selectedWorker, _heldWorker;
public Node _workerNode;
public List<Tchotchke> _tchotckes = new();
public Worker _hoveredWorker, _selectedWorker, _heldWorker;
// public List<Tchotchke> _tchotckes = new();
public override void _Ready()
{
@@ -25,103 +29,82 @@ public partial class Manager : Node2D
SetSprite("res://art/ness.png");
_managerPanel = GetNode<ManagerPanel>("Panel");
_desk = GetNode<Desk>("Desk");
_deskPosition = new Vector2(1, 1);
// _movements.Insert(0, _deskPosition);
_image = GetNode<Sprite2D>("Image");
_image.GlobalPosition = _desk.GetPositionFromAddress(1, 1);
_managerPanel.SetManager(this);
Worker newWorker = Globals.Instance._workerScene.Instantiate<Worker>();
newWorker.Position = Globals.Instance._screenCenter;
newWorker._manager = this;
_workerNode.AddChild(newWorker);
_workers.Add(newWorker);
newWorker = Globals.Instance._workerScene.Instantiate<Worker>();
newWorker.Position = Globals.Instance._screenCenter;
newWorker._manager = this;
_workerNode.AddChild(newWorker);
_workers.Add(newWorker);
newWorker = Globals.Instance._workerScene.Instantiate<Worker>();
newWorker.Position = Globals.Instance._screenCenter;
newWorker._manager = this;
_workerNode.AddChild(newWorker);
_workers.Add(newWorker);
newWorker = Globals.Instance._workerScene.Instantiate<Worker>();
newWorker.Position = Globals.Instance._screenCenter;
newWorker._manager = this;
_workerNode.AddChild(newWorker);
_workers.Add(newWorker);
// for (int i = 0; i < _workers.Count; i++)
// {
// _workers[i]._healthBar.Position = _managerPanel.GetNode<Panel>("Team").GetNode<Panel>("T"+(i+1)).GlobalPosition;
// }
// Tchotchke newTchotchke = ResourceLoader.Load<PackedScene>("res://Gameplay/Tchotchkes/awfully_hot_coffee_pot.tscn").Instantiate<Tchotchke>();
// newTchotchke.Position = new Vector2(Globals.Instance._screenSize.X - 100, Globals.Instance._screenCenter.Y);
// AddChild(newTchotchke);
// _tchotckes.Add(newTchotchke);
for (int i = 0; i < Globals.Instance._random.Next(3, 6); i++)
{
AddWorker(null);
}
}
public override void _Process(double DELTA_)
public override void _PhysicsProcess(double DELTA_)
{
if (Globals.Instance._battleRunning)
{
ChainMovement();
}
else
{
MoveChain();
}
ChainMovement();
ChainSelection();
}
public void AddWorker(Worker NEWWORKER)
{
Worker newWorker = NEWWORKER ?? Globals.Instance._workerScene.Instantiate<Worker>();
newWorker._deskPosition = new Vector2(1, 1);
newWorker.Position = _desk.GetPositionFromAddress(1, 1);
newWorker._manager = this;
_workers.Add(newWorker);
_workerNode.AddChild(newWorker);
newWorker.SetHovered += SetHoveredWorker;
}
public void ChainMovement()
{
Vector2 mousePosition = GetGlobalMousePosition();
// _workers[0].LookAt(mousePosition);
Vector2 mouseOffset = mousePosition - _workers[0].GlobalPosition;
if (mouseOffset.Length() > _workers[0]._size)
Vector2 direction = Vector2.Zero;
if (Input.IsActionJustPressed("move_up"))
{
Vector2 mouseOffsetNormal = mouseOffset.Normalized();
_workers[0].GlobalPosition += mouseOffsetNormal * _speed;
_workers[0]._distanceTraveled += _speed;
_workers[0]._moves.Insert(0, _workers[0].GlobalPosition);
direction = Vector2.Up;
}
else if (Input.IsActionJustPressed("move_down"))
{
direction = Vector2.Down;
}
else if (Input.IsActionJustPressed("move_left"))
{
direction = Vector2.Left;
}
else if (Input.IsActionJustPressed("move_right"))
{
direction = Vector2.Right;
}
for (int i = 1; i < _workers.Count; i++)
if (direction != Vector2.Zero)
{
Vector2 newPostion = _desk.GetPositionFromAddress((int)(_deskPosition.Y + direction.Y), (int)(_deskPosition.X + direction.X));
if (newPostion != new Vector2(-1, -1))
{
if (_workers[i - 1]._distanceTraveled > (_workers[i - 1]._size + _workers[i]._size) * 1.2f)
if (_movements.Count > 0)
{
_workers[i]._distanceTraveled += _speed;
_workers[i].GlobalPosition = _workers[i - 1]._moves[^1];
_workers[i]._moves.Insert(0, _workers[i - 1]._moves[^1]);
_workers[i - 1]._moves.RemoveAt(_workers[i - 1]._moves.Count - 1);
for (int i = 0; i < _workers.Count && i < _movements.Count; i++)
{
_workers[i].GlobalPosition = _desk.GetPositionFromAddress((int)_movements[i].Y, (int)_movements[i].X);
}
}
_deskPosition += direction;
_movements.Insert(0, _deskPosition);
_image.GlobalPosition = newPostion;
}
}
}
public void ChangeHealth(int CHANGE)
public void ChainSelection()
{
_health += CHANGE;
_health = Math.Min(_health, _healthMax);
if (_health < 0)
{
_dead = true;
_health = 0;
}
GetNode<ManagerPanel>("Panel").SetValue(_health);
}
public void MoveChain()
{
_hoveredWorker = _workers.SingleOrDefault(w => !w._selected && !w._held && w._hovered, null);
if (_heldWorker != null)
{
_heldWorker.GlobalPosition = GetGlobalMousePosition();
if (_hoveredWorker != null)
if (_hoveredWorker != null && _heldWorker != _hoveredWorker)
{
SwapPositions(_heldWorker, _hoveredWorker);
_hoveredWorker._hovered = false;
@@ -160,16 +143,34 @@ public partial class Manager : Node2D
}
}
public void ChangeHealth(int CHANGE)
{
_health += CHANGE;
_health = Math.Min(_health, _healthMax);
if (_health < 0)
{
_dead = true;
_health = 0;
}
GetNode<ManagerPanel>("Panel").SetValue(_health);
}
public void SetSprite(string PATH)
{
_imagePath = PATH;
}
// public void Start()
// {
// _workers[0].GlobalPosition = _desk.GetPositionFromAddress(1, 1);
// }
public void SwapPositions(Worker A, Worker B)
{
Vector2 positionA = A.Position, positionB = B.Position, chainPositionA = A._chainPosition, chainPositionB = B._chainPosition;
Vector2 chainPositionA = A._chainPosition, chainPositionB = B._chainPosition;
List<Vector2> movesA = new(A._moves), movesB = new(B._moves);
// A.Position = positionB;
B.Position = chainPositionA;
A._chainPosition = chainPositionB;
B._chainPosition = chainPositionA;
@@ -180,5 +181,17 @@ public partial class Manager : Node2D
_workers[indexA] = B;
_workers[indexB] = C;
}
private void SetHoveredWorker(Worker HOVEREDWORKER)
{
if (HOVEREDWORKER._hovered)
{
_hoveredWorker = HOVEREDWORKER;
}
else
{
_hoveredWorker = null;
}
}
}