Initial Commit

Didn't use git for a minute, oh well.
This commit is contained in:
Bobby Lucero 2025-06-05 00:31:32 -04:00
commit 540e0087b4
41 changed files with 1657 additions and 0 deletions

4
.editorconfig Normal file
View File

@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

53
.gitignore vendored Normal file
View File

@ -0,0 +1,53 @@
# Godot-specific
.import/
export.cfg
export_presets.cfg
# Godot 4 specific
*.godot/ # Cache folder used in Godot 4.x
# Builds
bin/
build/
*.exe
*.dll
*.so
*.dylib
*.apk
*.xcodeproj/
*.xcworkspace/
*.ios/
*.pck
# Mono (C# projects)
.mono/
data_*/ # Generated Mono temp dirs
mono_crash.*
# OS / IDE / editor files
.DS_Store
Thumbs.db
desktop.ini
*.log
*.tmp
*.bak
*.swp
# VSCode
.vscode/
# JetBrains (Rider, CLion, etc.)
.idea/
# Godot Native C++ bindings (if applicable)
godot-cpp/bin/
godot-cpp/gen/
godot-cpp/build/
# Optional: ignore user config
.godot/
# Optional: ignore test files or backups
test/
tests/
*.orig

View File

@ -0,0 +1,54 @@
using Godot;
using System;
public partial class CenterDisplayController : Node
{
[ExportCategory(" ")]
[Export] private Node2D _background;
[Export] private Label _counterLabel;
[Export] private Label _togoLabel;
[Export] private Label _pbtsLabel;
[Export] private AnimationPlayer _pbstAnimationPlayer;
[Export] private AnimationPlayer _counterAnimationPlayer;
private GameManager.State state;
public override void _Ready()
{
state = GameManager.CurrentState;
OnStateChange();
}
public override void _Process(double delta)
{
if (GameManager.CurrentState != state)
{
state = GameManager.CurrentState;
OnStateChange();
}
}
private void OnStateChange()
{
if (state == GameManager.State.IDLE)
{
_pbstAnimationPlayer.Play("TextFade");
_counterAnimationPlayer.Play("CounterOutIdle");
}
else if (state == GameManager.State.PLAY)
{
_pbstAnimationPlayer.Play("TextOutIdle");
_counterAnimationPlayer.Play("CounterFadeIn");
}
else if (state == GameManager.State.LOSS)
{
}
else if (state == GameManager.State.WIN)
{
}
}
}

View File

@ -0,0 +1 @@
uid://dw1twisa1uie6

18
ExtensionMethods.cs Normal file
View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
namespace PopTheLockClone;
public static class ExtensionMethods
{
private static Random _random = new Random();
public static T ShitOutRandomChoice<T>(this IList<T> list)
{
if (list == null || list.Count == 0)
throw new InvalidOperationException("Cannot select a random element from an empty or null list.");
int index = _random.Next(list.Count);
return list[index];
}
}

40
GameManager.cs Normal file
View File

@ -0,0 +1,40 @@
using Godot;
using System;
public partial class GameManager : Node
{
public enum State
{
IDLE,
PLAY,
LOSS,
WIN
}
public bool playing = false;
public static State CurrentState { get; private set; }
public override void _Ready()
{
CurrentState = State.IDLE;
}
public override void _Process(double delta)
{
if (Input.IsActionJustPressed("Press"))
{
playing = !playing;
if (playing)
{
CurrentState = State.PLAY;
}
else
{
CurrentState = State.IDLE;
}
}
}
}

1
GameManager.cs.uid Normal file
View File

@ -0,0 +1 @@
uid://csmfx22swajfs

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Peter Kish
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

116
PaddlePivotTest.cs Normal file
View File

