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

97 lines
2.1 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 _health = 10, _healthMax, _placeLimit = 8;
public string _imagePath;
public Cue _cue;
public List<Worker> _workers = new();
public List<Ball> _balls = new();
public List<BallSprite> _ballSprites = new();
public Ball _selectedBall = null;
public CollisionShape2D _startArea;
// 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");
}
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 (_selectedBall != null && _selectedBall._placed)
{
_selectedBall.GetNode<Ball>("Ball").ApplyCentralImpulse(IMPULSE);
_selectedBall._selected = false;
_selectedBall.Launch();
_selectedBall = null;
_cue.Doff();
}
}
}