7-8-25 6:02pm
This commit is contained in:
181
Gameplay/Marble.cs
Normal file
181
Gameplay/Marble.cs
Normal file
@@ -0,0 +1,181 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class Marble : RigidBody2D
|
||||
{
|
||||
// Don't forget to rebuild the project so the editor knows about the new signal.
|
||||
|
||||
[Signal]
|
||||
public delegate void HitEventHandler();
|
||||
[Signal]
|
||||
public delegate void HoverEventHandler();
|
||||
[Signal]
|
||||
public delegate void HoverFalseEventHandler();
|
||||
[Signal]
|
||||
public delegate void SelectEventHandler();
|
||||
[Signal]
|
||||
public delegate void SelectFalseEventHandler();
|
||||
[Signal]
|
||||
public delegate void AimEventHandler();
|
||||
[Signal]
|
||||
public delegate void AimFalseEventHandler();
|
||||
[Signal]
|
||||
public delegate void LaunchEventHandler();
|
||||
[Signal]
|
||||
public delegate void MoveEventHandler();
|
||||
[Signal]
|
||||
public delegate void StopEventHandler();
|
||||
|
||||
[Export]
|
||||
public int Speed { get; set; } = 400; // How fast the player will move (pixels/sec).
|
||||
|
||||
public bool Hovered = false, Selected = false, Aimed = false, Launched = false, Moving = false;
|
||||
public Vector2 Force = Vector2.Zero, Velocity = Vector2.Zero;
|
||||
public Vector2 ScreenSize; // Size of the game window.
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
ScreenSize = GetViewportRect().Size;
|
||||
//Hide();
|
||||
}
|
||||
|
||||
public override void _PhysicsProcess(double delta) //THIS IS LIKE THE UPDATE FUNCTION
|
||||
{
|
||||
TrySelect();
|
||||
TryAim();
|
||||
TryLaunch();
|
||||
TryMovement();
|
||||
}
|
||||
|
||||
public void ProcessOnBump(Node2D body)
|
||||
{
|
||||
GD.Print(body);
|
||||
}
|
||||
|
||||
public void ProcessOnMovement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Start(Vector2 position)
|
||||
{
|
||||
Position = position;
|
||||
Show();
|
||||
GetNode<CollisionShape2D>("CollisionShape2D").Disabled = false;
|
||||
}
|
||||
|
||||
public void TryAim()
|
||||
{
|
||||
if (Selected && Input.IsActionPressed("left_click") && !Hovered && !Aimed)
|
||||
{
|
||||
Aimed = true;
|
||||
EmitSignal(SignalName.Aim);
|
||||
}
|
||||
|
||||
if (Aimed)
|
||||
{
|
||||
Vector2 mousePosition = GetGlobalMousePosition();
|
||||
Force = Position - mousePosition;
|
||||
|
||||
if (!Input.IsActionPressed("left_click"))
|
||||
{
|
||||
if (!Hovered)
|
||||
{
|
||||
Launched = true;
|
||||
EmitSignal(SignalName.SelectFalse);
|
||||
}
|
||||
else
|
||||
{
|
||||
Aimed = false;
|
||||
EmitSignal(SignalName.AimFalse);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void TryLaunch()
|
||||
{
|
||||
if (Aimed && Input.IsActionJustReleased("left_click"))
|
||||
{
|
||||
Selected = false;
|
||||
EmitSignal(SignalName.SelectFalse);
|
||||
|
||||
Aimed = false;
|
||||
EmitSignal(SignalName.AimFalse);
|
||||
|
||||
Launched = true;
|
||||
EmitSignal(SignalName.Launch);
|
||||
|
||||
ApplyCentralForce(Force * Speed);
|
||||
|
||||
Force = Vector2.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
public void TryMovement()
|
||||
{
|
||||
if (LinearVelocity.Length() > 0 && !Sleeping)
|
||||
{
|
||||
if (!Moving)
|
||||
{
|
||||
Moving = true;
|
||||
EmitSignal(SignalName.Move);
|
||||
}
|
||||
}
|
||||
if (Moving)
|
||||
{
|
||||
ProcessOnMovement();
|
||||
if (Sleeping)
|
||||
{
|
||||
Moving = false;
|
||||
EmitSignal(SignalName.Stop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void TrySelect()
|
||||
{
|
||||
if (Hovered)
|
||||
{
|
||||
if (Input.IsActionJustPressed("left_click") && !Selected)
|
||||
{
|
||||
Selected = true;
|
||||
EmitSignal(SignalName.Select);
|
||||
}
|
||||
}
|
||||
|
||||
if (Selected)
|
||||
{
|
||||
if (!Hovered)
|
||||
{
|
||||
if (Input.IsActionJustPressed("left_click") && Selected)
|
||||
{
|
||||
Selected = false;
|
||||
EmitSignal(SignalName.SelectFalse);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMouseEntered()
|
||||
{
|
||||
Hovered = true;
|
||||
EmitSignal(SignalName.Hover);
|
||||
}
|
||||
|
||||
private void OnMouseExited()
|
||||
{
|
||||
Hovered = false;
|
||||
EmitSignal(SignalName.HoverFalse);
|
||||
}
|
||||
|
||||
private void OnBodyEntered(Node2D body)
|
||||
{
|
||||
if (body.GetType() == typeof(Marble))
|
||||
{
|
||||
Marble marble = (Marble)body;
|
||||
ProcessOnBump(marble);
|
||||
marble.ProcessOnBump(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user