@ -0,0 +1,116 @@
using Godot;
using System;
using System.Collections;
using System.Collections.Generic;
using PopTheLockClone;
public partial class PaddlePivotTest : Node2D
{
[Export] public float RotationSpeed = 90;
[Export] public Label FPS;
[Export] public Label HitsLeft;
[Export] public Node2D[] shapes;
private List<int> myNums;
private Color[] colors = new Color[]
{
Colors.RebeccaPurple,
Colors.SpringGreen,
Colors.GreenYellow,
Colors.AliceBlue,
Colors.AntiqueWhite
};
private bool direction = false;
private float base_speed = 80;
private float max_speed = 200;
private int total_hits = 50;
private int hits_left;
private Color round1 = Color.FromHtml("#7aed00");
private Color currentColor;
private GameManager.State state;
public override void _Ready()
{
Engine.MaxFps = 0;
hits_left = total_hits;
HitsLeft.Text = total_hits.ToString();
myNums = new List<int>();
currentColor = round1;
SetShapesColor();
}
private void UpdateRotationSpeed()
{
int hits_done = total_hits - hits_left;
float progress = hits_done / (float)total_hits;
RotationSpeed = base_speed + (max_speed - base_speed) * progress;
}
public override void _Process(double delta)
{
FPS.Text = "FPS: " + Engine.GetFramesPerSecond();
if (GameManager.CurrentState != state)
{
state = GameManager.CurrentState;
OnStateChange();
}
if (Input.IsActionJustPressed("Press"))
{
UpdateRotationSpeed();
direction = !direction;
HitsLeft.Text = hits_left.ToString();
}
if (GameManager.CurrentState == GameManager.State.PLAY)
{
Rotation += Mathf.DegToRad((float)delta * (direction ? RotationSpeed : -RotationSpeed));
}
}
private void SetShapesColor()
{
for (int i = 0; i < shapes.Length; i++)
{
shapes[i].Set("color", currentColor);
}
}
private void OnStateChange()
{
if (state == GameManager.State.IDLE)
{
currentColor = round1;
SetShapesColor();
Rotation = 0;
}
else if (state == GameManager.State.PLAY)
{
currentColor = round1;
SetShapesColor();
}
else if (state == GameManager.State.LOSS)
{
}
else if (state == GameManager.State.WIN)
{
}
}
}

1
PaddlePivotTest.cs.uid Normal file
View File

@ -0,0 +1 @@
uid://cqccd451iqfti

6
PopTheLockClone.csproj Normal file
View File

@ -0,0 +1,6 @@
<Project Sdk="Godot.NET.Sdk/4.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
</Project>

19
PopTheLockClone.sln Normal file
View File

@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PopTheLockClone", "PopTheLockClone.csproj", "{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}"
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
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{F48F89A5-61E3-4017-90A5-A967FE7A4DEE}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARectangleShape2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fa1cc98873548652da0c14ecefa4737431426fcbb24a7f0641e3d9c266c3_003FRectangleShape2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

66
README.md Normal file
View File

