From 23700e2bcf901ccd1b7a90af3768107d2bc35ce1 Mon Sep 17 00:00:00 2001 From: cojoedmo Date: Wed, 10 Sep 2025 01:31:39 -0400 Subject: [PATCH] Wednesday, 10 September 2025 01:31:36 --- Gameplay/Actions/BasicAttack.cs | 35 ---- Gameplay/Actions/Caffeinate.cs | 26 --- Gameplay/Actions/basic_attack.tscn | 3 - Gameplay/Conditions/Caffeinated.cs | 30 --- Gameplay/Conditions/Caffeinated.cs.uid | 1 - Gameplay/Conditions/Spiky.cs | 24 --- Gameplay/Conditions/Spiky.cs.uid | 1 - Gameplay/Conditions/caffeinated.tscn | 6 - Gameplay/Conditions/spiky.tscn | 6 - Gameplay/Desk.cs | 63 ++++++- Gameplay/Globals.cs | 3 +- Gameplay/Manager.cs | 173 ++++++++++-------- Gameplay/Tchotchke.cs | 164 ++++++++--------- Gameplay/Tchotchkes/AwfullyHotCoffeePot.cs | 18 +- Gameplay/Tchotchkes/RedStapler.cs | 10 +- Gameplay/{Action.cs => Trait.cs} | 9 +- Gameplay/{Action.cs.uid => Trait.cs.uid} | 0 Gameplay/Traits/BasicAttack.cs | 26 +++ .../{Actions => Traits}/BasicAttack.cs.uid | 0 Gameplay/Traits/Caffeinate.cs | 15 ++ .../{Actions => Traits}/Caffeinate.cs.uid | 0 Gameplay/Traits/basic_attack.tscn | 6 + Gameplay/{Actions => Traits}/caffeinate.tscn | 0 Gameplay/Worker.cs | 41 ++--- Gameplay/battle.tscn | 7 +- Gameplay/desk.tscn | 33 ++-- Gameplay/manager.tscn | 10 +- Gameplay/{action.tscn => trait.tscn} | 6 +- Gameplay/worker.tscn | 1 + art/manager.png | Bin 0 -> 14274 bytes art/manager.png.import | 34 ++++ art/tiles.png | Bin 0 -> 372 bytes art/tiles.png.import | 34 ++++ 33 files changed, 411 insertions(+), 374 deletions(-) delete mode 100644 Gameplay/Actions/BasicAttack.cs delete mode 100644 Gameplay/Actions/Caffeinate.cs delete mode 100644 Gameplay/Actions/basic_attack.tscn delete mode 100644 Gameplay/Conditions/Caffeinated.cs delete mode 100644 Gameplay/Conditions/Caffeinated.cs.uid delete mode 100644 Gameplay/Conditions/Spiky.cs delete mode 100644 Gameplay/Conditions/Spiky.cs.uid delete mode 100644 Gameplay/Conditions/caffeinated.tscn delete mode 100644 Gameplay/Conditions/spiky.tscn rename Gameplay/{Action.cs => Trait.cs} (63%) rename Gameplay/{Action.cs.uid => Trait.cs.uid} (100%) create mode 100644 Gameplay/Traits/BasicAttack.cs rename Gameplay/{Actions => Traits}/BasicAttack.cs.uid (100%) create mode 100644 Gameplay/Traits/Caffeinate.cs rename Gameplay/{Actions => Traits}/Caffeinate.cs.uid (100%) create mode 100644 Gameplay/Traits/basic_attack.tscn rename Gameplay/{Actions => Traits}/caffeinate.tscn (100%) rename Gameplay/{action.tscn => trait.tscn} (55%) create mode 100644 art/manager.png create mode 100644 art/manager.png.import create mode 100644 art/tiles.png create mode 100644 art/tiles.png.import diff --git a/Gameplay/Actions/BasicAttack.cs b/Gameplay/Actions/BasicAttack.cs deleted file mode 100644 index feea09e..0000000 --- a/Gameplay/Actions/BasicAttack.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Godot; -using System; -using System.Collections.Generic; - -public partial class BasicAttack : Action -{ - public BasicAttack(Node2D OWNER) : base(OWNER) - { - _triggers.Add(Trigger.On.Collision); - } - - public override void Fire() - { - if (_target != null) - { - if (_target is Worker) - { - Worker target = (Worker)_target; - if (_owner is Worker) - { - Worker owner = (Worker)_owner; - if (target._manager != owner._manager) - { - int damage = -owner._aptitude._default / 2; - // target.ChangeHealth(damage, owner); - } - } - - } - _target = null; - } - - } - -} diff --git a/Gameplay/Actions/Caffeinate.cs b/Gameplay/Actions/Caffeinate.cs deleted file mode 100644 index 2b74a9f..0000000 --- a/Gameplay/Actions/Caffeinate.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Godot; -using System; - -public partial class Caffeinate : Action -{ - public Caffeinate(Node2D OWNER) : base(OWNER) - { - _triggers.Add(Trigger.On.Collision); - } - - public override void Fire() - { - if (_target != null) - { - if (_target is Worker) - { - Worker target = (Worker)_target; - if (!target.HasCondition(GetType().ToString())) - { - target._conditions.AddChild(new Caffeinated(target)); - } - } - _target = null; - } - } -} diff --git a/Gameplay/Actions/basic_attack.tscn b/Gameplay/Actions/basic_attack.tscn deleted file mode 100644 index 6b22c6e..0000000 --- a/Gameplay/Actions/basic_attack.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=3 uid="uid://bih70e65g1108"] - -[node name="BasicAttack" type="Node"] diff --git a/Gameplay/Conditions/Caffeinated.cs b/Gameplay/Conditions/Caffeinated.cs deleted file mode 100644 index a1ea63e..0000000 --- a/Gameplay/Conditions/Caffeinated.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Godot; -using System; - -public partial class Caffeinated : Condition -{ - public Caffeinated(Node2D OWNER) : base(OWNER) - { - _triggers.Add(Trigger.On.Time); - _countdown = 2; - _timer.OneShot = true; - _timer.WaitTime = _countdown; - _timer.Autostart = true; - AddChild(_timer); - _timer.Timeout += Fire; - if (_owner is Worker) - { - ((Worker)_owner)._agility._effective += 3; - } - } - - public override void Fire() - { - _expired = true; - if (_owner is Worker) - { - ((Worker)_owner)._agility._effective -= 3; - ((Worker)_owner)._conditions.RemoveChild(this); - } - } -} diff --git a/Gameplay/Conditions/Caffeinated.cs.uid b/Gameplay/Conditions/Caffeinated.cs.uid deleted file mode 100644 index 80866ae..0000000 --- a/Gameplay/Conditions/Caffeinated.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ciwja82k4ihw6 diff --git a/Gameplay/Conditions/Spiky.cs b/Gameplay/Conditions/Spiky.cs deleted file mode 100644 index 6707617..0000000 --- a/Gameplay/Conditions/Spiky.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Godot; -using System; - -public partial class Spiky : Condition -{ - public Spiky(Node2D OWNER) : base(OWNER) - { - _triggers.Add(Trigger.On.Collision); - } - - public override void Fire() - { - if (_target != null) - { - if (_target is Worker) - { - Worker target = (Worker)_target; - target._rotationalForce += 10; - // target.ChangeHealth(-1, _owner); - } - _target = null; - } - } -} diff --git a/Gameplay/Conditions/Spiky.cs.uid b/Gameplay/Conditions/Spiky.cs.uid deleted file mode 100644 index 80866ae..0000000 --- a/Gameplay/Conditions/Spiky.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ciwja82k4ihw6 diff --git a/Gameplay/Conditions/caffeinated.tscn b/Gameplay/Conditions/caffeinated.tscn deleted file mode 100644 index 91642d0..0000000 --- a/Gameplay/Conditions/caffeinated.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://dtnwf7i53hix6"] - -[ext_resource type="Script" path="res://Gameplay/Effects/Spiky.cs" id="1_pcknv"] - -[node name="Spiky" type="Node"] -script = ExtResource("1_pcknv") diff --git a/Gameplay/Conditions/spiky.tscn b/Gameplay/Conditions/spiky.tscn deleted file mode 100644 index 0767fed..0000000 --- a/Gameplay/Conditions/spiky.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://devvkr2joh1u2"] - -[ext_resource type="Script" path="res://Gameplay/Effects/Spiky.cs" id="1_pcknv"] - -[node name="Spiky" type="Node"] -script = ExtResource("1_pcknv") diff --git a/Gameplay/Desk.cs b/Gameplay/Desk.cs index 0791594..06dd875 100644 --- a/Gameplay/Desk.cs +++ b/Gameplay/Desk.cs @@ -1,13 +1,66 @@ using Godot; using System; +using System.Collections.Generic; -public partial class Desk : Sprite2D +public partial class Desk : Node2D { + public Vector2 _topLeft, _cellDimensions, _gridDimensions; + public Sprite2D _light, _dark; + Node2D _grid; + public override void _Ready() + { + _grid = GetNode("Cells"); + _light = GetNode("Light"); + _dark = GetNode("Dark"); - public override void _Ready() - { - Position = Globals.Instance._screenCenter; - } + _cellDimensions = new Vector2(50, 50); + _gridDimensions = new Vector2(10, 20); + _topLeft = Globals.Instance._screenCenter - _cellDimensions * _gridDimensions / 2 + _cellDimensions / 2; + GD.Print(_topLeft); + Setup(); + } + + public Vector2 GetPositionFromAddress(int ROW, int COLUMN) + { + + + if (_grid.HasNode("R" + ROW)) + { + Node2D row = _grid.GetNode("R" + ROW); + if (row.HasNode("C" + COLUMN)) + { + Sprite2D column = row.GetNode("C" + COLUMN); + return column.GlobalPosition; + } + } + return new Vector2(-1, -1); + } + + public void Setup() + { + Vector2 position; + Node2D row; + Sprite2D column; + for (int i = 0; i < _gridDimensions.Y; i++) + { + if (i <= _grid.GetChildCount()) + { + row = new(); + row.Name = "R" + (i + 1); + _grid.AddChild(row); + } + for (int j = 0; j < _gridDimensions.X; j++) + { + position = _topLeft + new Vector2(_cellDimensions.X * j, _cellDimensions.Y * i); + column = (Sprite2D)((i + j) % 2 == 0 ? _light : _dark).Duplicate(); + column.Name = "C" + (j + 1); + column.GlobalPosition = position; + column.Visible = true; + row = _grid.GetNode("R" + (i + 1)); + row.AddChild(column); + } + } + } } diff --git a/Gameplay/Globals.cs b/Gameplay/Globals.cs index 3800164..7a8fb63 100644 --- a/Gameplay/Globals.cs +++ b/Gameplay/Globals.cs @@ -20,6 +20,5 @@ public partial class Globals : Node _screenSize = _viewport.GetVisibleRect().Size; _screenCenter = _screenSize / 2; } - - + } diff --git a/Gameplay/Manager.cs b/Gameplay/Manager.cs index a5dde84..d1e5300 100644 --- a/Gameplay/Manager.cs +++ b/Gameplay/Manager.cs @@ -6,16 +6,20 @@ using System.Linq; /// TODO alter code to player vs computer to account for differing logic public partial class Manager : Node2D { - public bool _dead, _ready; + public bool _dead, _ready, _moving; public int _ballsMoving = 0, _health = 10, _healthMax, _speed = 5; public string _imagePath; + public Vector2 _deskPosition; + public List _movements = new(); public CollisionShape2D _startArea; public ManagerPanel _managerPanel = null; + public Sprite2D _image; + public Desk _desk = null; public Manager _opponent; public List _workers = new(); - public Worker _hoveredWorker, _selectedWorker, _heldWorker; public Node _workerNode; - public List _tchotckes = new(); + public Worker _hoveredWorker, _selectedWorker, _heldWorker; + // public List _tchotckes = new(); public override void _Ready() { @@ -25,103 +29,82 @@ public partial class Manager : Node2D SetSprite("res://art/ness.png"); _managerPanel = GetNode("Panel"); + _desk = GetNode("Desk"); + + _deskPosition = new Vector2(1, 1); + // _movements.Insert(0, _deskPosition); + _image = GetNode("Image"); + _image.GlobalPosition = _desk.GetPositionFromAddress(1, 1); _managerPanel.SetManager(this); - - Worker newWorker = Globals.Instance._workerScene.Instantiate(); - newWorker.Position = Globals.Instance._screenCenter; - newWorker._manager = this; - _workerNode.AddChild(newWorker); - _workers.Add(newWorker); - - newWorker = Globals.Instance._workerScene.Instantiate(); - newWorker.Position = Globals.Instance._screenCenter; - newWorker._manager = this; - _workerNode.AddChild(newWorker); - _workers.Add(newWorker); - - newWorker = Globals.Instance._workerScene.Instantiate(); - newWorker.Position = Globals.Instance._screenCenter; - newWorker._manager = this; - _workerNode.AddChild(newWorker); - _workers.Add(newWorker); - - newWorker = Globals.Instance._workerScene.Instantiate(); - newWorker.Position = Globals.Instance._screenCenter; - newWorker._manager = this; - _workerNode.AddChild(newWorker); - _workers.Add(newWorker); - - // for (int i = 0; i < _workers.Count; i++) - // { - // _workers[i]._healthBar.Position = _managerPanel.GetNode("Team").GetNode("T"+(i+1)).GlobalPosition; - // } - - // Tchotchke newTchotchke = ResourceLoader.Load("res://Gameplay/Tchotchkes/awfully_hot_coffee_pot.tscn").Instantiate(); - // newTchotchke.Position = new Vector2(Globals.Instance._screenSize.X - 100, Globals.Instance._screenCenter.Y); - // AddChild(newTchotchke); - // _tchotckes.Add(newTchotchke); + for (int i = 0; i < Globals.Instance._random.Next(3, 6); i++) + { + AddWorker(null); + } } - public override void _Process(double DELTA_) + public override void _PhysicsProcess(double DELTA_) { - if (Globals.Instance._battleRunning) - { - ChainMovement(); - } - else - { - MoveChain(); - } + ChainMovement(); + ChainSelection(); + } + + public void AddWorker(Worker NEWWORKER) + { + Worker newWorker = NEWWORKER ?? Globals.Instance._workerScene.Instantiate(); + newWorker._deskPosition = new Vector2(1, 1); + newWorker.Position = _desk.GetPositionFromAddress(1, 1); + newWorker._manager = this; + _workers.Add(newWorker); + _workerNode.AddChild(newWorker); + newWorker.SetHovered += SetHoveredWorker; } public void ChainMovement() { - Vector2 mousePosition = GetGlobalMousePosition(); - // _workers[0].LookAt(mousePosition); - Vector2 mouseOffset = mousePosition - _workers[0].GlobalPosition; - if (mouseOffset.Length() > _workers[0]._size) + Vector2 direction = Vector2.Zero; + if (Input.IsActionJustPressed("move_up")) { - Vector2 mouseOffsetNormal = mouseOffset.Normalized(); - _workers[0].GlobalPosition += mouseOffsetNormal * _speed; - _workers[0]._distanceTraveled += _speed; - _workers[0]._moves.Insert(0, _workers[0].GlobalPosition); + direction = Vector2.Up; + } + else if (Input.IsActionJustPressed("move_down")) + { + direction = Vector2.Down; + } + else if (Input.IsActionJustPressed("move_left")) + { + direction = Vector2.Left; + } + else if (Input.IsActionJustPressed("move_right")) + { + direction = Vector2.Right; + } - for (int i = 1; i < _workers.Count; i++) + if (direction != Vector2.Zero) + { + Vector2 newPostion = _desk.GetPositionFromAddress((int)(_deskPosition.Y + direction.Y), (int)(_deskPosition.X + direction.X)); + if (newPostion != new Vector2(-1, -1)) { - if (_workers[i - 1]._distanceTraveled > (_workers[i - 1]._size + _workers[i]._size) * 1.2f) + if (_movements.Count > 0) { - _workers[i]._distanceTraveled += _speed; - _workers[i].GlobalPosition = _workers[i - 1]._moves[^1]; - _workers[i]._moves.Insert(0, _workers[i - 1]._moves[^1]); - _workers[i - 1]._moves.RemoveAt(_workers[i - 1]._moves.Count - 1); + for (int i = 0; i < _workers.Count && i < _movements.Count; i++) + { + _workers[i].GlobalPosition = _desk.GetPositionFromAddress((int)_movements[i].Y, (int)_movements[i].X); + } } + _deskPosition += direction; + _movements.Insert(0, _deskPosition); + _image.GlobalPosition = newPostion; } } } - public void ChangeHealth(int CHANGE) + public void ChainSelection() { - _health += CHANGE; - _health = Math.Min(_health, _healthMax); - - if (_health < 0) - { - _dead = true; - _health = 0; - } - - GetNode("Panel").SetValue(_health); - } - - public void MoveChain() - { - _hoveredWorker = _workers.SingleOrDefault(w => !w._selected && !w._held && w._hovered, null); - if (_heldWorker != null) { _heldWorker.GlobalPosition = GetGlobalMousePosition(); - if (_hoveredWorker != null) + if (_hoveredWorker != null && _heldWorker != _hoveredWorker) { SwapPositions(_heldWorker, _hoveredWorker); _hoveredWorker._hovered = false; @@ -160,16 +143,34 @@ public partial class Manager : Node2D } } + public void ChangeHealth(int CHANGE) + { + _health += CHANGE; + _health = Math.Min(_health, _healthMax); + + if (_health < 0) + { + _dead = true; + _health = 0; + } + + GetNode("Panel").SetValue(_health); + } + public void SetSprite(string PATH) { _imagePath = PATH; } + // public void Start() + // { + // _workers[0].GlobalPosition = _desk.GetPositionFromAddress(1, 1); + // } + public void SwapPositions(Worker A, Worker B) { - Vector2 positionA = A.Position, positionB = B.Position, chainPositionA = A._chainPosition, chainPositionB = B._chainPosition; + Vector2 chainPositionA = A._chainPosition, chainPositionB = B._chainPosition; List movesA = new(A._moves), movesB = new(B._moves); - // A.Position = positionB; B.Position = chainPositionA; A._chainPosition = chainPositionB; B._chainPosition = chainPositionA; @@ -180,5 +181,17 @@ public partial class Manager : Node2D _workers[indexA] = B; _workers[indexB] = C; } + + private void SetHoveredWorker(Worker HOVEREDWORKER) + { + if (HOVEREDWORKER._hovered) + { + _hoveredWorker = HOVEREDWORKER; + } + else + { + _hoveredWorker = null; + } + } } diff --git a/Gameplay/Tchotchke.cs b/Gameplay/Tchotchke.cs index 319ba05..989ba2a 100644 --- a/Gameplay/Tchotchke.cs +++ b/Gameplay/Tchotchke.cs @@ -1,92 +1,92 @@ -using Godot; -using System; -using System.Collections.Generic; -using System.Linq; +// using Godot; +// using System; +// using System.Collections.Generic; +// using System.Linq; -public partial class Tchotchke : StaticBody2D -{ - public bool _hovered = false, _held = false; - public List _actions = new(); - public Node _target; +// public partial class Tchotchke : StaticBody2D +// { +// public bool _hovered = false, _held = false; +// public List _actions = new(); +// public Node _target; - public override void _Ready() - { - MouseEntered += OnMouseEntered; - MouseExited += OnMouseExited; - } +// public override void _Ready() +// { +// MouseEntered += OnMouseEntered; +// MouseExited += OnMouseExited; +// } - public override void _Process(double DELTA_) - { - if (_held) - { - GlobalPosition = GetGlobalMousePosition(); - if (Input.IsActionJustReleased("left_click")) - { - Transform2D newTransform = GlobalTransform; - newTransform.Origin = Position; - GlobalTransform = newTransform; - Drop(); - } - } - else - { - if (_hovered) - { - if (Input.IsActionJustPressed("left_click")) - { - Hold(); - } - if (Input.IsActionJustPressed("scroll_up")) - { - Rotation -= 1.0f * (float)(Math.PI) / 180.0f; - } - if (Input.IsActionJustPressed("scroll_down")) - { - Rotation += 1.0f * (float)(Math.PI) / 180.0f; - } - } - } - } +// public override void _Process(double DELTA_) +// { +// if (_held) +// { +// GlobalPosition = GetGlobalMousePosition(); +// if (Input.IsActionJustReleased("left_click")) +// { +// Transform2D newTransform = GlobalTransform; +// newTransform.Origin = Position; +// GlobalTransform = newTransform; +// Drop(); +// } +// } +// else +// { +// if (_hovered) +// { +// if (Input.IsActionJustPressed("left_click")) +// { +// Hold(); +// } +// if (Input.IsActionJustPressed("scroll_up")) +// { +// Rotation -= 1.0f * (float)(Math.PI) / 180.0f; +// } +// if (Input.IsActionJustPressed("scroll_down")) +// { +// Rotation += 1.0f * (float)(Math.PI) / 180.0f; +// } +// } +// } +// } - public void Drop() - { - if (_held) - { - _held = false; - } - } +// public void Drop() +// { +// if (_held) +// { +// _held = false; +// } +// } - public void FireActions(Trigger.On TRIGGER, Node TARGET = null) - { - List triggeredActions = _actions.Where(e => e._triggers.IndexOf(TRIGGER) > -1).ToList(); - for (int i = 0; i < triggeredActions.Count; i++) - { - triggeredActions[i].Target(TARGET); - triggeredActions[i].Fire(); - } - List expiredActions = _actions.Where(e => e._triggers.IndexOf(TRIGGER) > -1).ToList(); - _actions.Except(expiredActions); - } +// public void FireActions(Trigger.On TRIGGER, Node TARGET = null) +// { +// List triggeredActions = _actions.Where(e => e._triggers.IndexOf(TRIGGER) > -1).ToList(); +// for (int i = 0; i < triggeredActions.Count; i++) +// { +// triggeredActions[i].Target(TARGET); +// triggeredActions[i].Fire(); +// } +// List expiredActions = _actions.Where(e => e._triggers.IndexOf(TRIGGER) > -1).ToList(); +// _actions.Except(expiredActions); +// } - public void Hold() - { - if (_held) - { - return; - } - _held = true; - } +// public void Hold() +// { +// if (_held) +// { +// return; +// } +// _held = true; +// } - // PRIVATE METHODS - private void OnMouseEntered() - { - _hovered = true; - } +// // PRIVATE METHODS +// private void OnMouseEntered() +// { +// _hovered = true; +// } - private void OnMouseExited() - { - _hovered = false; - } +// private void OnMouseExited() +// { +// _hovered = false; +// } -} +// } diff --git a/Gameplay/Tchotchkes/AwfullyHotCoffeePot.cs b/Gameplay/Tchotchkes/AwfullyHotCoffeePot.cs index c0fc52e..0ea2df2 100644 --- a/Gameplay/Tchotchkes/AwfullyHotCoffeePot.cs +++ b/Gameplay/Tchotchkes/AwfullyHotCoffeePot.cs @@ -1,10 +1,10 @@ -using Godot; -using System; +// using Godot; +// using System; -public partial class AwfullyHotCoffeePot : Tchotchke -{ - public AwfullyHotCoffeePot() : base() - { - _actions.Add(new Caffeinate(this)); - } -} +// public partial class AwfullyHotCoffeePot : Tchotchke +// { +// public AwfullyHotCoffeePot() : base() +// { +// // _actions.Add(new Caffeinate(this)); +// } +// } diff --git a/Gameplay/Tchotchkes/RedStapler.cs b/Gameplay/Tchotchkes/RedStapler.cs index 603b4d0..2aa60f1 100644 --- a/Gameplay/Tchotchkes/RedStapler.cs +++ b/Gameplay/Tchotchkes/RedStapler.cs @@ -1,7 +1,7 @@ -using Godot; -using System; +// using Godot; +// using System; -public partial class RedStapler : Tchotchke -{ +// public partial class RedStapler : Tchotchke +// { -} +// } diff --git a/Gameplay/Action.cs b/Gameplay/Trait.cs similarity index 63% rename from Gameplay/Action.cs rename to Gameplay/Trait.cs index e07032b..01e4fa4 100644 --- a/Gameplay/Action.cs +++ b/Gameplay/Trait.cs @@ -2,14 +2,13 @@ using Godot; using System; using System.Collections.Generic; -public partial class Action : Node +public partial class Trait : Node { - public Node _target; + public Worker _target, _owner; public List _triggers = new(); public List _expirations = new(); - public Node2D _owner; - public Action(Node2D OWNER) + public Trait(Worker OWNER) { _owner = OWNER; } @@ -19,7 +18,7 @@ public partial class Action : Node } - public virtual void Target(Node TARGET) + public virtual void Target(Worker TARGET) { _target = TARGET; } diff --git a/Gameplay/Action.cs.uid b/Gameplay/Trait.cs.uid similarity index 100% rename from Gameplay/Action.cs.uid rename to Gameplay/Trait.cs.uid diff --git a/Gameplay/Traits/BasicAttack.cs b/Gameplay/Traits/BasicAttack.cs new file mode 100644 index 0000000..2651f3e --- /dev/null +++ b/Gameplay/Traits/BasicAttack.cs @@ -0,0 +1,26 @@ +using Godot; +using System; +using System.Collections.Generic; + +public partial class BasicAttack : Trait +{ + public BasicAttack(Worker OWNER) : base(OWNER) + { + _triggers.Add(Trigger.On.Collision); + } + + public override void Fire() + { + if (_target != null) + { + + if (_target._manager != _owner._manager) + { + int damage = -_owner._aptitude._default / 2; + // target.ChangeHealth(damage, owner); + } + } + _target = null; + } + +} diff --git a/Gameplay/Actions/BasicAttack.cs.uid b/Gameplay/Traits/BasicAttack.cs.uid similarity index 100% rename from Gameplay/Actions/BasicAttack.cs.uid rename to Gameplay/Traits/BasicAttack.cs.uid diff --git a/Gameplay/Traits/Caffeinate.cs b/Gameplay/Traits/Caffeinate.cs new file mode 100644 index 0000000..5b34719 --- /dev/null +++ b/Gameplay/Traits/Caffeinate.cs @@ -0,0 +1,15 @@ +using Godot; +using System; + +public partial class Caffeinate : Trait +{ + public Caffeinate(Worker OWNER) : base(OWNER) + { + _triggers.Add(Trigger.On.Collision); + } + + public override void Fire() + { + + } +} diff --git a/Gameplay/Actions/Caffeinate.cs.uid b/Gameplay/Traits/Caffeinate.cs.uid similarity index 100% rename from Gameplay/Actions/Caffeinate.cs.uid rename to Gameplay/Traits/Caffeinate.cs.uid diff --git a/Gameplay/Traits/basic_attack.tscn b/Gameplay/Traits/basic_attack.tscn new file mode 100644 index 0000000..4e785fe --- /dev/null +++ b/Gameplay/Traits/basic_attack.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://bih70e65g1108"] + +[ext_resource type="Script" uid="uid://2ilonmgvkayp" path="res://Gameplay/Traits/BasicAttack.cs" id="1_egsn3"] + +[node name="BasicAttack" type="Node"] +script = ExtResource("1_egsn3") diff --git a/Gameplay/Actions/caffeinate.tscn b/Gameplay/Traits/caffeinate.tscn similarity index 100% rename from Gameplay/Actions/caffeinate.tscn rename to Gameplay/Traits/caffeinate.tscn diff --git a/Gameplay/Worker.cs b/Gameplay/Worker.cs index 8b136c9..fd546af 100644 --- a/Gameplay/Worker.cs +++ b/Gameplay/Worker.cs @@ -1,28 +1,26 @@ using Godot; using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; using System.Linq; public partial class Worker : CharacterBody2D { + [Signal] + public delegate void SetHoveredEventHandler(Worker THIS); + public bool _dead = false, _hovered = false, _held = false, _selected = false; public int _size, _health, _healthMax; public float _distanceTraveled, _stamina, _staminaMax; public Stat _aptitude = new(), _agility = new(), _ardor = new(), _accumen = new(), _awareness = new(), _appeal = new(); public float _rotationalForce = 0; - public Vector2 _chainPosition = new Vector2(-1, -1); + public Vector2 _chainPosition = new Vector2(-1, -1), _deskPosition; public List _moves = new(); public Sprite2D _image; public ProgressBar _healthBar; public Manager _manager; - public Node _actions; - public Node _conditions; + public List _traits = new(); public override void _Ready() { - _actions = GetNode("Actions"); - _conditions = GetNode("Conditions"); _size = (int)(((CircleShape2D)GetNode("Bounds").Shape).Radius); _aptitude._default = 5; @@ -41,7 +39,7 @@ public partial class Worker : CharacterBody2D _image = GetNode("Sprite2D"); - _actions.AddChild(new BasicAttack(this)); + _traits.Add(new BasicAttack(this)); // _healthBar = GetNode("HealthBar"); // _healthBar.MaxValue = _healthMax; @@ -86,28 +84,23 @@ public partial class Worker : CharacterBody2D } } - public void FireActions(Trigger.On TRIGGER, Node TARGET = null) + public void FireActions(Trigger.On TRIGGER, Worker TARGET = null) { - List children = _actions.GetChildren().ToList(); - for (int i = 0; i < children.Count; i++) + for (int i = 0; i < _traits.Count; i++) { - if (children[i] is Action) + if (_traits[i]._triggers.Contains(TRIGGER)) { - Action action = (Action)children[i]; - if (action._triggers.Contains(TRIGGER)) - { - action.Target(TARGET); - action.Fire(); - } + _traits[i].Target(TARGET); + _traits[i].Fire(); } } } - public bool HasCondition(string CONDITION) - { - List conditionNames = _conditions.GetChildren().Select(c => c.GetType().ToString()).ToList(); - return conditionNames.Contains(CONDITION); - } + // public bool HasCondition(string CONDITION) + // { + // List conditionNames = _conditions.GetChildren().Select(c => c.GetType().ToString()).ToList(); + // return conditionNames.Contains(CONDITION); + // } public void Hold() { @@ -132,11 +125,13 @@ public partial class Worker : CharacterBody2D private void OnMouseEntered() { _hovered = true; + EmitSignal(SignalName.SetHovered, this); } private void OnMouseExited() { _hovered = false; + EmitSignal(SignalName.SetHovered, this); } // private void OnBodyEntered(Node NODE) diff --git a/Gameplay/battle.tscn b/Gameplay/battle.tscn index 9e1a229..150e8fd 100644 --- a/Gameplay/battle.tscn +++ b/Gameplay/battle.tscn @@ -1,11 +1,6 @@ -[gd_scene load_steps=3 format=3 uid="uid://5ymxo45j4ryt"] +[gd_scene load_steps=2 format=3 uid="uid://5ymxo45j4ryt"] [ext_resource type="Script" uid="uid://0c1u4l8lu07h" path="res://Gameplay/Battle.cs" id="1_i431l"] -[ext_resource type="PackedScene" uid="uid://demwh8ek37mnx" path="res://Gameplay/desk.tscn" id="2_fkh6t"] [node name="Battle" type="Node" groups=["battles"]] script = ExtResource("1_i431l") - -[node name="Desk" parent="." instance=ExtResource("2_fkh6t")] -position = Vector2(960, 540) -rotation = 1.5708 diff --git a/Gameplay/desk.tscn b/Gameplay/desk.tscn index afeafa0..09b01ee 100644 --- a/Gameplay/desk.tscn +++ b/Gameplay/desk.tscn @@ -1,29 +1,20 @@ -[gd_scene load_steps=4 format=3 uid="uid://demwh8ek37mnx"] +[gd_scene load_steps=3 format=3 uid="uid://demwh8ek37mnx"] -[ext_resource type="Texture2D" uid="uid://w4cxyhjvmkq1" path="res://art/desk.png" id="1_21bwm"] [ext_resource type="Script" uid="uid://pxi753iie75t" path="res://Gameplay/Desk.cs" id="2_15p4t"] -[ext_resource type="Texture2D" uid="uid://c5yof13kvayxo" path="res://art/deskBounds.png" id="3_15p4t"] +[ext_resource type="Texture2D" uid="uid://dy4lmwn1dit26" path="res://art/shade.png" id="2_21bwm"] -[node name="Desk" type="Sprite2D"] -texture = ExtResource("1_21bwm") +[node name="Desk" type="Node2D"] script = ExtResource("2_15p4t") -[node name="StaticBody2D" type="StaticBody2D" parent="."] - -[node name="Sprite2D" type="Sprite2D" parent="StaticBody2D"] +[node name="Light" type="Sprite2D" parent="."] visible = false -texture = ExtResource("3_15p4t") +scale = Vector2(0.195, 0.195) +texture = ExtResource("2_21bwm") -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="StaticBody2D"] -polygon = PackedVector2Array(750, -750, 1, -750, 1, -373.1, 157, -370, 163.1, -370, 252.1, -337, 253.2, -337, 288.3, -310, 289.7, -310, 333.7, -258, 359.8, -203, 371, -152, 373, -131.6, 373, 131.3, 367, 174.7, 367, 179.1, 351, 224.1, 351, 226.4, 310, 288.5, 310, 289.7, 257.9, 333.7, 194.1, 362.7, 127, 372.7, -131.4, 373, -217.5, 354, -219.6, 354, -265.7, 328, -267.1, 328, -317, 281, -352.2, 223, -369.1, 165.8, -372, -132, -372, -147.4, -359, -204.4, -359, -206.9, -328, -265.8, -328, -266.9, -264.1, -329.9, -194.2, -362.8, -127, -372.7, 0, -373, 0, -750, -750, -750, -750, 750, 750, 750) +[node name="Dark" type="Sprite2D" parent="."] +visible = false +modulate = Color(0, 0, 0, 1) +scale = Vector2(0.195, 0.195) +texture = ExtResource("2_21bwm") -[node name="Gravity" type="Area2D" parent="."] -gravity_space_override = 1 -gravity_point = true -gravity_point_unit_distance = 375.0 -gravity_point_center = Vector2(0, 0) -gravity_direction = Vector2(0, 0) -gravity = 5.0 - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Gravity"] -polygon = PackedVector2Array(157.2, -375, -153, -375, -174.3, -372, -179.3, -372, -218.3, -359, -221.5, -359, -256.6, -340, -258.7, -340, -285.7, -319, -287.8, -319, -316.8, -289, -318.1, -289, -341.1, -255, -342.3, -255, -359.3, -218, -360.5, -218, -370.5, -181, -371.8, -181, -375, -154.6, -375, 160.5, -368, 191, -368, 195.4, -356, 225.4, -356, 228.6, -332, 268.5, -332, 270.7, -312, 293.7, -312, 295.9, -284, 320.8, -284, 322.1, -248, 345.1, -248, 346.3, -218, 359.2, -218, 360.5, -197, 366.4, -197, 367.7, -165, 373.7, -165, 374.8, -163.3, 375, 157.4, 375, 174.4, 372, 179.3, 372, 218.3, 359, 221.5, 359, 256.6, 340, 258.7, 340, 293.7, 312, 295.9, 312, 316.9, 289, 318.1, 289, 341.1, 255, 342.3, 255, 357.2, 223, 358.5, 223, 370.5, 181, 371.8, 181, 375, 154.6, 375, -163.2, 368, -191, 368, -195.4, 356, -225.5, 356, -228.6, 332, -268.6, 332, -270.7, 312, -293.8, 312, -295.9, 284, -320.9, 284, -322.1, 248, -345.2, 248, -346.3, 218, -359.3, 218, -360.6, 171, -372.6, 171, -373.8) +[node name="Cells" type="Node2D" parent="."] diff --git a/Gameplay/manager.tscn b/Gameplay/manager.tscn index f65f62a..cefeb55 100644 --- a/Gameplay/manager.tscn +++ b/Gameplay/manager.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=3 format=3 uid="uid://cdaxqopr35lll"] +[gd_scene load_steps=5 format=3 uid="uid://cdaxqopr35lll"] [ext_resource type="Script" uid="uid://b66ysicyh0m1s" path="res://Gameplay/Manager.cs" id="1_ivgep"] +[ext_resource type="PackedScene" uid="uid://demwh8ek37mnx" path="res://Gameplay/desk.tscn" id="3_muxv4"] [ext_resource type="PackedScene" uid="uid://8kv00jc35dma" path="res://Gameplay/manager_panel.tscn" id="3_xooeg"] +[ext_resource type="Texture2D" uid="uid://n0e2tlnwq3e2" path="res://art/manager.png" id="4_2skxn"] [node name="Manager" type="Node2D"] script = ExtResource("1_ivgep") @@ -15,3 +17,9 @@ grow_horizontal = 1 grow_vertical = 1 [node name="Workers" type="Node" parent="."] + +[node name="Desk" parent="." instance=ExtResource("3_muxv4")] + +[node name="Image" type="Sprite2D" parent="."] +scale = Vector2(0.5, 0.5) +texture = ExtResource("4_2skxn") diff --git a/Gameplay/action.tscn b/Gameplay/trait.tscn similarity index 55% rename from Gameplay/action.tscn rename to Gameplay/trait.tscn index 4ead980..31760a1 100644 --- a/Gameplay/action.tscn +++ b/Gameplay/trait.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dti20yu8jfujq"] -[ext_resource type="Script" uid="uid://dtccp5uxgkjwm" path="res://Gameplay/Action.cs" id="1_lk435"] +[ext_resource type="Script" uid="uid://dtccp5uxgkjwm" path="res://Gameplay/Trait.cs" id="1_wtks1"] -[node name="Action" type="Node"] -script = ExtResource("1_lk435") +[node name="Trait" type="Node"] +script = ExtResource("1_wtks1") diff --git a/Gameplay/worker.tscn b/Gameplay/worker.tscn index 9c28e77..02d8261 100644 --- a/Gameplay/worker.tscn +++ b/Gameplay/worker.tscn @@ -21,6 +21,7 @@ step = 1.0 shape = SubResource("CircleShape2D_4poc8") [node name="Sprite2D" type="Sprite2D" parent="."] +texture_filter = 1 scale = Vector2(0.5, 0.5) texture = ExtResource("2_m3kx1") diff --git a/art/manager.png b/art/manager.png new file mode 100644 index 0000000000000000000000000000000000000000..e0fc8d0940cfda66ce7e5de87fdd5d273ebaf4dd GIT binary patch literal 14274 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 literal 0 HcmV?d00001 diff --git a/art/manager.png.import b/art/manager.png.import new file mode 100644 index 0000000..792e267 --- /dev/null +++ b/art/manager.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://n0e2tlnwq3e2" +path="res://.godot/imported/manager.png-4597b8f1ec81670b0cb0a529dbc77f73.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/manager.png" +dest_files=["res://.godot/imported/manager.png-4597b8f1ec81670b0cb0a529dbc77f73.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/art/tiles.png b/art/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4792982102b2164c694989429e7484a3cbb1fc GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGGg9%9bJb4iVq!^2X+?^P2p46!aa#+$GeH|GX zHuiJ>Nn{1`6_P!Id>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!u! zz$3Dlfk96hgc&QA+Lr+Z*-JcqUD;o9ax$9=7`QK-1r$2v>EaktaqI0RLqP@xjw1#K z_CG()r0lG;@Vef)NgV|yLJ2xOts4(SNN^`NZZr@(#+00>)5Ch~5KsUpZXgB}Pt*a5 jABv!-LQJ