Files
hotdesking/Gameplay/Manager.cs
2025-08-04 02:42:51 -04:00

104 lines
2.3 KiB
C#

using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
/// TODO alter code to player vs computer to account for differing logic
public partial class Manager : Node
{
public bool _dead, _ready;
public int _ballsMoving = 0, _health = 10, _healthMax, _placeLimit = 8;
public string _imagePath;
public Node _selectedNode = null;
public CollisionShape2D _startArea;
public Cue _cue;
public Manager _opponent;
public List<Ball> _balls = new();
public List<BallSprite> _ballSprites = new();
public List<Worker> _workers = new();
// PACKED SCENES
public PackedScene _ballScene = ResourceLoader.Load<PackedScene>("res://Gameplay/ball.tscn");
public PackedScene _ballSpriteScene = ResourceLoader.Load<PackedScene>("res://Gameplay/ball_sprite.tscn");
public PackedScene _cueScene = ResourceLoader.Load<PackedScene>("res://Gameplay/cue.tscn");
public PackedScene _workerScene = ResourceLoader.Load<PackedScene>("res://Gameplay/worker.tscn");
public override void _Ready()
{
_healthMax = _health;
_cue = GetNode<Cue>("Cue");
_cue.Doff();
}
public virtual void ChangeHealth(int CHANGE)
{
_health += CHANGE;
_health = Math.Min(_health, _healthMax);
if (_health < 0)
{
_dead = true;
_health = 0;
}
}
public virtual void PlaceBall(Ball BALL, Vector2 POSITION)
{
BALL._available = true;
BALL.Position = POSITION;
BALL._active = true;
BALL._placed = true;
BALL._potted = false;
BALL._active = true;
if (!GetChildren().Contains(BALL))
{
AddChild(BALL);
}
}
public virtual void PotBall(Ball BALL)
{
BALL.Sleeping = true;
BALL._available = false;
BALL._moving = false;
BALL._active = false;
BALL._placed = false;
BALL._potted = true;
BALL._active = false;
if (GetChildren().Contains(BALL))
{
RemoveChild(BALL);
}
}
public void SetSprite(string PATH)
{
_imagePath = PATH;
}
public virtual void Start()
{
}
private void OnCueShoot(Vector2 IMPULSE)
{
if (_selectedNode is Ball)
{
Ball selectedBall = (Ball)_selectedNode;
if (selectedBall != null && selectedBall._placed)
{
selectedBall.ApplyCentralImpulse(IMPULSE);
selectedBall._selected = false;
selectedBall.Launch();
_selectedNode = null;
selectedBall = null;
_cue.Doff();
}
}
}
}