104 lines
2.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|