@ -0,0 +1,66 @@
# Primitives2D
<p align="center">
<img src="images/logo.svg" width="128" height="128"/>
</p>
A plugin for the Godot game engine (version 4.x) for rendering primitive 2d shapes.
![](images/ss_editor.png "Primitives2D")
While the [`CanvasItem`](https://docs.godotengine.org/en/stable/classes/class_canvasitem.html) class supports a number of methods for rendering primitive shapes, the engine only offers the [Line2D](https://docs.godotengine.org/en/stable/classes/class_line2d.html) and [Polygon2D](https://docs.godotengine.org/en/stable/classes/class_polygon2d.html) nodes for adding primitive shapes to a scene. This plugin introduces the following node types in a similar fashion:
* ![](addons/primitives2d/icon_rect.svg "Rectangle2D icon") [Rectangle2D](#rectangle2d)
* ![](addons/primitives2d/icon_circle.svg "Circle2D icon") [Circle2D](#circle2d)
* ![](addons/primitives2d/icon_arc.svg "Arc2D icon") [Arc2D](#arc2d)
The nodes simply use the builtin [`CanvasItem`](https://docs.godotengine.org/en/stable/classes/class_canvasitem.html) methods for drawing primitive shapes: [`draw_rect`](https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-method-draw-rect), [`draw_circle`](https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-method-draw-circle) and [`draw_arc`](https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-method-draw-arc).
## Installation
1. Create an `addons` directory inside your project directory.
2. Get the plugin from the AssetLib or from GitHub
* From the AssetLib: Open the AssetLib from the Godot editor and search for "Primitives2D". Click download to install the plugin.
* From GitHub: Run `git clone https://github.com/peter-kish/primitives2d.git` and copy the contents of the `addons` directory to your projects `addons` directory.
4. Enable the plugin in `Project Settings > Plugins`.
## Usage
Add a [Rectangle2D](#rectangle2d), [Circle2D](#circle2d) or [Arc2D](#arc2d) node to your scene and set the node properties described below.
### Rectangle2D
Draws a 2D rectangle.
#### Properties
* `color: Color` - The color of the rectangle.
* `size: Vector2` - The size of the rectangle.
* `filled: bool` - If `false`, the rectangle will be drawn as a stroke with the `color` and `line_width` specified.
* `line_width: float` - Width of the stroke (in case `filled` is `true`).
* `centered: bool` - If `true`, the rectangle will be drawn centered.
### Circle2D
Draws a 2D circle.
#### Properties
* `color: Color` - The color of the circle.
* `radius: float` - The radius of the circle.
* `filled: bool` - If `false`, the circle will be drawn as a stroke with the `color` and `line_width` specified.
* `line_width: float` - Width of the stroke (in case `filled` is `true`).
* `antialiased: bool` - If `true`, the lines will attempt to perform antialiasing using OpenGL line smoothing.
* `detail: int` - The number of line segments.
### Arc2D
Draws a unfilled 2D arc.
#### Properties
* `color: Color` - The color of the arc.
* `radius: float` - The radius of the arc.
* `filled: bool` - If `false`, the arc will be drawn as a stroke with the `color` and `line_width` specified.
* `line_width: float` - Width of the stroke (in case `filled` is `true`).
* `antialiased: bool` - If `true`, the lines will attempt to perform antialiasing using OpenGL line smoothing.
* `detail: int` - The number of line segments.

View File

@ -0,0 +1,55 @@
@tool
extends Node2D
class_name Arc2D
@export var color: Color = Color(1.0, 1.0, 1.0) :
set(new_color):
if color == new_color:
return
color = new_color
queue_redraw()
@export var radius: float = 10.0 :
set(new_radius):
if radius == new_radius:
return
radius = new_radius
queue_redraw()
@export var start_degrees: float = 0.0 :
set(new_start_degrees):
if start_degrees == new_start_degrees:
return
start_degrees = new_start_degrees
start_angle = deg_to_rad(start_degrees)
queue_redraw()
@export var end_degrees: float = 360.0 :
set(new_end_degrees):
if end_degrees == new_end_degrees:
return
end_degrees = new_end_degrees
end_angle = deg_to_rad(end_degrees)
queue_redraw()
@export var line_width: float = -1.0 :
set(new_line_width):
if line_width == new_line_width:
return
line_width = new_line_width
queue_redraw()
@export var antialiased: bool = false :
set(new_antialiased):
if antialiased == new_antialiased:
return
antialiased = new_antialiased
queue_redraw()
@export var detail: int = 30 :
set(new_detail):
if detail == new_detail:
return
detail = new_detail
queue_redraw()
var start_angle = deg_to_rad(start_degrees)
var end_angle = deg_to_rad(end_degrees)
func _draw() -> void:
draw_arc(Vector2.ZERO, radius, start_angle, end_angle, detail, color, line_width, antialiased)

View File

@ -0,0 +1 @@
uid://c6v3ersnx3svd

View File

@ -0,0 +1,47 @@
@tool
extends Node2D
class_name Circle2D
@export var color: Color = Color(1.0, 1.0, 1.0) :
set(new_color):
if color == new_color:
return
color = new_color
queue_redraw()
@export var radius: float = 10.0 :
set(new_radius):
if radius == new_radius:
return
radius = new_radius
queue_redraw()
@export var filled: bool = false :
set(new_filled):
if filled == new_filled:
return
filled = new_filled
queue_redraw()
@export var line_width: float = -1.0 :
set(new_line_width):
if line_width == new_line_width:
return
line_width = new_line_width
queue_redraw()
@export var antialiased: bool = false :
set(new_antialiased):
if antialiased == new_antialiased:
return
antialiased = new_antialiased
queue_redraw()
@export var detail: int = 30 :
set(new_detail):
if detail == new_detail:
return
detail = new_detail
queue_redraw()
func _draw() -> void:
if filled:
draw_circle(Vector2.ZERO, radius, color)
else:
draw_arc(Vector2.ZERO, radius, 0, TAU, detail, color, line_width, antialiased)

View File

@ -0,0 +1 @@
uid://837wj2bp417t

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="icon_arc.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2498"
inkscape:window-height="1417"
id="namedview6"
showgrid="true"
inkscape:zoom="20.85965"
inkscape:cx="15.476591"
inkscape:cy="12.815089"
inkscape:window-x="54"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4"
inkscape:snap-grids="true"
inkscape:snap-bbox="true"
inkscape:snap-center="true"
inkscape:snap-others="true">
<inkscape:grid
type="xygrid"
id="grid4520" />
</sodipodi:namedview>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#68b6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 8 1.8574219 C 4.6192384 1.8574219 1.8574219 4.6192384 1.8574219 8 C 1.8574219 11.380762 4.6192384 14.142578 8 14.142578 C 11.380762 14.142578 14.142578 11.380762 14.142578 8 L 12.142578 8 C 12.142578 10.299881 10.299881 12.142578 8 12.142578 C 5.7001186 12.142578 3.8574219 10.299881 3.8574219 8 C 3.8574219 5.7001186 5.7001186 3.8574219 8 3.8574219 L 8 1.8574219 z "
id="path816" />
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cktwptpptwjde"
path="res://.godot/imported/icon_arc.svg-7a5f8a77ce12efc06399abc8e3fce355.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/primitives2d/icon_arc.svg"
dest_files=["res://.godot/imported/icon_arc.svg-7a5f8a77ce12efc06399abc8e3fce355.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

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="icon_circle.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2498"
inkscape:window-height="1417"
id="namedview6"
showgrid="true"
inkscape:zoom="20.85965"
inkscape:cx="15.476591"
inkscape:cy="12.815089"
inkscape:window-x="54"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4"
inkscape:snap-grids="true"
inkscape:snap-bbox="true"
inkscape:snap-center="true"
inkscape:snap-others="true">
<inkscape:grid
type="xygrid"
id="grid4520" />
</sodipodi:namedview>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#68b6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 8,1.8574219 C 4.6192384,1.8574219 1.8574219,4.6192384 1.8574219,8 c 0,3.380762 2.7618165,6.142578 6.1425781,6.142578 3.380762,0 6.142578,-2.761816 6.142578,-6.142578 C 14.142578,4.6192384 11.380762,1.8574219 8,1.8574219 Z m 0,2 c 2.299881,0 4.142578,1.8426967 4.142578,4.1425781 0,2.299881 -1.842697,4.142578 -4.142578,4.142578 C 5.7001186,12.142578 3.8574219,10.299881 3.8574219,8 3.8574219,5.7001186 5.7001186,3.8574219 8,3.8574219 Z"
id="path816"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lyvf2iftw2pt"
path="res://.godot/imported/icon_circle.svg-bce51241acdfbf9ba6275aa0791b2467.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/primitives2d/icon_circle.svg"
dest_files=["res://.godot/imported/icon_circle.svg-bce51241acdfbf9ba6275aa0791b2467.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

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="icon_rect.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2498"
inkscape:window-height="1417"
id="namedview6"
showgrid="true"
inkscape:zoom="20.85965"
inkscape:cx="15.476591"
inkscape:cy="8.9799332"
inkscape:window-x="54"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4"
inkscape:snap-grids="true"
inkscape:snap-bbox="true"
inkscape:snap-center="true"
inkscape:snap-others="true">
<inkscape:grid
type="xygrid"
id="grid4520" />
</sodipodi:namedview>
<path
style="opacity:1;fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 2 2 L 2 14 L 14 14 L 14 2 L 2 2 z M 4 4 L 12 4 L 12 12 L 4 12 L 4 4 z "
id="rect829" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cuyk0h2qlsus8"
path="res://.godot/imported/icon_rect.svg-2d0412db84b08def9dbef32870e9e825.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/primitives2d/icon_rect.svg"
dest_files=["res://.godot/imported/icon_rect.svg-2d0412db84b08def9dbef32870e9e825.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

View File

@ -0,0 +1,7 @@
[plugin]
name="Primitives2D"
description="A plugin for rendering primitive 2d shapes."
author="Peter Kish"
version="0.0.2"
script="primitives2d.gd"

View File

@ -0,0 +1,14 @@
@tool
extends EditorPlugin
func _enter_tree():
add_custom_type("Rectangle2D", "Node2D", preload("rectangle2d.gd"), preload("icon_rect.svg"))
add_custom_type("Circle2D", "Node2D", preload("circle2d.gd"), preload("icon_circle.svg"))
add_custom_type("Arc2D", "Node2D", preload("arc2d.gd"), preload("icon_arc.svg"))
func _exit_tree():
remove_custom_type("Rectangle2D")
remove_custom_type("Circle2D")
remove_custom_type("Arc2D")

View File

@ -0,0 +1 @@
uid://detus2vpvumon

View File

@ -0,0 +1,41 @@
@tool
extends Node2D
class_name Rectangle2D
@export var color: Color = Color(1.0, 1.0, 1.0) :
set(new_color):
if color == new_color:
return
color = new_color
queue_redraw()
@export var size: Vector2 = Vector2(10, 10) :
set(new_size):
if size == new_size:
return
size = new_size
queue_redraw()
@export var filled: bool = true :
set(new_filled):
if filled == new_filled:
return
filled = new_filled
queue_redraw()
@export var line_width: float = -1.0 :
set(new_line_width):
if line_width == new_line_width:
return
line_width = new_line_width
queue_redraw()
@export var centered: bool = false :
set(new_centered):
if centered == new_centered:
return
centered = new_centered
queue_redraw()
func _draw() -> void:
var rect = Rect2(Vector2.ZERO, size)
if centered:
rect.position -= rect.size / 2
draw_rect(rect, color, filled, line_width)

View File

@ -0,0 +1 @@
uid://bspmrib6cl6qc

7
default_env.tres Normal file
View File

@ -0,0 +1,7 @@
[gd_resource type="Environment" load_steps=2 format=3 uid="uid://bn8vrgsvwn637"]
[sub_resource type="Sky" id="1"]
[resource]
background_mode = 2
sky = SubResource("1")

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

34
icon.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d16cl12e7emr3"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.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

1
icon.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>

After

Width:  |  Height:  |  Size: 994 B

37
icon.svg.import Normal file
View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://mm7esur6jc6g"
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

66
images/logo.svg Normal file
View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="30"
viewBox="0 0 30 30"
width="30"
version="1.1"
id="svg4"
sodipodi:docname="logo.svg"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata10"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs8" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2498"
inkscape:window-height="1417"
id="namedview6"
showgrid="true"
inkscape:zoom="20.85965"
inkscape:cx="10.163162"
inkscape:cy="14.861227"
inkscape:window-x="54"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4"
inkscape:snap-grids="true"
inkscape:snap-bbox="true"
inkscape:snap-center="true"
inkscape:snap-others="true"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"><inkscape:grid
type="xygrid"
id="grid4520"
originx="0"
originy="0" /></sodipodi:namedview><path
style="opacity:1;fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 2,2 V 14 H 14 V 2 Z m 2,2 h 8 v 8 H 4 Z"
id="rect829" /><rect
style="fill:none;stroke:none;stroke-width:0.854173;stroke-linecap:square"
id="rect1635"
width="28"
height="28"
x="1"
y="1" /><path
id="path1795"
style="fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:0.854173;stroke-linecap:square"
d="m 8,16 a 6,6 0 0 0 -6,6 6,6 0 0 0 6,6 6,6 0 0 0 6,-6 6,6 0 0 0 -6,-6 z m 0,2 a 4,4 0 0 1 4,4 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 z" /><path
id="path1852"
style="fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:0.854173;stroke-linecap:square"
d="m 22,16 a 6,6 0 0 0 -6,6 6,6 0 0 0 6,6 6,6 0 0 0 6,-6 h -2 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 z" /></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

37
images/logo.svg.import Normal file
View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7alrclriuwu5"
path="res://.godot/imported/logo.svg-2a358a172e03a2c52fe1d84dd759ccf5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://images/logo.svg"
dest_files=["res://.godot/imported/logo.svg-2a358a172e03a2c52fe1d84dd759ccf5.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

BIN
images/ss_editor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://did8jtoy828bl"
path="res://.godot/imported/ss_editor.png-7e64bce0e7c68fc091b99ba790d849af.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://images/ss_editor.png"
dest_files=["res://.godot/imported/ss_editor.png-7e64bce0e7c68fc091b99ba790d849af.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

526
main.tscn Normal file
View File

@ -0,0 +1,526 @@
[gd_scene load_steps=23 format=3 uid="uid://dc7mdcm45gwcm"]
[ext_resource type="Script" uid="uid://837wj2bp417t" path="res://addons/primitives2d/circle2d.gd" id="1_ig7tw"]
[ext_resource type="Script" uid="uid://bspmrib6cl6qc" path="res://addons/primitives2d/rectangle2d.gd" id="2_0xm2m"]
[ext_resource type="Script" uid="uid://cqccd451iqfti" path="res://PaddlePivotTest.cs" id="3_h2yge"]
[ext_resource type="Script" uid="uid://csmfx22swajfs" path="res://GameManager.cs" id="4_lquwl"]
[ext_resource type="Script" uid="uid://dw1twisa1uie6" path="res://CenterDisplayController.cs" id="5_7mycd"]
[sub_resource type="SystemFont" id="SystemFont_0xm2m"]
font_names = PackedStringArray("Fredoka")
hinting = 2
[sub_resource type="LabelSettings" id="LabelSettings_h2yge"]
line_spacing = -17.165
font = SubResource("SystemFont_0xm2m")
font_size = 46
[sub_resource type="SystemFont" id="SystemFont_h2yge"]
font_names = PackedStringArray("Fredoka")
font_stretch = 200
[sub_resource type="LabelSettings" id="LabelSettings_1bvp3"]
font = SubResource("SystemFont_h2yge")
font_size = 56
[sub_resource type="LabelSettings" id="LabelSettings_lquwl"]
font = SubResource("SystemFont_h2yge")
font_size = 125
font_color = Color(1, 1, 1, 0.0862745)
[sub_resource type="Animation" id="Animation_272bh"]
resource_name = "CounterFadeIn"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0.0862745), Color(1, 1, 1, 1)]
}
tracks/1/type = "method"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("AnimationPlayer")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.5),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [&"CounterInIdle", -1, 1.0, false],
"method": &"play"
}]
}
[sub_resource type="Animation" id="Animation_5vw27"]
resource_name = "CounterFadeOut"
length = 0.35
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.35),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0.0862745)]
}
[sub_resource type="Animation" id="Animation_kek77"]
resource_name = "CounterInIdle"
length = 0.1
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_4c57u"]
resource_name = "CounterOutIdle"
length = 0.1
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0.0862745), Color(1, 1, 1, 0.0862745)]
}
[sub_resource type="Animation" id="Animation_efxa6"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0.0862745)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dg77c"]
_data = {
&"CounterFadeIn": SubResource("Animation_272bh"),
&"CounterFadeOut": SubResource("Animation_5vw27"),
&"CounterInIdle": SubResource("Animation_kek77"),
&"CounterOutIdle": SubResource("Animation_4c57u"),
&"RESET": SubResource("Animation_efxa6")
}
[sub_resource type="LabelSettings" id="LabelSettings_7mycd"]
font = SubResource("SystemFont_h2yge")
font_size = 20
shadow_color = Color(0.637843, 0.637843, 0.637843, 1)
[sub_resource type="LabelSettings" id="LabelSettings_272bh"]
line_spacing = -4.19
font = SubResource("SystemFont_h2yge")
font_size = 30
font_color = Color(0, 0.32549, 0.698039, 0)
[sub_resource type="Animation" id="Animation_lquwl"]
resource_name = "TextFade"
length = 0.75
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.749632),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0.32549, 0.698039, 0.34902), Color(0, 0.32549, 0.698039, 1)]
}
[sub_resource type="Animation" id="Animation_7mycd"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0.32549, 0.698039, 0)]
}
[sub_resource type="Animation" id="Animation_dg77c"]
resource_name = "TextOutIdle"
length = 0.1
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:label_settings:font_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0.32549, 0.698039, 0), Color(0, 0.32549, 0.698039, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_272bh"]
_data = {
&"RESET": SubResource("Animation_7mycd"),
&"TextFade": SubResource("Animation_lquwl"),
&"TextOutIdle": SubResource("Animation_dg77c")
}
[node name="Node2D" type="Node2D"]
[node name="Camera2D" type="Camera2D" parent="."]
offset = Vector2(0, -158.4)
[node name="Sprite2D" type="Sprite2D" parent="."]
[node name="Polygon2D" type="Polygon2D" parent="."]
[node name="MainBodyLit" type="Node2D" parent="."]
z_index = -1
script = ExtResource("1_ig7tw")
radius = 289.04
filled = true
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="MainBodyOutline" type="Node2D" parent="."]
z_index = -2
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 298.25
filled = true
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="MainBodyLEDBackground" type="Node2D" parent="."]
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 246.215
line_width = 72.66
detail = 90
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="HACK" type="Node2D" parent="MainBodyLEDBackground"]
rotation = 0.0371891
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 246.215
line_width = 72.66
detail = 90
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="PaddleTrack" type="Node2D" parent="."]
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 183.83
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="PaddleTrackOutline" type="Node2D" parent="PaddleTrack"]
script = ExtResource("1_ig7tw")
color = Color(0, 0, 0, 1)
radius = 184.415
line_width = 3.24
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="HACK" type="Node2D" parent="PaddleTrack/PaddleTrackOutline"]
rotation = 0.00711103
script = ExtResource("1_ig7tw")
color = Color(0, 0, 0, 1)
radius = 184.415
line_width = 3.24
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="DisplayOutline" type="Node2D" parent="."]
z_index = 1
script = ExtResource("1_ig7tw")
color = Color(0.47788, 0.47788, 0.47788, 1)
radius = 113.605
line_width = 9.2
detail = 67
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="FUCKINGHACK" type="Node2D" parent="DisplayOutline"]
z_index = 1
rotation = 0.0129723
script = ExtResource("1_ig7tw")
color = Color(0.47788, 0.47788, 0.47788, 1)
radius = 113.605
line_width = 9.2
detail = 67
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="LockTopBackgroundLit" type="Node2D" parent="."]
z_index = -4
position = Vector2(0, -405)
script = ExtResource("1_ig7tw")
radius = 190.0
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="LockTopBackgroundLit2" type="Node2D" parent="LockTopBackgroundLit"]
z_index = -2
position = Vector2(0, 179)
script = ExtResource("2_0xm2m")
size = Vector2(380, 352.7)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="LockTopOutline" type="Node2D" parent="."]
z_index = -7
position = Vector2(0, -405)
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 200.0
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="LockTopOutline2" type="Node2D" parent="LockTopOutline"]
z_index = -2
position = Vector2(0, 179)
script = ExtResource("2_0xm2m")
color = Color(0.14902, 0.14902, 0.14902, 1)
size = Vector2(400, 352.7)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="LockTopInnerBackground" type="Node2D" parent="."]
z_index = -3
position = Vector2(0, -405)
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 120.0
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="LockTopInnerBackground2" type="Node2D" parent="LockTopInnerBackground"]
z_index = -1
position = Vector2(0, 179)
script = ExtResource("2_0xm2m")
color = Color(0.14902, 0.14902, 0.14902, 1)
size = Vector2(240, 352.7)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="TopScreenBackground" type="Node2D" parent="."]
z_index = -3
position = Vector2(0, -295)
script = ExtResource("2_0xm2m")
size = Vector2(215.96, 133.325)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="LogoOutline" type="Node2D" parent="."]
z_index = 1
position = Vector2(0, -444)
script = ExtResource("1_ig7tw")
radius = 70.015
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="LogoBackground" type="Node2D" parent="."]
z_index = 1
position = Vector2(0, -444)
script = ExtResource("1_ig7tw")
color = Color(0.14902, 0.14902, 0.14902, 1)
radius = 64.095
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="Label" type="Label" parent="."]
z_index = 1
offset_left = -40.0
offset_top = -505.0
offset_right = 62.0
offset_bottom = -357.0
scale = Vector2(0.777311, 0.769849)
text = "Pop
the
Lock"
label_settings = SubResource("LabelSettings_h2yge")
horizontal_alignment = 1
vertical_alignment = 1
[node name="PaddlePivot" type="Node2D" parent="." node_paths=PackedStringArray("FPS", "HitsLeft", "shapes")]
script = ExtResource("3_h2yge")
FPS = NodePath("../Label2")
HitsLeft = NodePath("../CenterDisplayController/DisplayBackground/Counter")
shapes = [NodePath("../MainBodyLit"), NodePath("../LockTopBackgroundLit"), NodePath("../LockTopBackgroundLit/LockTopBackgroundLit2"), NodePath("../TopScreenBackground")]
[node name="Circle2D" type="Node2D" parent="PaddlePivot"]
z_index = 8
position = Vector2(3.04231e-05, -174)
script = ExtResource("1_ig7tw")
color = Color(0.719453, 3.7542e-06, 3.85046e-07, 1)
radius = 6.0
filled = true
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="Circle2D2" type="Node2D" parent="PaddlePivot"]
z_index = 8
position = Vector2(2.25551e-05, -129)
script = ExtResource("1_ig7tw")
color = Color(0.719453, 3.7542e-06, 3.85046e-07, 1)
radius = 6.0
filled = true
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="Rectangle2D" type="Node2D" parent="PaddlePivot"]
z_index = 8
position = Vector2(0, -151)
script = ExtResource("2_0xm2m")
color = Color(0.719453, 3.7542e-06, 3.85046e-07, 1)
size = Vector2(12, 44.92)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="Label2" type="Label" parent="."]
offset_left = -332.0
offset_top = -708.0
offset_right = -120.0
offset_bottom = -639.0
text = "FPS: xxx"
label_settings = SubResource("LabelSettings_1bvp3")
vertical_alignment = 1
[node name="Coin" type="Node2D" parent="."]
z_index = 1
position = Vector2(152, 0)
script = ExtResource("1_ig7tw")
color = Color(0.933333, 0.878431, 0, 1)
radius = 26.175
filled = true
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="Background" type="Node2D" parent="."]
z_index = -100
script = ExtResource("2_0xm2m")
color = Color(0, 0, 0, 1)
size = Vector2(1000, 10000)
centered = true
metadata/_custom_type_script = "uid://bspmrib6cl6qc"
[node name="GameManager" type="Node" parent="."]
script = ExtResource("4_lquwl")
[node name="CenterDisplayController" type="Node" parent="." node_paths=PackedStringArray("_background", "_counterLabel", "_togoLabel", "_pbtsLabel", "_pbstAnimationPlayer", "_counterAnimationPlayer")]
script = ExtResource("5_7mycd")
_background = NodePath("DisplayBackground")
_counterLabel = NodePath("DisplayBackground/Counter")
_togoLabel = NodePath("DisplayBackground/TO GO!")
_pbtsLabel = NodePath("DisplayBackground/Press Button To Start")
_pbstAnimationPlayer = NodePath("DisplayBackground/Press Button To Start/ColorFadeLoop")
_counterAnimationPlayer = NodePath("DisplayBackground/Counter/AnimationPlayer")
[node name="DisplayBackground" type="Node2D" parent="CenterDisplayController"]
z_index = 1
script = ExtResource("1_ig7tw")
color = Color(0, 0.75118, 0, 1)
radius = 105.185
filled = true
detail = 47
metadata/_custom_type_script = "uid://837wj2bp417t"
[node name="Counter" type="Label" parent="CenterDisplayController/DisplayBackground"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -106.0
offset_top = -115.0
offset_right = 106.0
offset_bottom = 69.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(106, 92)
text = "50"
label_settings = SubResource("LabelSettings_lquwl")
horizontal_alignment = 1
vertical_alignment = 1
[node name="AnimationPlayer" type="AnimationPlayer" parent="CenterDisplayController/DisplayBackground/Counter"]
libraries = {
&"": SubResource("AnimationLibrary_dg77c")
}
[node name="TO GO!" type="Label" parent="CenterDisplayController/DisplayBackground"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -106.0
offset_top = -33.0
offset_right = 106.0
offset_bottom = 151.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(106, 92)
text = "TO GO!"
label_settings = SubResource("LabelSettings_7mycd")
horizontal_alignment = 1
vertical_alignment = 1
[node name="Press Button To Start" type="Label" parent="CenterDisplayController/DisplayBackground"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -106.0
offset_top = -88.0
offset_right = 106.0
offset_bottom = 96.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(106, 92)
text = "Press Button
To Start"
label_settings = SubResource("LabelSettings_272bh")
horizontal_alignment = 1
vertical_alignment = 1
[node name="ColorFadeLoop" type="AnimationPlayer" parent="CenterDisplayController/DisplayBackground/Press Button To Start"]
libraries = {
&"": SubResource("AnimationLibrary_272bh")
}

42
project.godot Normal file
View File

@ -0,0 +1,42 @@
; 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="PopTheLockClone"
run/main_scene="uid://dc7mdcm45gwcm"
config/features=PackedStringArray("4.4", "C#", "Forward Plus")
config/icon="res://icon.svg"
[display]
window/size/viewport_width=677
window/size/viewport_height=1113
window/stretch/mode="viewport"
[dotnet]
project/assembly_name="PopTheLockClone"
[editor_plugins]
enabled=PackedStringArray("res://addons/primitives2d/plugin.cfg")
[input]
Press={
"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)
]
}
[rendering]
anti_aliasing/quality/msaa_2d=2