From 226feafa2cd5d5be280bbc0eb175cd1f75ef6900 Mon Sep 17 00:00:00 2001 From: cojoedmo Date: Mon, 7 Jul 2025 12:52:18 -0400 Subject: [PATCH] first commit --- .editorconfig | 4 + .gitattributes | 2 + .gitignore | 3 + Hotdesking.csproj | 6 + Hotdesking.sln | 19 ++ Marble.cs | 797 ++++++++++++++++++++++++++++++++++++++++++++++ Marble.cs.uid | 1 + icon.svg | 1 + icon.svg.import | 37 +++ marble.tscn | 19 ++ project.godot | 19 ++ 11 files changed, 908 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Hotdesking.csproj create mode 100644 Hotdesking.sln create mode 100644 Marble.cs create mode 100644 Marble.cs.uid create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 marble.tscn create mode 100644 project.godot diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/Hotdesking.csproj b/Hotdesking.csproj new file mode 100644 index 0000000..8eebc1d --- /dev/null +++ b/Hotdesking.csproj @@ -0,0 +1,6 @@ + + + net8.0 + true + + \ No newline at end of file diff --git a/Hotdesking.sln b/Hotdesking.sln new file mode 100644 index 0000000..db3f836 --- /dev/null +++ b/Hotdesking.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hotdesking", "Hotdesking.csproj", "{C5730C39-99E8-4846-B3D0-BE6A5F16906C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {C5730C39-99E8-4846-B3D0-BE6A5F16906C}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/Marble.cs b/Marble.cs new file mode 100644 index 0000000..b19bf60 --- /dev/null +++ b/Marble.cs @@ -0,0 +1,797 @@ +using Godot; +using System; + +public partial class Marble : CharacterBody2D +{ + public bool _dead, _isTurn, _turnDone, _actionTaken, _isHero, _placed, _hovered, _selected, _aimed, _launched, _collided, _moving; +public string _class, _id; +public int _battle, _experience; +public float _radius, _mass, _distanceMoved, _spin, _damping; +public Vector2 _startPosition, _velocity, _pullback; + +public List _conditions = new(); +public List _actions = new(); +public List _traits = new(); +public Action _defaultAction; +public Action _focusedAction; +public ActionSelector _actionSelector; + +public Stats _stats; + +public Player _owner; +public object _lastCollisionObject; + +//these may get implemented elsewhere eventually +public const float _airDrag = 0.1f; // Air drag coefficient (0 = no drag) +public const float _friction = 0.95f; // Friction coefficient (1 = no friction) + + +public Marble(float RADIUS, float MASS) : base("Visuals\\basicMarble", new Vector2(-1, -1), new Vector2(RADIUS*2), new Vector2(8, 1), new Vector2(1.0f, 1.0f)) +{ + _class = this.GetType().ToString().Replace("CorporateLadder.", ""); + _id = Guid.NewGuid().ToString(); + _dead = false; + _isTurn = false; + _turnDone = false; + _actionTaken = false; + _isHero = false; + _placed = false; + _hovered = false; + _selected = false; + _aimed = false; + _moving = false; + _launched = false; + _collided = false; + + _battle = 1; + _experience = 0; + + _radius = RADIUS; + _mass = MASS; + _spin = 0; // 1 RPM = 360 DPM = 6 DPS @ 60FPS = .1 DPF // Divide RPM by 10 to get DPF + _damping = 0.99f; + + _pullback = new Vector2(0, 0); + _velocity = new Vector2(0, 0); + + _rotation = 0; + _distanceMoved = 0; + + _stats = new Stats(_class); + + _owner = null; + _lastCollisionObject = null; + + CreatePerFrameAnimations("Roll"); + SetAnimationByName("Roll"); + _frameAnimations = true; + + Action tempAction = new Launch(this); + tempAction.AddTo(this); + tempAction = new Defend(this); + tempAction.AddTo(this); + tempAction = new RecklessLaunch(this); + tempAction.AddTo(this); + _defaultAction = _actions[0]; + _actionSelector = new ActionSelector(this); + + ProcessOnCreation(); +} + +public override void Update() +{ + if (_dead) + { + Hide(); + } + + if (Globals._battle._turn == _owner && !_dead && _position.X > -1 && _position.Y > -1) + { + _actionSelector?.Update(_position); + } + else + { + if (_actionSelector != null && _actionSelector._active) + { + _actionSelector.Deactivate(); + } + } + + if (_position.X > -1 && _position.Y > -1) + { + base.Update(); + if (PassesInitialChecks()) + { + TryHover(); + TrySelect(); + TryAim(); + + if (!_turnDone) + { + if (_actionTaken) + { + _turnDone = true; + } + } + } + TryLaunch(); + TryCollision(); + TryMovement(); + + } +} + +public override void Update(Vector2 NEWPOSITION) +{ + _position = NEWPOSITION; + _actionSelector?.Update(_position); +} + +public virtual void ActionAdd(Action ACTION) +{ + if (!_actions.Contains(ACTION)) + { + _actions.Add(ACTION); + ACTION.ProcessOnAdd(); + } +} + +public virtual void ActionRemove(Action ACTION) +{ + if (_actions.Contains(ACTION)) + { + ACTION.ProcessOnRemove(); + _actions.Remove(ACTION); + } +} + +public virtual void AddExperience(object INFO) +{ + _experience += Globals.ConvertToInt(INFO); +} + +public virtual void ChangeHealth(Marble ATTACKER, int CHANGE) +{ + _stats._health += CHANGE; + _stats._health = Math.Min(_stats._health, _stats._healthMax); + if (_stats._health <= 0) + { + _dead = true; + //ATTACKER.AddExperience(GetExp()); + } +} + +public virtual void CheckIfLevelUp() +{ + +} + +public virtual int CheckLevelExperience(int LEVEL) +{ + return 2 * LEVEL + (int)Math.Pow(2.0, 1.0f + LEVEL * .2f); +} + + + +public virtual void CollideWithMarble(Marble OTHER) +{ + // From: https://stackoverflow.com/q/345838/880990, author: mmcdole + + Vector2 delta = _position - OTHER._position; + float distance = delta.Length(); + if (distance <= _radius + OTHER._radius && distance > 1e-5) + { + // Minimum translation distance to push balls apart after intersecting + Vector2 minTranslationDistance = delta * ((_radius + OTHER._radius - distance) / distance); + + // Resolve intersection - inverse mass quantities + float inverseMass1 = 1 / _mass; + float inverseMass2 = 1 / OTHER._mass; + + // Push-pull them apart based off their mass + _position += minTranslationDistance * (inverseMass1 / (inverseMass1 + inverseMass2)); + OTHER._position -= minTranslationDistance * (inverseMass1 / (inverseMass1 + inverseMass2)); + + // Impact speed + Vector2 velocityDelta = _velocity - OTHER._velocity; + Vector2 minTranslationDistanceNormalized = Vector2.Normalize(minTranslationDistance); + float velocityNormalized = Vector2.Dot(velocityDelta, minTranslationDistanceNormalized); + + // Sphere intersecting but moving away from each other already + if (velocityNormalized > 0.0f) return; + + // Collision impulse + const float restitution = 1.0f; // perfectly elastic collision + + float i = -(1.0f + restitution) * velocityNormalized / (inverseMass1 + inverseMass2); + Vector2 impulse = minTranslationDistanceNormalized * i; + + // Change in momentum + _velocity += impulse * inverseMass1; + _velocity *= _damping; + OTHER._velocity -= impulse * inverseMass2; + OTHER._velocity *= OTHER._damping; + // Perform + + _collided = !_launched; + + ProcessOnCollisionMarble(OTHER); + OTHER.ProcessOnCollisionMarble(this); + + } +} + +//public virtual void CollideWithWallInner(Rectangle WALL) +//{ +// // Only reverse velocity if moving towards the walls + +// if (_position.X + _radius >= WALL.Right && _velocity.X > 0 || _position.X - _radius < WALL.Left && _velocity.X < 0) +// { +// _velocity = new Vector2(-_velocity.X, _velocity.Y); +// ProcessOnCollisionWall(); +// } +// if (_position.Y + _radius >= WALL.Bottom && _velocity.Y > 0 || _position.Y - _radius < WALL.Top && _velocity.Y < 0) +// { +// _velocity = new Vector2(_velocity.X, -_velocity.Y); +// ProcessOnCollisionWall(); +// } +//} + +public virtual void CollideWithWallOuter(Rectangle WALL) +{ + // Only reverse velocity if moving towards the walls + + if (!WALL.Contains(_position + Globals.LengthenVector(_velocity, _radius))) + { + if (_position.X + _radius >= WALL.Right || _position.X - _radius < WALL.Left) + { + _velocity = new Vector2(-_damping * _velocity.X, _velocity.Y); + } + if (_position.Y + _radius >= WALL.Bottom || _position.Y - _radius < WALL.Top) + { + _velocity = new Vector2(_velocity.X, -_damping * _velocity.Y); + } + ProcessOnCollisionWall(); + } + //if (_position.X + _radius >= WALL.Right && _velocity.X > 0 || _position.X - _radius < WALL.Left && _velocity.X < 0) + //{ + // _velocity = new Vector2(-_velocity.X, _velocity.Y); + // ProcessOnCollisionWall(); + //} + //if (_position.Y + _radius >= WALL.Bottom && _velocity.Y > 0 || _position.Y - _radius < WALL.Top && _velocity.Y < 0) + //{ + // _velocity = new Vector2(_velocity.X, -_velocity.Y); + // ProcessOnCollisionWall(); + //} + +} + +public virtual void ConditionAdd(Condition CONDITION) +{ + if (!_conditions.Contains(CONDITION)) + { + _conditions.Add(CONDITION); + CONDITION.ProcessOnAdd(); + } +} + +public virtual void ConditionRemove(Condition CONDITION) +{ + if (_conditions.Contains(CONDITION)) + { + CONDITION.ProcessOnRemove(); + _conditions.Remove(CONDITION); + } +} + +public virtual int GetExp() +{ + return _battle * 2; +} + +public virtual void Hide() +{ + _position = new Vector2(-1, -1); +} + +public virtual bool IsFocal() +{ + return Globals._battle._focalMarble == this; +} + +public virtual bool IsHovered() +{ + return Globals.CalculateDistance(_position, Globals._mouse._newMousePosition) <= _radius; +} + +public virtual void LevelUp() +{ + +} + +public virtual bool PassesInitialChecks() +{ + bool isNotPlaced = !_placed; + if (isNotPlaced) { return false; } + + bool isNotTurn = !(Globals._battle._turn == _owner); + if (isNotTurn) { return false; } + + if (_actionTaken) { return false; } + + bool marblesMoving = Globals._battle._movementDetected; + if (marblesMoving) { return false; } + + return true; +} + +#region PROCS +public virtual void ProcessOnAdd() +{ + +} + +public virtual void ProcessOnBattleStart() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnBattleStart(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnBattleStart(); + } +} + +public virtual void ProcessOnBattleEnd() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnBattleEnd(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnBattleEnd(); + } +} + +public virtual void ProcessOnCollisionMarble(Marble TARGET) +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnCollisionMarble(TARGET); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnCollisionMarble(TARGET); + } +} + +public virtual void ProcessOnCollisionWall() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnCollisionWall(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnCollisionWall(); + } +} + +public virtual void ProcessOnCreation() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnCreation(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnCreation(); + } +} + +public virtual void ProcessOnCritical() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnCritical(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnCritical(); + } +} + +public virtual void ProcessOnDeath() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnDeath(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnDeath(); + } +} + +public virtual void ProcessOnDefend() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnDefend(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnDefend(); + } +} + +public virtual void ProcessOnExpiration() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnExpiration(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnExpiration(); + } +} + +public virtual void ProcessOnLaunch() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnLaunch(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnLaunch(); + } +} + +public virtual void ProcessOnRemove() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnRemove(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnRemove(); + } +} + +public virtual void ProcessOnSell() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnSell(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnSell(); + } +} + +public virtual void ProcessOnStop() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnStop(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnStop(); + } +} + +public virtual void ProcessOnMovement() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnMovement(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnMovement(); + } +} + +public virtual void ProcessOnTurnEnd() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnTurnEnd(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnTurnEnd(); + } +} + +public virtual void ProcessOnTurnStart() +{ + for (int i = 0; i < _conditions.Count; i++) + { + _conditions[i].ProcessOnTurnStart(); + } + for (int i = 0; i < _actions.Count; i++) + { + _actions[i].ProcessOnTurnStart(); + } +} +#endregion + +public virtual void Resurrect() +{ + _dead = false; +} + +public virtual void SetOwner(Player OWNER) +{ + _owner = OWNER; +} + +public virtual void SetPosition(Vector2 POSITION) +{ + _position = POSITION; +} + +public virtual void TraitAdd(Trait TRAIT) +{ + if (!_traits.Contains(TRAIT)) + { + _traits.Add(TRAIT); + TRAIT.ProcessOnAdd(); + + } +} + +public virtual void TraitRemove(Trait TRAIT) +{ + if (_traits.Contains(TRAIT)) + { + TRAIT.ProcessOnRemove(); + _traits.Remove(TRAIT); + } +} + +public virtual void TryAim() +{ + if (!_hovered && _selected && IsFocal() && Globals._mouse.LeftClickDrag(_radius / 4) && !_actionSelector._active) + { + _aimed = true; + } + if (_aimed) + { + _selected = false; + if (Globals._mouse.RightClickRelease()) + { + return; + } + float pullbackX, pullbackY; + if (Globals._keyboard.GetPress("LeftShift")) + { + float pullbackAngle = Globals.CalculateAngle(_position, Globals._mouse._newMousePosition) * 180 / Globals._pi; + + if ((pullbackAngle >= -22.5f && pullbackAngle <= 22.5f) || (pullbackAngle >= 157.5f || pullbackAngle <= -157.5f)) + { + pullbackX = _position.X - Globals._mouse._newMousePosition.X; + pullbackY = 0f; + } + else if ((pullbackAngle <= -67.5f && pullbackAngle >= -112.5f) || (pullbackAngle >= 67.5f && pullbackAngle <= 112.5f)) + { + pullbackX = 0f; + pullbackY = _position.Y - Globals._mouse._newMousePosition.Y; + } + else if ((pullbackAngle <= -22.5f && pullbackAngle >= -67.5f) || (pullbackAngle >= 112.5f && pullbackAngle <= 157.5f)) + { + pullbackX = _position.X - Globals._mouse._newMousePosition.X; + pullbackY = -pullbackX; + } + else + { + pullbackX = _position.X - Globals._mouse._newMousePosition.X; + pullbackY = pullbackX; + } + + } + else + { + pullbackX = _position.X - Globals._mouse._newMousePosition.X; + pullbackY = _position.Y - Globals._mouse._newMousePosition.Y; + } + _pullback = new Vector2(pullbackX, pullbackY); + _rotation = Globals.RotateTowards(_position, _position + _pullback); + + } +} + +public virtual void TryCollision() +{ + if (_moving) + { + for (int i = 0; i < Globals._battle._marbles.Count; i++) + { + Marble tempMarble = Globals._battle._marbles[i]; + if (tempMarble == this) + { + continue; + } + if (Globals.CalculateDistance(_position, tempMarble._position) <= (_radius + tempMarble._radius)) + { + CollideWithMarble(tempMarble); + break; + } + } + CollideWithWallOuter(Globals._battle._outerWall); + //for (int i = 0; i < Globals._battle._innerWalls.Count; i++) + //{ + // CollideWithInnerWall(Globals._battle._innerWalls[i]); + //} + + } +} + +public virtual void TryHover() +{ + _hovered = IsHovered(); + if (_hovered && Globals._battle._focalMarble == null) + { + Globals._battle._focalMarble = this; + } +} + +public virtual void TryLaunch() +{ + if (_aimed && IsFocal() && !_hovered) + { + if (Globals._mouse.LeftClickRelease()) + { + _aimed = false; + _actionTaken = true; + _launched = true; + _velocity = new Vector2(_pullback.X * 20 / _mass / 60, _pullback.Y * 20 / _mass / 60); + _focusedAction ??= _defaultAction; + ProcessOnLaunch(); + } + } + +} + +public virtual void TryMovement() +{ + if (_velocity.X != 0 || _velocity.Y != 0) + { + if (!_moving) + { + _moving = true; + } + ProcessOnMovement(); + + _rotation = Globals.RotateTowards(_position, _position + _velocity); + _velocity = Globals.RotateAround(_velocity, Vector2.Zero, _spin * 360 / 60 / 60); + + _position += _velocity; + _distanceMoved += _velocity.Length(); + + _stats._stamina -= _velocity.Length() / 200; + float staminaRemaining = _stats._stamina / _stats._staminaMax; + + Vector2 acceleration = Vector2.Normalize(_velocity) * -5 / 60; + + //// Air Drag not sure if I'll actually implement + //float v2 = _velocity.LengthSquared(); + //float vAbs = MathF.Sqrt(v2); + //float fDrag = _airDrag * v2; + //Vector2 f = fDrag / vAbs * _velocity; + //_velocity -= 1 / _mass * f; + + float velocityX = (_velocity.X + acceleration.X) * staminaRemaining * _friction, velocityY = (_velocity.Y + acceleration.Y) * staminaRemaining * _friction; + if (Math.Abs(acceleration.X) > Math.Abs(_velocity.X)) + { + velocityX = 0; + } + if (Math.Abs(acceleration.X) > Math.Abs(_velocity.X)) + { + velocityY = 0; + } + _velocity = new Vector2(velocityX, velocityY); + + } + else + { + if (_moving) + { + ProcessOnStop(); + } + _moving = false; + _lastCollisionObject = null; + _launched = false; + } +} +public virtual void TrySelect() +{ + if (_hovered && IsFocal()) + { + if (Globals._mouse.LeftClick()) + { + _selected = true; + } + } + + if (_selected) + { + if (_actionSelector != null && Globals._mouse.LeftClickRelease()) + { + if (!_actionSelector._skipPress) + { + _actionSelector.Activate(); + } + else + { + _actionSelector._skipPress = false; + } + } + + if (!_hovered && !_actionSelector._hovered) + { + if (Globals._mouse.LeftClick()) + { + _selected = false; + } + } + } + else + { + if (_actionSelector != null) + { + if (!_actionSelector._hovered) + { + _actionSelector.Deactivate(); + } + } + } +} + +public virtual void TurnComplete() +{ + _turnDone = true; + _isTurn = false; + _focusedAction = null; + ProcessOnTurnEnd(); + + //for (int i = 0; i < _actions.Count; i++) + //{ + // _actions[i].NextTurn(); + //} + +} + +public virtual void TurnStart() +{ + _turnDone = false; + _isTurn = true; + _actionTaken = false; + _startPosition = _position; + _stats._stamina = _stats._staminaMax; + ProcessOnTurnStart(); +} + +public override void Draw() +{ + if (_position.X > -1 && _position.Y > -1) + { + base.Draw(); + if (_actionSelector != null) + { + if (_actionSelector._active) + { + _actionSelector.Draw(); + } + } + } +} +} diff --git a/Marble.cs.uid b/Marble.cs.uid new file mode 100644 index 0000000..e2faae0 --- /dev/null +++ b/Marble.cs.uid @@ -0,0 +1 @@ +uid://xvxxxkoer7xw diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..9d8b7fa --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..23ca29e --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dv7d81t4j384r" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/marble.tscn b/marble.tscn new file mode 100644 index 0000000..9c8d7bd --- /dev/null +++ b/marble.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://dypthyut32ve5"] + +[ext_resource type="Script" uid="uid://xvxxxkoer7xw" path="res://Marble.cs" id="1_7ritg"] + +[sub_resource type="ImageTexture" id="ImageTexture_sk24e"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_60n0y"] +radius = 19.2354 + +[node name="Marble" type="CharacterBody2D"] +script = ExtResource("1_7ritg") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = SubResource("ImageTexture_sk24e") + +[node name="Camera2D" type="Camera2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_60n0y") diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..9b2321e --- /dev/null +++ b/project.godot @@ -0,0 +1,19 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Hotdesking" +config/features=PackedStringArray("4.4", "Forward Plus") +config/icon="res://icon.svg" + +[dotnet] + +project/assembly_name="Hotdesking"