Files
hotdesking/Gameplay/Battle.cs
2025-07-31 03:05:11 -04:00

124 lines
2.6 KiB
C#

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<Sprite2D> _potted = new();
public List<Ball> _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<Manager>() == _player)
// {
// // _player.PotWorker(ball.GetParent<Worker>());
// }
// 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>("Table");
Ball eightBall = COMPUTER._balls[0];
List<Ball> computerBalls = COMPUTER._balls.Values.ToList();
computerBalls.RemoveAt(0);
Ball cueBall = PLAYER._balls[0];
List<Ball> playerBalls = PLAYER._balls.Values.ToList();
playerBalls.RemoveAt(0);
List<Ball> 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;
}
}
}