using Godot; using System; using System.Collections.Generic; using System.Linq; public partial class Battle : Node { public bool _current; public Vector2 _startPosition = new Vector2(890, 340); public Manager _turn; public List _potted = new(); public List _balls = new(); public Table _table; public override void _Ready() { } public override void _Process(double DELTA_) { CheckMovement(); } public void CheckMovement() { bool movementCheck = _balls.Any(b => b._moving); if (movementCheck) { if (!Globals.Instance._anyMovement) { Globals.Instance._anyMovement = true; //EmitSignal(SignalName.DetectMovement, true); } } else { if (Globals.Instance._anyMovement) { Globals.Instance._anyMovement = false; //EmitSignal(SignalName.DetectMovement, false); } } } // public void PotBall(Node2D BODY) // { // if (BODY is Ball) // { // Ball ball = (Ball)BODY; // if (ball.GetParentOrNull() == _player) // { // // _player.PotWorker(ball.GetParent()); // } // else // { // ball.Pot(); // _balls.Remove(ball); // RemoveChild(ball); // ball.QueueFree(); // } // } // } public void Start(PlayerManager PLAYER, ComputerManager COMPUTER) { // _current = true; // // GenerateBalls(); Globals.Instance._currentBattle = this; // _player.Start(); int count = 1; int columns = 0; int diameter = 36; Table table = GetNode("Table"); Ball eightBall = COMPUTER._balls[0]; List computerBalls = COMPUTER._balls.Values.ToList(); computerBalls.RemoveAt(0); Ball cueBall = PLAYER._balls[0]; List playerBalls = PLAYER._balls.Values.ToList(); playerBalls.RemoveAt(0); List randomRack = new(); randomRack.AddRange(computerBalls); randomRack.AddRange(playerBalls); int n = randomRack.Count; while (n > 1) { n--; int k = Globals.Instance._random.Next(n + 1); Ball value = randomRack[k]; randomRack[k] = randomRack[n]; randomRack[n] = value; } randomRack.Insert(4, eightBall); randomRack.Insert(0, cueBall); Ball rackBall; for (int i = 0; i < 5; i++) { for (int j = 0; j <= columns; j++) { Vector2 position = new Vector2(table.GlobalPosition.X - (i * (diameter / 2)) + (j * (diameter)), table.GlobalPosition.Y - table.Texture.GetSize().Y / 4 - (i * diameter)); rackBall = randomRack[count]; if (PLAYER._balls.ContainsValue(rackBall)) { PLAYER.PlaceBall(rackBall, position); } if (COMPUTER._balls.ContainsValue(rackBall)) { COMPUTER.PlaceBall(rackBall, position); } count += 1; } columns += 1; } } }