From 022f0948db1ec303803411f18a5d3214c7858fd4 Mon Sep 17 00:00:00 2001 From: cojoedmo Date: Tue, 15 Jul 2025 03:02:30 -0400 Subject: [PATCH] 7-15-25@3:02am --- Gameplay/Actor.cs | 138 ++++++++++++++++++++++++++++++++----------- Gameplay/Ball.cs | 23 ++++---- Gameplay/Battle.cs | 20 +++---- Gameplay/Cue.cs | 61 +++++++++++-------- Gameplay/battle.tscn | 2 - project.godot | 30 ++++++++++ 6 files changed, 187 insertions(+), 87 deletions(-) diff --git a/Gameplay/Actor.cs b/Gameplay/Actor.cs index 7ebd4f6..05736a2 100644 --- a/Gameplay/Actor.cs +++ b/Gameplay/Actor.cs @@ -7,83 +7,149 @@ public partial class Actor : Node { public bool _available, _hovered, _selected; public List _cues = new(); - public Cue _activeCue; + public Cue _selectedCue = null; public List _balls = new(); - public Ball _activeBall; + public List _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("res://Gameplay/"+SCENENAME+".tscn"); + PackedScene scene = ResourceLoader.Load("res://Gameplay/" + SCENENAME + ".tscn"); Actor newActor = scene.Instantiate(); 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("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("res://art/cue_ball.png"); - //_cueBall.GetNode("Image").Texture = image; - //_cueBall._placed = true; - //_balls = GetTree().GetNodesInGroup("balls").Select(b => (Ball)b).ToList(); + //_cueBall = Ball.Create("ball", 0, _startPosition); + //_cueBall.SetName("CueBall"); + //AddChild(_cueBall); + //Texture2D image = GD.Load("res://art/cue_ball.png"); + //_cueBall.GetNode("Image").Texture = image; + //_cueBall._placed = true; + //_balls = GetTree().GetNodesInGroup("balls").Select(b => (Ball)b).ToList(); //} - + + + private void OnCueShoot(Vector2 IMPULSE) { - _activeBall.ApplyCentralImpulse(IMPULSE); + if (_selectedBall != null && _selectedBall._placed) + { + _selectedBall.ApplyCentralImpulse(IMPULSE); + _selectedBall._selected = false; + _selectedBall = null; + _selectedCue.Doff(); + } } } diff --git a/Gameplay/Ball.cs b/Gameplay/Ball.cs index 00aa1ac..f78d6fc 100644 --- a/Gameplay/Ball.cs +++ b/Gameplay/Ball.cs @@ -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() diff --git a/Gameplay/Battle.cs b/Gameplay/Battle.cs index 0d220b0..aeb0e55 100644 --- a/Gameplay/Battle.cs +++ b/Gameplay/Battle.cs @@ -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("Image").Texture; @@ -110,8 +105,7 @@ public partial class Battle : Node { _current = true; GenerateBalls(); - - EmitSignal(SignalName.SetCurrent, this); + Globals.Instance._currentBattle = this; } } diff --git a/Gameplay/Cue.cs b/Gameplay/Cue.cs index 701643e..296b548 100644 --- a/Gameplay/Cue.cs +++ b/Gameplay/Cue.cs @@ -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("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(); } diff --git a/Gameplay/battle.tscn b/Gameplay/battle.tscn index 2f8f5c0..134eba4 100644 --- a/Gameplay/battle.tscn +++ b/Gameplay/battle.tscn @@ -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"] diff --git a/project.godot b/project.godot index 3083532..93e723a 100644 --- a/project.godot +++ b/project.godot @@ -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]