using Godot; using System; using System.Collections.Generic; using System.Linq; public partial class PlayerManager : Manager { public Ball _hoveredBall = null; public PlaceholderBall _hoveredPlaceholderBall = null; public PlaceholderBall _heldPlaceholderBall = null; public Worker _hoveredWorker = null; public ManagerPanel _managerPanel = null; public Panel _ballReturn = null; public override void _Ready() { SetSprite("res://art/ness.png"); _managerPanel = GetNode("Panel"); _managerPanel.SetPosition(new Vector2(100, 150)); _managerPanel.SetSprite(_imagePath); _managerPanel.SetValue(_health); _managerPanel.SetMax(_healthMax); Ball newBall; newBall = _ballScene.Instantiate(); newBall.SetSprite("res://art/cue_ball.png"); _balls.Add(0, newBall); for (int i = 1; i <= 7; i++) { newBall = _ballScene.Instantiate(); newBall.SetSprite("res://art/ball_" + i + ".png"); _balls.Add(i, newBall); } } public override void _Process(double DELTA_) { // Panel ballReturn = GetNode("Panel").GetNode("BallReturn"); // WORKER.ChangeBallPosition(new Vector2(ballReturn.GlobalPosition.X + ballReturn.Size.X / 2, ballReturn.GlobalPosition.Y + 50)); if (_ready) { if ((_selectedBall == null || _selectedBall != _hoveredBall) && (_hoveredBall?._available ?? false)) { if (Input.IsActionJustReleased("left_click")) { _selectedBall = _hoveredBall; _selectedBall._selected = true; _cue.Don(_selectedBall.Position); } } else if (Input.IsActionJustReleased("right_click")) { _selectedBall._selected = false; _selectedBall = null; _cue.Doff(); } else if (_hoveredBall == null) { if (Input.IsActionJustReleased("left_click") && _selectedBall != null && _cue._power == 0) { _selectedBall._selected = false; _selectedBall = null; _cue.Doff(); } } } else { if (_heldPlaceholderBall != null) { Vector2 mousePosition = GetViewport().GetMousePosition(); _heldPlaceholderBall.Position = mousePosition; if (Input.IsActionJustReleased("left_click")) { int index = _placeholderBalls.Single(p => p.Value == _heldPlaceholderBall).Key; PlaceBall(_balls[index], mousePosition); _heldPlaceholderBall = null; if (_balls.Where(b => b.Value._placed).ToList().Count >= _placeLimit) { _ready = true; } } } else { if (Input.IsActionJustReleased("left_click")) { _heldPlaceholderBall = _hoveredPlaceholderBall; } } } } public override void ChangeHealth(int CHANGE) { base.ChangeHealth(CHANGE); GetNode("Panel").SetValue(_health); } public override void Start() { for (int i = 0; i < _placeholderBalls.Count; i++) { _placeholderBalls[i].Position = new Vector2(_ballReturn.GlobalPosition.X + _ballReturn.Size.X / 2, _ballReturn.GlobalPosition.Y + 50 * (i + 1)); _placeholderBalls[i].AddChild(_placeholderBalls[i]); } } public void HoverBall(Ball BALL, bool HOVERED) { if (HOVERED) { if (_hoveredBall == null) { _hoveredBall = BALL; } } else { if (_hoveredBall == BALL) { _hoveredBall = null; } } } }