7-15-25@3:02am
This commit is contained in:
@@ -7,83 +7,149 @@ public partial class Actor : Node
|
||||
{
|
||||
public bool _available, _hovered, _selected;
|
||||
public List<Cue> _cues = new();
|
||||
public Cue _activeCue;
|
||||
public Cue _selectedCue = null;
|
||||
public List<Ball> _balls = new();
|
||||
public Ball _activeBall;
|
||||
public List<Ball> _ballBag = new();
|
||||
public Ball _hoveredBall = null;
|
||||
public Ball _selectedBall = null;
|
||||
public Ball _heldBall = null;
|
||||
|
||||
public Sprite2D _tempBallSprite = new();
|
||||
|
||||
public static Actor Create(string SCENENAME)
|
||||
{
|
||||
PackedScene scene = ResourceLoader.Load<PackedScene>("res://Gameplay/"+SCENENAME+".tscn");
|
||||
PackedScene scene = ResourceLoader.Load<PackedScene>("res://Gameplay/" + SCENENAME + ".tscn");
|
||||
Actor newActor = scene.Instantiate<Actor>();
|
||||
return newActor;
|
||||
}
|
||||
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Ball newBall = Ball.Create("ball", 0);
|
||||
AddChild(newBall);
|
||||
_balls.Add(newBall);
|
||||
if (_activeBall == null)
|
||||
{
|
||||
_activeBall = _balls[0];
|
||||
}
|
||||
newBall = Ball.Create("ball", 1);
|
||||
_balls.Add(newBall);
|
||||
|
||||
Cue newCue = Cue.Create("cue");
|
||||
AddChild(newCue);
|
||||
_cues.Add(newCue);
|
||||
if (_activeCue == null)
|
||||
for (int i = 0; i < _cues.Count; i++)
|
||||
{
|
||||
_activeCue = _cues[0];
|
||||
_activeCue.Shoot += OnCueShoot;
|
||||
_cues[i].Shoot += OnCueShoot;
|
||||
}
|
||||
|
||||
_ballBag = new(_balls);
|
||||
}
|
||||
|
||||
|
||||
public override void _Process(double DELTA_)
|
||||
{
|
||||
if (!_activeBall._placed)
|
||||
if (_ballBag.Count > 0)
|
||||
{
|
||||
if (_heldBall == null)
|
||||
{
|
||||
_heldBall = _ballBag[0];
|
||||
}
|
||||
else if (Input.IsActionJustPressed("scroll_up"))
|
||||
{
|
||||
_heldBall = _ballBag[(_ballBag.IndexOf(_heldBall) + 1) % _ballBag.Count];
|
||||
}
|
||||
else if (Input.IsActionJustPressed("scroll_down"))
|
||||
{
|
||||
_heldBall = _ballBag[(_ballBag.IndexOf(_heldBall) - 1) < 0 ? ^1 : (_ballBag.IndexOf(_heldBall) - 1)];
|
||||
}
|
||||
Vector2 mousePosition = GetViewport().GetMousePosition();
|
||||
_activeBall.Position = mousePosition;
|
||||
if (_tempBallSprite.Texture == null)
|
||||
{
|
||||
if (GetChildren().All(n => n != _tempBallSprite))
|
||||
{
|
||||
AddChild(_tempBallSprite);
|
||||
}
|
||||
_tempBallSprite.Texture = _heldBall.GetNode<Sprite2D>("Image").Texture;
|
||||
}
|
||||
_tempBallSprite.Position = mousePosition;
|
||||
if (Input.IsActionJustReleased("left_click"))
|
||||
{
|
||||
_activeBall.Place(mousePosition);
|
||||
_heldBall.Place(mousePosition);
|
||||
AddChild(_heldBall);
|
||||
int ballIndex = _ballBag.IndexOf(_heldBall);
|
||||
_ballBag.Remove(_heldBall);
|
||||
_tempBallSprite.Texture = null;
|
||||
if (_ballBag.Count > 0)
|
||||
{
|
||||
_heldBall = _ballBag[ballIndex - (ballIndex > _ballBag.Count ? 1 : 0)];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_hovered = _activeBall._hovered;
|
||||
if (_activeCue._shown)
|
||||
if (_balls.Any(b => b._hovered))
|
||||
{
|
||||
if (!_activeBall._available)
|
||||
_hoveredBall = _balls.Single(b => b._hovered);
|
||||
}
|
||||
else
|
||||
{
|
||||
_hoveredBall = null;
|
||||
}
|
||||
|
||||
if (_selectedCue == null && _cues.Count > 0)
|
||||
{
|
||||
_selectedCue = _cues[0];
|
||||
}
|
||||
|
||||
if ((_selectedBall == null || _selectedBall != _hoveredBall) && (_hoveredBall?._available ?? false))
|
||||
{
|
||||
if (Input.IsActionJustReleased("left_click"))
|
||||
{
|
||||
_activeCue.HideCue();
|
||||
GD.Print(_selectedBall);
|
||||
_selectedBall = _hoveredBall;
|
||||
_selectedBall._selected = true;
|
||||
_selectedCue.Don(_selectedBall);
|
||||
GD.Print(_selectedBall);
|
||||
}
|
||||
}
|
||||
else // (!_activeCue._shown)
|
||||
else if (Input.IsActionJustReleased("right_click"))
|
||||
{
|
||||
if (_activeBall._available)
|
||||
GD.Print(2);
|
||||
_selectedBall._selected = false;
|
||||
_selectedBall = null;
|
||||
_selectedCue.Doff();
|
||||
}
|
||||
else if (_hoveredBall == null)
|
||||
{
|
||||
if (Input.IsActionJustReleased("left_click") && _selectedCue._power == 0)
|
||||
{
|
||||
_activeCue.ShowCue(_activeBall);
|
||||
GD.Print(3);
|
||||
_selectedBall._selected = false;
|
||||
_selectedBall = null;
|
||||
_selectedCue.Doff();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//public void ResetCueBall()
|
||||
//{
|
||||
//_cueBall = Ball.Create("ball", 0, _startPosition);
|
||||
//_cueBall.SetName("CueBall");
|
||||
//AddChild(_cueBall);
|
||||
//Texture2D image = GD.Load<Texture2D>("res://art/cue_ball.png");
|
||||
//_cueBall.GetNode<Sprite2D>("Image").Texture = image;
|
||||
//_cueBall._placed = true;
|
||||
//_balls = GetTree().GetNodesInGroup("balls").Select(b => (Ball)b).ToList<Ball>();
|
||||
//_cueBall = Ball.Create("ball", 0, _startPosition);
|
||||
//_cueBall.SetName("CueBall");
|
||||
//AddChild(_cueBall);
|
||||
//Texture2D image = GD.Load<Texture2D>("res://art/cue_ball.png");
|
||||
//_cueBall.GetNode<Sprite2D>("Image").Texture = image;
|
||||
//_cueBall._placed = true;
|
||||
//_balls = GetTree().GetNodesInGroup("balls").Select(b => (Ball)b).ToList<Ball>();
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
||||
private void OnCueShoot(Vector2 IMPULSE)
|
||||
{
|
||||
_activeBall.ApplyCentralImpulse(IMPULSE);
|
||||
if (_selectedBall != null && _selectedBall._placed)
|
||||
{
|
||||
_selectedBall.ApplyCentralImpulse(IMPULSE);
|
||||
_selectedBall._selected = false;
|
||||
_selectedBall = null;
|
||||
_selectedCue.Doff();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Data;
|
||||
|
||||
public partial class Ball : RigidBody2D
|
||||
{
|
||||
@@ -26,9 +27,7 @@ public partial class Ball : RigidBody2D
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
SetProcess(false);
|
||||
_placed = false;
|
||||
_available = false;
|
||||
_available = true;
|
||||
_hovered = false;
|
||||
_selected = false;
|
||||
_aimed = false;
|
||||
@@ -53,28 +52,26 @@ public partial class Ball : RigidBody2D
|
||||
}
|
||||
}
|
||||
|
||||
if (!Globals.Instance._anyMovement)
|
||||
{
|
||||
if (!_available)
|
||||
{
|
||||
_available = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (Globals.Instance._anyMovement)
|
||||
{
|
||||
if (_available)
|
||||
{
|
||||
_available = false;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (!_available)
|
||||
{
|
||||
_available = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Place(Vector2 POSITION)
|
||||
{
|
||||
_placed = true;
|
||||
Position = POSITION;
|
||||
SetProcess(true);
|
||||
}
|
||||
|
||||
private void OnMouseEntered()
|
||||
|
||||
@@ -5,11 +5,7 @@ using System.Linq;
|
||||
|
||||
public partial class Battle : Node
|
||||
{
|
||||
[Signal]
|
||||
public delegate void SetCurrentEventHandler(Battle BATTLE);
|
||||
//[Signal]
|
||||
//public delegate void DetectMovementEventHandler(bool BOOL);
|
||||
|
||||
|
||||
public bool _current;
|
||||
public Vector2 _startPosition = new Vector2(890, 340);
|
||||
public Player _player;
|
||||
@@ -83,18 +79,17 @@ public partial class Battle : Node
|
||||
|
||||
public void PottedBall(Node2D BODY)
|
||||
{
|
||||
if (BODY.GetType() != typeof(Ball)){
|
||||
if (BODY.GetType() != typeof(Ball))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (BODY == _player._actor._activeBall)
|
||||
if (BODY == _player._actor._selectedBall)
|
||||
{
|
||||
GD.Print(1);
|
||||
_player._actor._activeBall._potted = true;
|
||||
_player._actor._activeBall._placed = false;
|
||||
_player._actor._selectedBall._potted = true;
|
||||
_player._actor._selectedBall._placed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
GD.Print(BODY);
|
||||
Sprite2D ballSprite = new Sprite2D();
|
||||
AddChild(ballSprite);
|
||||
ballSprite.Texture = BODY.GetNode<Sprite2D>("Image").Texture;
|
||||
@@ -110,8 +105,7 @@ public partial class Battle : Node
|
||||
{
|
||||
_current = true;
|
||||
GenerateBalls();
|
||||
|
||||
EmitSignal(SignalName.SetCurrent, this);
|
||||
Globals.Instance._currentBattle = this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@ public partial class Cue : Sprite2D
|
||||
[Signal]
|
||||
public delegate void ShootEventHandler(Vector2 IMPULSE);
|
||||
|
||||
public bool _shown;
|
||||
public int _powerDirection = 1;
|
||||
public float _power = 0.0f, _maxPower = 8.0f;
|
||||
public bool _donned = false, _equiped = false, _sending = false;
|
||||
public float _power = 0.0f, _maxPower = 20.0f;
|
||||
Vector2 _direction;
|
||||
public ProgressBar _progressBar;
|
||||
|
||||
public static Cue Create(string SCENENAME)
|
||||
@@ -24,51 +24,66 @@ public partial class Cue : Sprite2D
|
||||
{
|
||||
//_progressBar = GetParent().GetNode<ProgressBar>("PowerBar");
|
||||
}
|
||||
|
||||
|
||||
public override void _Process(double DELTA_)
|
||||
{
|
||||
Vector2 mousePosition = GetViewport().GetMousePosition();
|
||||
LookAt(mousePosition);
|
||||
if (Input.IsActionPressed("left_click"))
|
||||
|
||||
if (!_sending)
|
||||
{
|
||||
_power += 0.1f * _powerDirection;
|
||||
if (_power >= _maxPower)
|
||||
Vector2 mousePosition = GetViewport().GetMousePosition();
|
||||
Offset = new Vector2(_power * -10, 0);
|
||||
LookAt(mousePosition);
|
||||
if (Input.IsActionJustPressed("scroll_down"))
|
||||
{
|
||||
_powerDirection = -1;
|
||||
_power = Math.Min(_power + (1f * (Input.IsActionPressed("shift") ? 5 : 1) / (Input.IsActionPressed("ctrl") ? 10 : 1)), _maxPower);
|
||||
}
|
||||
else if (_power <= 0)
|
||||
else if (Input.IsActionJustPressed("scroll_up"))
|
||||
{
|
||||
_powerDirection = 1;
|
||||
_power = Math.Max(_power - (1f * (Input.IsActionPressed("shift") ? 5 : 1) / (Input.IsActionPressed("ctrl") ? 10 : 1)), 0);
|
||||
}
|
||||
|
||||
if (Input.IsActionJustReleased("left_click"))
|
||||
{
|
||||
if (_power > 0f)
|
||||
{
|
||||
_sending = true;
|
||||
_direction = mousePosition - Position;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_power > 0f)
|
||||
if (Offset.X < 0)
|
||||
{
|
||||
_powerDirection = 1;
|
||||
Vector2 direction = mousePosition - Position;
|
||||
EmitSignal(SignalName.Shoot, _power * direction);
|
||||
Offset = new Vector2(Math.Min(0, Offset.X + _power * 2), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
_sending = false;
|
||||
Offset = Vector2.Zero;
|
||||
EmitSignal(SignalName.Shoot, _power * _direction);
|
||||
_power = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void HideCue()
|
||||
public void Doff()
|
||||
{
|
||||
_shown = false;
|
||||
_donned = false;
|
||||
SetProcess(false);
|
||||
Hide();
|
||||
//_progressBar.Hide();
|
||||
}
|
||||
|
||||
public void ShowCue(Ball CUEBALL)
|
||||
|
||||
public void Don(Ball CUEBALL)
|
||||
{
|
||||
_shown = true;
|
||||
SetProcess(true);
|
||||
_donned = true;
|
||||
Position = CUEBALL.Position;
|
||||
//_progressBar.Position = new Vector2(CUEBALL.Position.X - _progressBar.Size.X / 2, CUEBALL.Position.Y + _progressBar.Size.Y / 2);
|
||||
SetProcess(true);
|
||||
Show();
|
||||
//_progressBar.Position = new Vector2(CUEBALL.Position.X - _progressBar.Size.X / 2, CUEBALL.Position.Y + _progressBar.Size.Y / 2);
|
||||
//_progressBar.Show();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,5 +23,3 @@ offset_top = 678.0
|
||||
offset_right = 1200.0
|
||||
offset_bottom = 778.0
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_tivnh")
|
||||
|
||||
[connection signal="SetCurrent" from="." to="Player" method="BattleStart"]
|
||||
|
||||
@@ -59,11 +59,41 @@ move_down={
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
space={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
left_click={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
right_click={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
scroll_up={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
scroll_down={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
ctrl={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
shift={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user