182 lines
3.0 KiB
C#
182 lines
3.0 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Runtime;
|
|
/// TODO create a few types of balls
|
|
public partial class Ball : RigidBody2D
|
|
{
|
|
[Signal]
|
|
public delegate void OnHoverEventHandler(Ball THIS, bool HOVERED);
|
|
[Signal]
|
|
public delegate void OnCollisionEventHandler(Ball THIS, Ball TARGET);
|
|
[Signal]
|
|
public delegate void OnLaunchEventHandler(Ball THIS);
|
|
[Signal]
|
|
public delegate void OnMovementEventHandler(Ball THIS, bool MOVING);
|
|
|
|
public bool _active = false, _placed = false, _potted = false, _available = false, _hovered = false, _selected = false, _aimed = false, _launched = false, _moving = false, _isCue = false;
|
|
public float _moveThreshold = 5.0f;
|
|
public string _id, _imagePath = null;
|
|
public Vector2I _rackPosition = new Vector2I(0, 0);
|
|
public Manager _owner = null;
|
|
|
|
public override void _Process(double DELTA_)
|
|
{
|
|
if (LinearVelocity.Length() > 0 && LinearVelocity.Length() < _moveThreshold)
|
|
{
|
|
Sleeping = true;
|
|
if (_moving)
|
|
{
|
|
ProcessOnStop();
|
|
_moving = false;
|
|
EmitSignal(SignalName.OnMovement, this, false);
|
|
if (_launched)
|
|
{
|
|
_launched = false;
|
|
}
|
|
}
|
|
}
|
|
else if (LinearVelocity.Length() >= _moveThreshold && !Sleeping)
|
|
{
|
|
ProcessOnMovement();
|
|
if (!_moving)
|
|
{
|
|
_moving = true;
|
|
EmitSignal(SignalName.OnMovement, this, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Launch()
|
|
{
|
|
ProcessOnLaunch();
|
|
}
|
|
|
|
public void Pot()
|
|
{
|
|
Sleeping = true;
|
|
_active = false;
|
|
_placed = false;
|
|
_potted = true;
|
|
_moving = false;
|
|
}
|
|
|
|
public void SetSprite(string PATH)
|
|
{
|
|
_imagePath = PATH;
|
|
GetNode<Sprite2D>("Image").Texture = GD.Load<Texture2D>(PATH);
|
|
}
|
|
|
|
private void OnBodyEntered(Node2D TARGET)
|
|
{
|
|
if (TARGET is Ball)
|
|
{
|
|
Ball target = (Ball)TARGET;
|
|
ProcessOnCollision(target);
|
|
}
|
|
}
|
|
|
|
private void OnMouseEntered()
|
|
{
|
|
if (_active)
|
|
{
|
|
_hovered = true;
|
|
EmitSignal(SignalName.OnHover, this, true);
|
|
}
|
|
}
|
|
|
|
private void OnMouseExited()
|
|
{
|
|
if (_active)
|
|
{
|
|
_hovered = false;
|
|
EmitSignal(SignalName.OnHover, this, false);
|
|
}
|
|
}
|
|
|
|
|
|
//Processes
|
|
// public virtual void ProcessOnAdd()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnBattleStart()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnBattleEnd()
|
|
// {
|
|
|
|
// }
|
|
|
|
public virtual void ProcessOnCollision(Ball TARGET)
|
|
{
|
|
EmitSignal(SignalName.OnCollision, this, TARGET);
|
|
}
|
|
|
|
// public virtual void ProcessOnCreation()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnCritical()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnDeath()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnDefend()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnExpiration()
|
|
// {
|
|
|
|
// }
|
|
|
|
public virtual void ProcessOnLaunch()
|
|
{
|
|
_launched = true;
|
|
EmitSignal(SignalName.OnLaunch, this);
|
|
}
|
|
|
|
public virtual void ProcessOnMovement()
|
|
{
|
|
|
|
}
|
|
|
|
// public virtual void ProcessOnRemove()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnSell()
|
|
// {
|
|
|
|
// }
|
|
|
|
public virtual void ProcessOnStop()
|
|
{
|
|
|
|
}
|
|
|
|
// public virtual void ProcessOnTurnEnd()
|
|
// {
|
|
|
|
// }
|
|
|
|
// public virtual void ProcessOnTurnStart()
|
|
// {
|
|
|
|
// }
|
|
|
|
|
|
|
|
}
|