Files
hotdesking/Gameplay/Ball.cs

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()
// {
// }
}