using Godot; using System; using System.Collections.Generic; using System.Linq; public partial class Manager : Node { public bool _dead, _ready; public int _health, _healthMax; public Cue _cue; public Worker _lead; public List _team = new(); public Worker _hoveredWorker = null; public Worker _selectedWorker = null; public Worker _heldWorker = null; public static Manager _Create() { PackedScene scene = ResourceLoader.Load("res://Gameplay/manager.tscn"); Manager newManager = scene.Instantiate(); Worker newWorker = Worker._Create(); newWorker.GetNode("Ball").SetSprite("res://art/cue_ball.png"); newWorker.GetNode("TempBall").SetSprite("res://art/cue_ball.png"); // newWorker.ChangeBallPosition(new Vector2(100, 100)); newManager._lead = newWorker; newManager._team.Add(newWorker); newManager.AddChild(newWorker); newManager._health = 10; newManager._healthMax = newManager._health; newManager.GetNode("Panel").SetSprite("res://art/ness.png"); newManager.GetNode("Panel").SetMax(newManager._healthMax); newManager.GetNode("Panel").SetValue(newManager._health); return newManager; } public override void _Process(double DELTA_) { if (_team.Any(w => w._hovered)) { _hoveredWorker = _team.Single(w => w._hovered); } else { _hoveredWorker = null; } if (_ready) { } else { if (_heldWorker == null) { if (Input.IsActionJustReleased("left_click")) { if (!_hoveredWorker._placed) { _heldWorker = _hoveredWorker; } } } else { Vector2 mousePosition = GetViewport().GetMousePosition(); _heldWorker._tempBall.Position = mousePosition; if (Input.IsActionJustReleased("left_click")) { _heldWorker.PlaceBall(mousePosition); _heldWorker = null; if (_team.Where(w => w._placed).ToList().Count >= _team.Count) { _ready = true; } } } } // if (!Globals.Instance._anyMovement) // { // if (_team.Any(w => w._hovered)) // { // _hoveredWorker = _team.Single(w => w._hovered); // } // else // { // _hoveredWorker = null; // } // if (!_ready) // { // if (_heldWorker == null) // { // if (Input.IsActionJustReleased("left_click")) // { // if (!_hoveredWorker._placed) // { // _heldWorker = _hoveredWorker; // } // } // } // else // { // Vector2 mousePosition = GetViewport().GetMousePosition(); // _heldWorker.Position = mousePosition; // if (Input.IsActionJustReleased("left_click")) // { // PlaceWorker(_heldWorker, mousePosition); // _heldWorker = null; // if (_team.Where(w => w._placed).ToList().Count >= _team.Count) // { // _ready = true; // } // } // } // } // else // { // if ((_selectedWorker == null || _selectedWorker != _hoveredWorker) && (_hoveredWorker?._available ?? false)) // { // if (Input.IsActionJustReleased("left_click")) // { // _selectedWorker = _hoveredWorker; // _selectedWorker._selected = true; // _cue.Don(_selectedWorker.GetNode("Ball").Position); // } // } // else if (Input.IsActionJustReleased("right_click")) // { // _selectedWorker._selected = false; // _selectedWorker = null; // _cue.Doff(); // } // else if (_hoveredWorker == null) // { // if (Input.IsActionJustReleased("left_click") && _selectedWorker != null && _cue._power == 0) // { // _selectedWorker._selected = false; // _selectedWorker = null; // _cue.Doff(); // } // } // } // } } public void ChangeHealth(int CHANGE) { _health += CHANGE; GD.Print("Health: " + _health); _health = Math.Min(_health, _healthMax); if (_health < 0) { _dead = true; _health = 0; } GetNode("Panel").SetValue(_health); } // public void ReturnWorker(Worker WORKER) // { // Panel ballReturn = GetNode("Panel").GetNode("BallReturn"); // int ballsInReturn = _team.Where(b => !b._placed).ToList().Count; // WORKER.GetNode("Ball").Position = ; // WORKER.GetNode("Ball").GetNode("Bounds").Disabled = true; // AddChild(WORKER); // } public void PlaceWorker(Worker WORKER, Vector2 POSITION) { WORKER._placed = true; WORKER._potted = false; WORKER.ChangeBallPosition(POSITION); WORKER.GetNode("Bounds").Disabled = false; } public void PotWorker(Worker WORKER) { Panel ballReturn = GetNode("Panel").GetNode("BallReturn"); WORKER.PotBall(); WORKER.ChangeBallPosition(new Vector2(ballReturn.GlobalPosition.X + ballReturn.Size.X / 2, ballReturn.GlobalPosition.Y + 50)); _ready = false; } public void SetSprite(string PATH) { GetNode("Image").Texture = GD.Load(PATH); } public void Start() { Panel ballReturn = GetNode("Panel").GetNode("BallReturn"); for (int i = 0; i < _team.Count; i++) { _team[i]._ball.GetNode("Bounds").Disabled = true; if (_team[i].GetNodeOrNull("Ball") != null) { _team[i].RemoveChild(_team[i]._ball); } _team[i].AddChild(_team[i]._tempBall); _team[i]._tempBall.Position = new Vector2(ballReturn.GlobalPosition.X + ballReturn.Size.X / 2, ballReturn.GlobalPosition.Y + 50 * (i + 1)); // _team[i].Position = new Vector2(ballReturn.GlobalPosition.X + ballReturn.Size.X / 2, ballReturn.GlobalPosition.Y + 50 * (i + 1)); // AddChild(_team[i]); } } private void OnCueShoot(Vector2 IMPULSE) { if (_selectedWorker != null && _selectedWorker._placed) { _selectedWorker.GetNode("Ball").ApplyCentralImpulse(IMPULSE); _selectedWorker._selected = false; _selectedWorker._launched = true; _selectedWorker = null; _cue.Doff(); } } }