~kmdodrill/godot-beginner-2d-platformer-csharp

95068c59c5de73feda5397a039c24c9a24cfe2b7 — Kenneth Dodrill 1 year, 2 months ago master
Add all files from github
63 files changed, 2327 insertions(+), 0 deletions(-)

A .github/CODE_OF_CONDUCT.md
A .github/CONTRIBUTING.md
A .github/ISSUE_TEMPLATE/bug_report.md
A .github/ISSUE_TEMPLATE/feature_request.md
A .gitignore
A First 2D Game.csproj
A First 2D Game.sln
A Properties/AssemblyInfo.cs
A README.md
A assets/background.png
A assets/background.png.import
A assets/bumper.png
A assets/bumper.png.import
A assets/coin.png
A assets/coin.png.import
A assets/enemy.png
A assets/enemy.png.import
A assets/font_default.tres
A assets/font_title.tres
A assets/icon.png
A assets/icon.png.import
A assets/light.png
A assets/light.png.import
A assets/montserrat_extrabold.otf
A assets/new_dynamicfont.tres
A assets/player.png
A assets/player.png.import
A assets/portal.png
A assets/portal.png.import
A assets/tileset.png
A assets/tileset.png.import
A assets/tileset.tres
A assets/ui_theme.tres
A default_env.tres
A icon.png
A icon.png.import
A project.godot
A src/Actors/Actor.cs
A src/Actors/Enemy.cs
A src/Actors/Enemy.tscn
A src/Actors/Player.cs
A src/Actors/Player.tscn
A src/Autoload/PlayerData.cs
A src/Autoload/PlayerData.tscn
A src/Levels/Level01.tscn
A src/Levels/Level02.tscn
A src/Levels/LevelTemplate.tscn
A src/Objects/Coin.cs
A src/Objects/Coin.tscn
A src/Objects/Portal2D.cs
A src/Objects/Portal2D.tscn
A src/Screens/EndScreen.cs
A src/Screens/EndScreen.tscn
A src/Screens/MainScreen.tscn
A src/UserInterface/ChangeSceneButton.cs
A src/UserInterface/ChangeSceneButton.tscn
A src/UserInterface/QuitButton.cs
A src/UserInterface/QuitButton.tscn
A src/UserInterface/RetryButton.cs
A src/UserInterface/RetryButton.tscn
A src/UserInterface/Title.tscn
A src/UserInterface/UserInterface.cs
A src/UserInterface/UserInterface.tscn
A  => .github/CODE_OF_CONDUCT.md +38 -0
@@ 1,38 @@
# Code of Conduct

> A code of conduct is a set of rules outlining the social norms and rules and responsibilities of, or proper practices for, an individual, party or organization

## Summary

Sexual language and imagery is not appropriate for any communication and/or talks. Be kind and do not insult or put down others. Behave professionally. Remember that harassment and sexist, racist, or exclusionary jokes are not appropriate for this repository.
These are the values to which people in this community should aspire:

- Be friendly and welcoming
- Be patient
  - Remember that people have varying communication styles and that not everyone is using their native language. (Meaning and tone can be lost in translation.)
- Be thoughtful
  - Productive communication requires effort. Think about how your words will be interpreted.
  - Remember that sometimes it is best to refrain entirely from commenting.
- Be respectful
  - In particular, respect differences of opinion.
- Be charitable
  - Interpret the arguments of others in good faith, do not seek to disagree.
  - When we do disagree, try to understand why.
- Avoid destructive behavior:
  - Derailing: stay on topic; if you want to talk about something else, start a new conversation.
  - Unconstructive criticism: don't merely decry the current state of affairs; offer—or at least solicit—suggestions as to how things may be improved.
  - Snarking (pithy, unproductive, sniping comments)
  - Discussing potentially offensive or sensitive issues; this all too often leads to unnecessary conflict.
  - Microaggressions: brief and commonplace verbal, behavioral and environmental indignities that communicate hostile, derogatory or negative slights and insults to a person or group.

People are complicated. You should expect to be misunderstood and to misunderstand others; when this inevitably occurs, resist the urge to be defensive or assign blame. Try not to take offense where no offense was intended. Give people the benefit of the doubt. Even if the intent was to provoke, do not rise to it. It is the responsibility of all parties to de-escalate conflict when it arises.

## Reporting an incident

Incidents that violate the Code of Conduct are extremely damaging to this community, and they will not be tolerated. The silver lining is that, in many cases, these incidents present a chance for the offenders, and the teams at large, to grow, learn, and become better.

If you feel you have been treated unfairly, please let me (Kenneth Dodrill) know.

## Attribution

This Code of Conduct was adapted from both [Golang](https://golang.org/conduct) and the [Golang UK Conference](http://golanguk.com/conduct/).

A  => .github/CONTRIBUTING.md +30 -0
@@ 1,30 @@
# Contributing

I love contributions from everyone.
By participating in this project,
you agree to abide by the [code of conduct].

  [code of conduct]: https://github.com/kedodrill/godot-beginner-2d-platformer-csharp/blob/master/.github/CODE_OF_CONDUCT.md

I expect everyone to follow the code of conduct
anywhere in this project's codebase.

## Contributing Code

Make sure you have the proper dependencies:

- Godot
- C# dependencies (stated [here](https://godotengine.org/download) - Mono or VS Build Tools)

Fork the repo.

Set up the project through Godot.

Make your change. Push to your fork. Write a [good commit message][commit]. Submit a pull request.

  [commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html

Others will give constructive feedback.
This is a time for discussion and improvements,
and making the necessary changes will be required before we can
merge the contribution.

A  => .github/ISSUE_TEMPLATE/bug_report.md +31 -0
@@ 1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

# Bug Report

## Describe the bug
A clear and concise description of what the bug is.

## To Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. See error

## Expected behavior
A clear and concise description of what you expected to happen.

## Screenshots
If applicable, add screenshots to help explain your problem.

## System Information (please complete the following information):
 - OS: [e.g. Fedora Linux / Windows 10]

## Additional context
Add any other context about the problem here.

A  => .github/ISSUE_TEMPLATE/feature_request.md +20 -0
@@ 1,20 @@
---
name: Feature Request
about: Suggest an idea for this project

---

# Feature Request

## I confirm:
- [ ] that I haven't found another request for this feature.
- [ ] that I have checked whether there are updates for my system available that
      contain this feature already.

## Description <!-- What do you want to be added? -->

## Justification [optional]

## Risks [optional]

## References [optional] <!-- Which issues are related? -->

A  => .gitignore +368 -0
@@ 1,368 @@
# Other ignores
.idea

# Godot-specific ignores
.import/
export.cfg
export_presets.cfg

# Imported translations (automatically generated from CSV files)
*.translation

# Mono-specific ignores
.mono/
data_*/

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Mono auto generated files
mono_crash.*

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Coverlet is a free, cross platform Code Coverage Tool
coverage*[.json, .xml, .info]

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb

# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/

A  => First 2D Game.csproj +70 -0
@@ 1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Tools</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}</ProjectGuid>
    <OutputType>Library</OutputType>
    <OutputPath>.mono/temp/bin/$(Configuration)</OutputPath>
    <RootNamespace>First2DGame</RootNamespace>
    <AssemblyName>First 2D Game</AssemblyName>
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <GodotProjectGeneratorVersion>1.0.7333.4679</GodotProjectGeneratorVersion>
    <BaseIntermediateOutputPath>.mono/temp/obj</BaseIntermediateOutputPath>
    <IntermediateOutputPath>$(BaseIntermediateOutputPath)/$(Configuration)</IntermediateOutputPath>
    <ApiConfiguration Condition=" '$(Configuration)' != 'Release' ">Debug</ApiConfiguration>
    <ApiConfiguration Condition=" '$(Configuration)' == 'Release' ">Release</ApiConfiguration>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>$(GodotDefineConstants);GODOT;DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>portable</DebugType>
    <Optimize>true</Optimize>
    <DefineConstants>$(GodotDefineConstants);GODOT;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Tools|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>$(GodotDefineConstants);GODOT;DEBUG;TOOLS;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="GodotSharp">
      <HintPath>$(ProjectDir)/.mono/assemblies/$(ApiConfiguration)/GodotSharp.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="GodotSharpEditor" Condition=" '$(Configuration)' == 'Tools' ">
      <HintPath>$(ProjectDir)/.mono/assemblies/$(ApiConfiguration)/GodotSharpEditor.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="System" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="src\Actors\Actor.cs" />
    <Compile Include="src\Actors\Enemy.cs" />
    <Compile Include="src\Actors\Player.cs" />
    <Compile Include="src\Autoload\PlayerData.cs" />
    <Compile Include="src\Objects\Coin.cs" />
    <Compile Include="src\Objects\Portal2D.cs" />
    <Compile Include="src\Screens\EndScreen.cs" />
    <Compile Include="src\UserInterface\ChangeSceneButton.cs" />
    <Compile Include="src\UserInterface\QuitButton.cs" />
    <Compile Include="src\UserInterface\RetryButton.cs" />
    <Compile Include="src\UserInterface\UserInterface.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file

A  => First 2D Game.sln +19 -0
@@ 1,19 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "First 2D Game", "First 2D Game.csproj", "{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
	Debug|Any CPU = Debug|Any CPU
	Release|Any CPU = Release|Any CPU
	Tools|Any CPU = Tools|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Release|Any CPU.Build.0 = Release|Any CPU
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Tools|Any CPU.ActiveCfg = Tools|Any CPU
		{C8DA4E15-20B3-47F6-8FA0-57FE9EDE4FCA}.Tools|Any CPU.Build.0 = Tools|Any CPU
	EndGlobalSection
EndGlobal

A  => Properties/AssemblyInfo.cs +25 -0
@@ 1,25 @@
using System.Reflection;

// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.

[assembly: AssemblyTitle("First 2D Game")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.

[assembly: AssemblyVersion("1.0.*")]

// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

A  => README.md +9 -0
@@ 1,9 @@
# GDQuest C#

[GDQuest](https://github.com/GDQuest) Tutorials in C#

----

[Godot Beginner 2D Platformer](https://github.com/GDQuest/godot-beginner-2d-platformer)

Learn to create a 2d platform game with the Godot game engine. This is a beginner programming tutorial. 

A  => assets/background.png +0 -0
A  => assets/background.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/background.png-1fdba8b6a966ce2c2ffc607f7c096e95.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/background.png"
dest_files=[ "res://.import/background.png-1fdba8b6a966ce2c2ffc607f7c096e95.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/bumper.png +0 -0
A  => assets/bumper.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/bumper.png-47785785aa6eb7e7a0af4baae66981c0.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/bumper.png"
dest_files=[ "res://.import/bumper.png-47785785aa6eb7e7a0af4baae66981c0.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/coin.png +0 -0
A  => assets/coin.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/coin.png-f04b9cd408b88aba3ab0966b4da32df0.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/coin.png"
dest_files=[ "res://.import/coin.png-f04b9cd408b88aba3ab0966b4da32df0.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/enemy.png +0 -0
A  => assets/enemy.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/enemy.png-63f114c7bb3f2105c232c34f647cbc2d.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/enemy.png"
dest_files=[ "res://.import/enemy.png-63f114c7bb3f2105c232c34f647cbc2d.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/font_default.tres +10 -0
@@ 1,10 @@
[gd_resource type="DynamicFont" load_steps=2 format=2]

[ext_resource path="res://assets/montserrat_extrabold.otf" type="DynamicFontData" id=1]


[resource]
size = 24
use_mipmaps = true
use_filter = true
font_data = ExtResource( 1 )

A  => assets/font_title.tres +9 -0
@@ 1,9 @@
[gd_resource type="DynamicFont" load_steps=2 format=2]

[ext_resource path="res://assets/montserrat_extrabold.otf" type="DynamicFontData" id=1]

[resource]
size = 46
use_mipmaps = true
use_filter = true
font_data = ExtResource( 1 )

A  => assets/icon.png +0 -0
A  => assets/icon.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/icon.png-b6a7fb2db36edd3d95dc42f1dc8c1c5d.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/icon.png"
dest_files=[ "res://.import/icon.png-b6a7fb2db36edd3d95dc42f1dc8c1c5d.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/light.png +0 -0
A  => assets/light.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/light.png-87539b10c4b4cebc046b6b91ffea6f69.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/light.png"
dest_files=[ "res://.import/light.png-87539b10c4b4cebc046b6b91ffea6f69.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/montserrat_extrabold.otf +0 -0
A  => assets/new_dynamicfont.tres +7 -0
@@ 1,7 @@
[gd_resource type="DynamicFont" load_steps=2 format=2]

[ext_resource path="res://assets/montserrat_extrabold.otf" type="DynamicFontData" id=1]

[resource]
size = 24
font_data = ExtResource( 1 )

A  => assets/player.png +0 -0
A  => assets/player.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/player.png-be2216fcaabb5c62aa2466cd9a5726a8.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/player.png"
dest_files=[ "res://.import/player.png-be2216fcaabb5c62aa2466cd9a5726a8.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/portal.png +0 -0
A  => assets/portal.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/portal.png-aead05909ff805293aa08d3705b32f3c.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/portal.png"
dest_files=[ "res://.import/portal.png-aead05909ff805293aa08d3705b32f3c.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/tileset.png +0 -0
A  => assets/tileset.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/tileset.png-c50288acd069fa293d7940a084811264.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/tileset.png"
dest_files=[ "res://.import/tileset.png-c50288acd069fa293d7940a084811264.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => assets/tileset.tres +43 -0
@@ 1,43 @@
[gd_resource type="TileSet" load_steps=4 format=2]

[ext_resource path="res://assets/tileset.png" type="Texture" id=1]

[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 )

[sub_resource type="ConvexPolygonShape2D" id=2]
points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 )

[resource]
0/name = "tileset.png 0"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 80, 80 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0
1/name = "tileset.png 1"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 80, 0, 80, 80 )
1/tile_mode = 0
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": true,
"one_way_margin": 1.0,
"shape": SubResource( 2 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
1/z_index = 0

A  => assets/ui_theme.tres +6 -0
@@ 1,6 @@
[gd_resource type="Theme" load_steps=2 format=2]

[ext_resource path="res://assets/new_dynamicfont.tres" type="DynamicFont" id=1]

[resource]
default_font = ExtResource( 1 )

A  => default_env.tres +7 -0
@@ 1,7 @@
[gd_resource type="Environment" load_steps=2 format=2]

[sub_resource type="ProceduralSky" id=1]

[resource]
background_mode = 2
background_sky = SubResource( 1 )

A  => icon.png +0 -0
A  => icon.png.import +34 -0
@@ 1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]

[params]

compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

A  => project.godot +75 -0
@@ 1,75 @@
; 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=4

_global_script_classes=[  ]
_global_script_class_icons={

}

[application]

config/name="First 2D Game"
run/main_scene="res://src/Screens/MainScreen.tscn"
config/icon="res://icon.png"

[autoload]

PlayerData="*res://src/Autoload/PlayerData.tscn"

[display]

window/size/width=1920
window/size/height=1080
window/size/fullscreen=true
window/size/test_width=1280
window/size/test_height=720
window/stretch/mode="2d"
window/stretch/aspect="expand"

[input]

move_left={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 ]
}
move_right={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 ]
}
jump={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
 ]
}
pause={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
 ]
}

[layer_names]

2d_physics/layer_1="player"
2d_physics/layer_2="enemies"
2d_physics/layer_3="coins"
2d_physics/layer_4="world"

[rendering]

environment/default_environment="res://default_env.tres"

A  => src/Actors/Actor.cs +17 -0
@@ 1,17 @@
using Godot;

namespace First2DGame.Actors
{
    public class Actor : KinematicBody2D
    {
        protected static Vector2 FloorNormal = Vector2.Up;
    
        [Export]
        protected Vector2 Speed = new Vector2((float) 300.00, (float) 1000.00);
    
        [Export]
        protected float Gravity = (float) 3000.00;

        protected Vector2 Velocity = Vector2.Zero;
    }
}

A  => src/Actors/Enemy.cs +47 -0
@@ 1,47 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.Actors
{
    public class Enemy: Actor
    {
        [Export]
        protected int Score = 100;
        
        public override void _Ready()
        {
            SetPhysicsProcess(false);
            Velocity.x = -Speed.x;
        }

        public override void _PhysicsProcess(float delta)
        {
            Velocity.y += Gravity * delta;
            
            if (IsOnWall())
            {
                Velocity.x *= (float) -1.00;
            }

            Velocity.y = MoveAndSlide(Velocity, FloorNormal).y;
        }
        
        private void OnStompDetectorBodyEntered(PhysicsBody2D body)
        {
            if (body.GlobalPosition.y > GetNode<Node2D>("StompDetector").GlobalPosition.y)
            {
                return;
            }

            GetNode<CollisionShape2D>("CollisionShape2D").Disabled = true;
            
            Die();
        }

        private void Die()
        {
            QueueFree();
            PlayerData.Instance.Score = Score;
        }
    }
}

A  => src/Actors/Enemy.tscn +40 -0
@@ 1,40 @@
[gd_scene load_steps=5 format=2]

[ext_resource path="res://assets/enemy.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Enemy.cs" type="Script" id=2]

[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 38.1602, 37.3963 )

[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 50, 9 )

[node name="Enemy" type="KinematicBody2D"]
collision_layer = 2
collision_mask = 9
script = ExtResource( 2 )
Gravity = 4000.0

[node name="enemy" type="Sprite" parent="."]
position = Vector2( 0, -48 )
texture = ExtResource( 1 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( -0.527039, -37.5202 )
shape = SubResource( 1 )

[node name="VisibilityEnabler2D" type="VisibilityEnabler2D" parent="."]
position = Vector2( 0, -27 )
scale = Vector2( 5.4, 2.6 )
process_parent = true
physics_process_parent = true

[node name="StompDetector" type="Area2D" parent="."]
modulate = Color( 0, 0.321569, 1, 1 )
position = Vector2( 0, -74 )
collision_layer = 2

[node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"]
position = Vector2( 0, -9 )
shape = SubResource( 2 )
[connection signal="body_entered" from="StompDetector" to="." method="OnStompDetectorBodyEntered"]

A  => src/Actors/Player.cs +79 -0
@@ 1,79 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.Actors
{
    public class Player : Actor
    {
        [Export] private float StompImpulse = (float) 1000.00;

        public void OnEnemyDetectorAreaEntered(Area2D area)
        {
            Velocity = CalculateStompVelocity(Velocity, StompImpulse);
        }
        
        public void OnEnemyDetectorBodyEntered(Node body)
        {
            Die();
        }
        
        public override void _PhysicsProcess(float delta)
        {
            var isJumpInterrupted = false;
        
            if (Velocity.y < 0.00) {
                isJumpInterrupted = Input.IsActionJustReleased("jump");
            }
        
            var direction = GetDirection();
            Velocity = CalculateMoveVelocity(Velocity, direction, Speed, isJumpInterrupted);
            Velocity = MoveAndSlide(Velocity, FloorNormal);
        }

        private Vector2 GetDirection()
        {
            return new Vector2(
                Input.GetActionStrength("move_right") - Input.GetActionStrength("move_left"),
                Input.IsActionJustPressed("jump") && IsOnFloor() ? (float) -1.00 : (float) 0.00
            );
        }

        private Vector2 CalculateMoveVelocity(
            Vector2 linearVelocity,
            Vector2 direction,
            Vector2 speed,
            bool isJumpInterrupted
        ) {
            // NOTE: Tutorial will replace newVelocity with out,
            // but out is a keyword in C#, so we cannot do this.
            var newVelocity = linearVelocity;
            newVelocity.x = speed.x * direction.x;
        
            newVelocity.y += Gravity * GetPhysicsProcessDeltaTime();
            if (direction.y == -1.00) {
                newVelocity.y = speed.y * direction.y;
            }
        
            if (isJumpInterrupted) {
                newVelocity.y = 0;
            }
        
            return newVelocity;
        }

        private Vector2 CalculateStompVelocity(Vector2 linearVelocity, float impulse)
        {
            var newVelocity = linearVelocity;

            newVelocity.y = -impulse;

            return newVelocity;
        }

        private void Die()
        {
            PlayerData.Instance.Deaths = 1;
            QueueFree();
        }
    }
}

A  => src/Actors/Player.tscn +48 -0
@@ 1,48 @@
[gd_scene load_steps=5 format=2]

[ext_resource path="res://assets/player.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Player.cs" type="Script" id=2]

[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 40, 42 )

[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 48, 44 )

[node name="Player" type="KinematicBody2D"]
collision_mask = 8
script = ExtResource( 2 )
Speed = Vector2( 800, 1400 )
Gravity = 4000.0

[node name="player" type="Sprite" parent="."]
position = Vector2( 0, -48 )
texture = ExtResource( 1 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( 0, -42 )
shape = SubResource( 1 )

[node name="Camera2D" type="Camera2D" parent="."]
current = true
limit_left = 0
limit_top = 0
limit_smoothed = true
drag_margin_h_enabled = true
drag_margin_v_enabled = true
smoothing_enabled = true
smoothing_speed = 7.0
drag_margin_left = 0.0
drag_margin_right = 0.0

[node name="EnemyDetector" type="Area2D" parent="."]
monitorable = false
collision_layer = 0
collision_mask = 2

[node name="CollisionShape2D" type="CollisionShape2D" parent="EnemyDetector"]
modulate = Color( 0, 0.25098, 0.996078, 1 )
position = Vector2( 0, -44 )
shape = SubResource( 2 )
[connection signal="area_entered" from="EnemyDetector" to="." method="OnEnemyDetectorAreaEntered"]
[connection signal="body_entered" from="EnemyDetector" to="." method="OnEnemyDetectorBodyEntered"]

A  => src/Autoload/PlayerData.cs +52 -0
@@ 1,52 @@
using System;
using Godot;

namespace First2DGame.Autoload
{
    public sealed class PlayerData : Node
    {
        [Signal]
        delegate void ScoreUpdated();
    
        [Signal]
        delegate void PlayerDied();
        
        private int _score;
        
        private int _deaths;
        
        private static readonly Lazy<PlayerData> Lazy = new Lazy<PlayerData>(() => new PlayerData());

        public static PlayerData Instance => Lazy.Value;

        private PlayerData()
        {
        }
        
        public void Reset()
        {
            _score = 0;
            _deaths = 0;
        }
        
        public int Score
        {
            get => _score;
            set
            {
                _score += value;
                EmitSignal("ScoreUpdated");
            }
        }
    
        public int Deaths
        {
            get => _deaths;
            set
            {
                _deaths += value;
                EmitSignal("PlayerDied");
            }
        }
    }
}

A  => src/Autoload/PlayerData.tscn +6 -0
@@ 1,6 @@
[gd_scene load_steps=2 format=2]

[ext_resource path="res://src/Autoload/PlayerData.cs" type="Script" id=1]

[node name="PlayerData" type="Node"]
script = ExtResource( 1 )

A  => src/Levels/Level01.tscn +129 -0
@@ 1,129 @@
[gd_scene load_steps=11 format=2]

[ext_resource path="res://assets/tileset.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Player.tscn" type="PackedScene" id=2]
[ext_resource path="res://src/Actors/Enemy.tscn" type="PackedScene" id=3]
[ext_resource path="res://assets/background.png" type="Texture" id=4]
[ext_resource path="res://src/Objects/Coin.tscn" type="PackedScene" id=5]
[ext_resource path="res://src/Objects/Portal2D.tscn" type="PackedScene" id=6]
[ext_resource path="res://src/Levels/Level02.tscn" type="PackedScene" id=7]
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=8]

[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 )

[sub_resource type="TileSet" id=2]
0/name = "tileset.png 0"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 80, 80 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0

[node name="Level01" type="Node2D"]
position = Vector2( 5, 0 )
__meta__ = {
"_edit_horizontal_guides_": [ 1770.0, 0.0 ],
"_edit_vertical_guides_": [ -3.0, 7800.0, 7800.0 ]
}

[node name="UserInterface" type="CanvasLayer" parent="."]
layer = 100

[node name="UserInterface" parent="UserInterface" instance=ExtResource( 8 )]

[node name="BackgroundLayer" type="CanvasLayer" parent="."]
layer = -1

[node name="background" type="TextureRect" parent="BackgroundLayer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = 1920.0
margin_bottom = 1080.0
texture = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="TileMap" type="TileMap" parent="."]
position = Vector2( 920, -394 )
tile_set = SubResource( 2 )
cell_size = Vector2( 80, 80 )
collision_layer = 8
collision_mask = 0
format = 1
tile_data = PoolIntArray( 393198, 0, 0, 393199, 0, 0, 393200, 0, 0, 393201, 0, 0, 393202, 0, 0, 393203, 0, 0, 393204, 0, 0, 393205, 0, 0, 393206, 0, 0, 327723, 0, 0, 327724, 0, 0, 327725, 0, 0, 327726, 0, 0, 327760, 0, 0, 327761, 0, 0, 327762, 0, 0, 327763, 0, 0, 327764, 0, 0, 327765, 0, 0, 458734, 0, 0, 458735, 0, 0, 458736, 0, 0, 458737, 0, 0, 458738, 0, 0, 458739, 0, 0, 458740, 0, 0, 458741, 0, 0, 458742, 0, 0, 393259, 0, 0, 393260, 0, 0, 393261, 0, 0, 393262, 0, 0, 393296, 0, 0, 393297, 0, 0, 393298, 0, 0, 393299, 0, 0, 393300, 0, 0, 393301, 0, 0, 524270, 0, 0, 524271, 0, 0, 524272, 0, 0, 524273, 0, 0, 524274, 0, 0, 524275, 0, 0, 524276, 0, 0, 524277, 0, 0, 524278, 0, 0, 458795, 0, 0, 458796, 0, 0, 458797, 0, 0, 458798, 0, 0, 458832, 0, 0, 458833, 0, 0, 458834, 0, 0, 458835, 0, 0, 458836, 0, 0, 458837, 0, 0, 589806, 0, 0, 589807, 0, 0, 589808, 0, 0, 589809, 0, 0, 589810, 0, 0, 589811, 0, 0, 589812, 0, 0, 589813, 0, 0, 589814, 0, 0, 524331, 0, 0, 524332, 0, 0, 524333, 0, 0, 524334, 0, 0, 524364, 0, 0, 524365, 0, 0, 524366, 0, 0, 524367, 0, 0, 524368, 0, 0, 524369, 0, 0, 524370, 0, 0, 524371, 0, 0, 524372, 0, 0, 524373, 0, 0, 655342, 0, 0, 655343, 0, 0, 655344, 0, 0, 655345, 0, 0, 655346, 0, 0, 655347, 0, 0, 655348, 0, 0, 655349, 0, 0, 655350, 0, 0, 589867, 0, 0, 589868, 0, 0, 589869, 0, 0, 589870, 0, 0, 589901, 0, 0, 589902, 0, 0, 589903, 0, 0, 589904, 0, 0, 589905, 0, 0, 589906, 0, 0, 589907, 0, 0, 589908, 0, 0, 589909, 0, 0, 720878, 0, 0, 720879, 0, 0, 720880, 0, 0, 720881, 0, 0, 720882, 0, 0, 720883, 0, 0, 720884, 0, 0, 720885, 0, 0, 720886, 0, 0, 655403, 0, 0, 655404, 0, 0, 655405, 0, 0, 655406, 0, 0, 655430, 0, 0, 655431, 0, 0, 655432, 0, 0, 655433, 0, 0, 655438, 0, 0, 655439, 0, 0, 655440, 0, 0, 655441, 0, 0, 655442, 0, 0, 655443, 0, 0, 655444, 0, 0, 655445, 0, 0, 786414, 0, 0, 786415, 0, 0, 786416, 0, 0, 786417, 0, 0, 786418, 0, 0, 786419, 0, 0, 786420, 0, 0, 786421, 0, 0, 786422, 0, 0, 720929, 0, 0, 720930, 0, 0, 720931, 0, 0, 720932, 0, 0, 720933, 0, 0, 720934, 0, 0, 720935, 0, 0, 720936, 0, 0, 720937, 0, 0, 720938, 0, 0, 720939, 0, 0, 720940, 0, 0, 720941, 0, 0, 720942, 0, 0, 720968, 0, 0, 720969, 0, 0, 720970, 0, 0, 720975, 0, 0, 720976, 0, 0, 720977, 0, 0, 720978, 0, 0, 720979, 0, 0, 720980, 0, 0, 720981, 0, 0, 851950, 0, 0, 851951, 0, 0, 851952, 0, 0, 851953, 0, 0, 851954, 0, 0, 851955, 0, 0, 851956, 0, 0, 851957, 0, 0, 851958, 0, 0, 786457, 0, 0, 786458, 0, 0, 786459, 0, 0, 786460, 0, 0, 786465, 0, 0, 786466, 0, 0, 786467, 0, 0, 786468, 0, 0, 786469, 0, 0, 786470, 0, 0, 786471, 0, 0, 786472, 0, 0, 786473, 0, 0, 786474, 0, 0, 786475, 0, 0, 786476, 0, 0, 786477, 0, 0, 786478, 0, 0, 786494, 0, 0, 786495, 0, 0, 786505, 0, 0, 786506, 0, 0, 786512, 0, 0, 786513, 0, 0, 786514, 0, 0, 786515, 0, 0, 786516, 0, 0, 786517, 0, 0, 917486, 0, 0, 917487, 0, 0, 917488, 0, 0, 917489, 0, 0, 917490, 0, 0, 917491, 0, 0, 917492, 0, 0, 917493, 0, 0, 917494, 0, 0, 851993, 0, 0, 851994, 0, 0, 851995, 0, 0, 851996, 0, 0, 852001, 0, 0, 852002, 0, 0, 852003, 0, 0, 852004, 0, 0, 852005, 0, 0, 852006, 0, 0, 852007, 0, 0, 852008, 0, 0, 852009, 0, 0, 852010, 0, 0, 852011, 0, 0, 852012, 0, 0, 852013, 0, 0, 852014, 0, 0, 852030, 0, 0, 852031, 0, 0, 852032, 0, 0, 852042, 0, 0, 852043, 0, 0, 852048, 0, 0, 852049, 0, 0, 852050, 0, 0, 852051, 0, 0, 852052, 0, 0, 852053, 0, 0, 983022, 0, 0, 983023, 0, 0, 983024, 0, 0, 983025, 0, 0, 983026, 0, 0, 983027, 0, 0, 983028, 0, 0, 983029, 0, 0, 983030, 0, 0, 917523, 0, 0, 917524, 0, 0, 917525, 0, 0, 917526, 0, 0, 917529, 0, 0, 917530, 0, 0, 917531, 0, 0, 917532, 0, 0, 917565, 0, 0, 917566, 0, 0, 917567, 0, 0, 917568, 0, 0, 917569, 0, 0, 917578, 0, 0, 917579, 0, 0, 917580, 0, 0, 917584, 0, 0, 917585, 0, 0, 917586, 0, 0, 917587, 0, 0, 917588, 0, 0, 917589, 0, 0, 1048558, 0, 0, 1048559, 0, 0, 1048560, 0, 0, 1048561, 0, 0, 1048562, 0, 0, 1048563, 0, 0, 1048564, 0, 0, 1048565, 0, 0, 1048566, 0, 0, 983065, 0, 0, 983066, 0, 0, 983067, 0, 0, 983068, 0, 0, 983101, 0, 0, 983102, 0, 0, 983103, 0, 0, 983104, 0, 0, 983105, 0, 0, 983120, 0, 0, 983121, 0, 0, 983122, 0, 0, 983123, 0, 0, 983124, 0, 0, 983125, 0, 0, 1114094, 0, 0, 1114095, 0, 0, 1114096, 0, 0, 1114097, 0, 0, 1114098, 0, 0, 1114099, 0, 0, 1114100, 0, 0, 1114101, 0, 0, 1114102, 0, 0, 1048601, 0, 0, 1048602, 0, 0, 1048603, 0, 0, 1048604, 0, 0, 1048634, 0, 0, 1048635, 0, 0, 1048636, 0, 0, 1048637, 0, 0, 1048638, 0, 0, 1048639, 0, 0, 1048640, 0, 0, 1048641, 0, 0, 1048642, 0, 0, 1048643, 0, 0, 1048644, 0, 0, 1048645, 0, 0, 1048655, 0, 0, 1048656, 0, 0, 1048657, 0, 0, 1048658, 0, 0, 1048659, 0, 0, 1048660, 0, 0, 1048661, 0, 0, 1179630, 0, 0, 1179631, 0, 0, 1179632, 0, 0, 1179633, 0, 0, 1179634, 0, 0, 1179635, 0, 0, 1179636, 0, 0, 1179637, 0, 0, 1179638, 0, 0, 1114112, 0, 0, 1114113, 0, 0, 1114114, 0, 0, 1114115, 0, 0, 1114128, 0, 0, 1114129, 0, 0, 1114130, 0, 0, 1114137, 0, 0, 1114138, 0, 0, 1114139, 0, 0, 1114140, 0, 0, 1114170, 0, 0, 1114171, 0, 0, 1114172, 0, 0, 1114173, 0, 0, 1114174, 0, 0, 1114175, 0, 0, 1114176, 0, 0, 1114177, 0, 0, 1114178, 0, 0, 1114179, 0, 0, 1114180, 0, 0, 1114181, 0, 0, 1114182, 0, 0, 1114192, 0, 0, 1114193, 0, 0, 1114194, 0, 0, 1114195, 0, 0, 1114196, 0, 0, 1114197, 0, 0, 1245166, 0, 0, 1245167, 0, 0, 1245168, 0, 0, 1245169, 0, 0, 1245170, 0, 0, 1245171, 0, 0, 1245172, 0, 0, 1245173, 0, 0, 1245174, 0, 0, 1245175, 0, 0, 1245176, 0, 0, 1245177, 0, 0, 1245178, 0, 0, 1245179, 0, 0, 1245180, 0, 0, 1245181, 0, 0, 1245182, 0, 0, 1245183, 0, 0, 1179648, 0, 0, 1179649, 0, 0, 1179650, 0, 0, 1179651, 0, 0, 1179652, 0, 0, 1179653, 0, 0, 1179654, 0, 0, 1179655, 0, 0, 1179656, 0, 0, 1179657, 0, 0, 1179658, 0, 0, 1179659, 0, 0, 1179660, 0, 0, 1179661, 0, 0, 1179662, 0, 0, 1179663, 0, 0, 1179664, 0, 0, 1179665, 0, 0, 1179666, 0, 0, 1179667, 0, 0, 1179668, 0, 0, 1179669, 0, 0, 1179670, 0, 0, 1179671, 0, 0, 1179672, 0, 0, 1179673, 0, 0, 1179674, 0, 0, 1179675, 0, 0, 1179676, 0, 0, 1179677, 0, 0, 1179678, 0, 0, 1179679, 0, 0, 1179680, 0, 0, 1179681, 0, 0, 1179682, 0, 0, 1179683, 0, 0, 1179684, 0, 0, 1179685, 0, 0, 1179686, 0, 0, 1179687, 0, 0, 1179688, 0, 0, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 0, 1179693, 0, 0, 1179694, 0, 0, 1179695, 0, 0, 1179696, 0, 0, 1179697, 0, 0, 1179698, 0, 0, 1179699, 0, 0, 1179700, 0, 0, 1179701, 0, 0, 1179702, 0, 0, 1179703, 0, 0, 1179704, 0, 0, 1179705, 0, 0, 1179706, 0, 0, 1179707, 0, 0, 1179708, 0, 0, 1179709, 0, 0, 1179710, 0, 0, 1179711, 0, 0, 1179712, 0, 0, 1179713, 0, 0, 1179714, 0, 0, 1179715, 0, 0, 1179716, 0, 0, 1179717, 0, 0, 1179718, 0, 0, 1179719, 0, 0, 1179720, 0, 0, 1179721, 0, 0, 1179722, 0, 0, 1179723, 0, 0, 1179724, 0, 0, 1179725, 0, 0, 1179726, 0, 0, 1179727, 0, 0, 1179728, 0, 0, 1179729, 0, 0, 1179730, 0, 0, 1179731, 0, 0, 1179732, 0, 0, 1179733, 0, 0, 1310702, 0, 0, 1310703, 0, 0, 1310704, 0, 0, 1310705, 0, 0, 1310706, 0, 0, 1310707, 0, 0, 1310708, 0, 0, 1310709, 0, 0, 1310710, 0, 0, 1310711, 0, 0, 1310712, 0, 0, 1310713, 0, 0, 1310714, 0, 0, 1310715, 0, 0, 1310716, 0, 0, 1310717, 0, 0, 1310718, 0, 0, 1310719, 0, 0, 1245184, 0, 0, 1245185, 0, 0, 1245186, 0, 0, 1245187, 0, 0, 1245188, 0, 0, 1245189, 0, 0, 1245190, 0, 0, 1245191, 0, 0, 1245192, 0, 0, 1245193, 0, 0, 1245194, 0, 0, 1245195, 0, 0, 1245196, 0, 0, 1245197, 0, 0, 1245198, 0, 0, 1245199, 0, 0, 1245200, 0, 0, 1245201, 0, 0, 1245202, 0, 0, 1245203, 0, 0, 1245204, 0, 0, 1245205, 0, 0, 1245206, 0, 0, 1245207, 0, 0, 1245208, 0, 0, 1245209, 0, 0, 1245210, 0, 0, 1245211, 0, 0, 1245212, 0, 0, 1245213, 0, 0, 1245214, 0, 0, 1245215, 0, 0, 1245216, 0, 0, 1245217, 0, 0, 1245218, 0, 0, 1245219, 0, 0, 1245220, 0, 0, 1245221, 0, 0, 1245222, 0, 0, 1245223, 0, 0, 1245224, 0, 0, 1245225, 0, 0, 1245226, 0, 0, 1245227, 0, 0, 1245228, 0, 0, 1245229, 0, 0, 1245230, 0, 0, 1245231, 0, 0, 1245232, 0, 0, 1245233, 0, 0, 1245234, 0, 0, 1245235, 0, 0, 1245236, 0, 0, 1245237, 0, 0, 1245238, 0, 0, 1245239, 0, 0, 1245240, 0, 0, 1245241, 0, 0, 1245242, 0, 0, 1245243, 0, 0, 1245244, 0, 0, 1245245, 0, 0, 1245246, 0, 0, 1245247, 0, 0, 1245248, 0, 0, 1245249, 0, 0, 1245250, 0, 0, 1245251, 0, 0, 1245252, 0, 0, 1245253, 0, 0, 1245254, 0, 0, 1245255, 0, 0, 1245256, 0, 0, 1245257, 0, 0, 1245258, 0, 0, 1245259, 0, 0, 1245260, 0, 0, 1245261, 0, 0, 1245262, 0, 0, 1245263, 0, 0, 1245264, 0, 0, 1245265, 0, 0, 1245266, 0, 0, 1245267, 0, 0, 1245268, 0, 0, 1245269, 0, 0, 1376238, 0, 0, 1376239, 0, 0, 1376240, 0, 0, 1376241, 0, 0, 1376242, 0, 0, 1376243, 0, 0, 1376244, 0, 0, 1376245, 0, 0, 1376246, 0, 0, 1376247, 0, 0, 1376248, 0, 0, 1376249, 0, 0, 1376250, 0, 0, 1376251, 0, 0, 1376252, 0, 0, 1376253, 0, 0, 1376254, 0, 0, 1376255, 0, 0, 1310720, 0, 0, 1310721, 0, 0, 1310722, 0, 0, 1310723, 0, 0, 1310724, 0, 0, 1310725, 0, 0, 1310726, 0, 0, 1310727, 0, 0, 1310728, 0, 0, 1310729, 0, 0, 1310730, 0, 0, 1310731, 0, 0, 1310732, 0, 0, 1310733, 0, 0, 1310734, 0, 0, 1310735, 0, 0, 1310736, 0, 0, 1310737, 0, 0, 1310738, 0, 0, 1310739, 0, 0, 1310740, 0, 0, 1310741, 0, 0, 1310742, 0, 0, 1310743, 0, 0, 1310744, 0, 0, 1310745, 0, 0, 1310746, 0, 0, 1310747, 0, 0, 1310748, 0, 0, 1310749, 0, 0, 1310750, 0, 0, 1310751, 0, 0, 1310752, 0, 0, 1310753, 0, 0, 1310754, 0, 0, 1310755, 0, 0, 1310756, 0, 0, 1310757, 0, 0, 1310758, 0, 0, 1310759, 0, 0, 1310760, 0, 0, 1310761, 0, 0, 1310762, 0, 0, 1310763, 0, 0, 1310764, 0, 0, 1310765, 0, 0, 1310766, 0, 0, 1310767, 0, 0, 1310768, 0, 0, 1310769, 0, 0, 1310770, 0, 0, 1310771, 0, 0, 1310772, 0, 0, 1310773, 0, 0, 1310774, 0, 0, 1310775, 0, 0, 1310776, 0, 0, 1310777, 0, 0, 1310778, 0, 0, 1310779, 0, 0, 1310780, 0, 0, 1310781, 0, 0, 1310782, 0, 0, 1310783, 0, 0, 1310784, 0, 0, 1310785, 0, 0, 1310786, 0, 0, 1310787, 0, 0, 1310788, 0, 0, 1310789, 0, 0, 1310790, 0, 0, 1310791, 0, 0, 1310792, 0, 0, 1310793, 0, 0, 1310794, 0, 0, 1310795, 0, 0, 1310796, 0, 0, 1310797, 0, 0, 1310798, 0, 0, 1310799, 0, 0, 1310800, 0, 0, 1310801, 0, 0, 1310802, 0, 0, 1310803, 0, 0, 1310804, 0, 0, 1310805, 0, 0, 1441774, 0, 0, 1441775, 0, 0, 1441776, 0, 0, 1441777, 0, 0, 1441778, 0, 0, 1441779, 0, 0, 1441780, 0, 0, 1441781, 0, 0, 1441782, 0, 0, 1441783, 0, 0, 1441784, 0, 0, 1441785, 0, 0, 1441786, 0, 0, 1441787, 0, 0, 1441788, 0, 0, 1441789, 0, 0, 1441790, 0, 0, 1441791, 0, 0, 1376256, 0, 0, 1376257, 0, 0, 1376258, 0, 0, 1376259, 0, 0, 1376260, 0, 0, 1376261, 0, 0, 1376262, 0, 0, 1376263, 0, 0, 1376264, 0, 0, 1376265, 0, 0, 1376266, 0, 0, 1376267, 0, 0, 1376268, 0, 0, 1376269, 0, 0, 1376270, 0, 0, 1376271, 0, 0, 1376272, 0, 0, 1376273, 0, 0, 1376274, 0, 0, 1376275, 0, 0, 1376276, 0, 0, 1376277, 0, 0, 1376278, 0, 0, 1376279, 0, 0, 1376280, 0, 0, 1376281, 0, 0, 1376282, 0, 0, 1376283, 0, 0, 1376284, 0, 0, 1376285, 0, 0, 1376286, 0, 0, 1376287, 0, 0, 1376288, 0, 0, 1376289, 0, 0, 1376290, 0, 0, 1376291, 0, 0, 1376292, 0, 0, 1376293, 0, 0, 1376294, 0, 0, 1376295, 0, 0, 1376296, 0, 0, 1376297, 0, 0, 1376298, 0, 0, 1376299, 0, 0, 1376300, 0, 0, 1376301, 0, 0, 1376302, 0, 0, 1376303, 0, 0, 1376304, 0, 0, 1376305, 0, 0, 1376306, 0, 0, 1376307, 0, 0, 1376308, 0, 0, 1376309, 0, 0, 1376310, 0, 0, 1376311, 0, 0, 1376312, 0, 0, 1376313, 0, 0, 1376314, 0, 0, 1376315, 0, 0, 1376316, 0, 0, 1376317, 0, 0, 1376318, 0, 0, 1376319, 0, 0, 1376320, 0, 0, 1376321, 0, 0, 1376322, 0, 0, 1376323, 0, 0, 1376324, 0, 0, 1376325, 0, 0, 1376326, 0, 0, 1376327, 0, 0, 1376328, 0, 0, 1376329, 0, 0, 1376330, 0, 0, 1376331, 0, 0, 1376332, 0, 0, 1376333, 0, 0, 1376334, 0, 0, 1376335, 0, 0, 1376336, 0, 0, 1376337, 0, 0, 1376338, 0, 0, 1376339, 0, 0, 1376340, 0, 0, 1376341, 0, 0, 1507310, 0, 0, 1507311, 0, 0, 1507312, 0, 0, 1507313, 0, 0, 1507314, 0, 0, 1507315, 0, 0, 1507316, 0, 0, 1507317, 0, 0, 1507318, 0, 0, 1507319, 0, 0, 1507320, 0, 0, 1507321, 0, 0, 1507322, 0, 0, 1507323, 0, 0, 1507324, 0, 0, 1507325, 0, 0, 1507326, 0, 0, 1507327, 0, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441836, 0, 0, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1441842, 0, 0, 1441843, 0, 0, 1441844, 0, 0, 1441845, 0, 0, 1441846, 0, 0, 1441847, 0, 0, 1441848, 0, 0, 1441849, 0, 0, 1441850, 0, 0, 1441851, 0, 0, 1441852, 0, 0, 1441853, 0, 0, 1441854, 0, 0, 1441855, 0, 0, 1441856, 0, 0, 1441857, 0, 0, 1441858, 0, 0, 1441859, 0, 0, 1441860, 0, 0, 1441861, 0, 0, 1441862, 0, 0, 1441863, 0, 0, 1441864, 0, 0, 1441865, 0, 0, 1441866, 0, 0, 1441867, 0, 0, 1441868, 0, 0, 1441869, 0, 0, 1441870, 0, 0, 1441871, 0, 0, 1441872, 0, 0, 1441873, 0, 0, 1441874, 0, 0, 1441875, 0, 0, 1441876, 0, 0, 1441877, 0, 0, 1572846, 0, 0, 1572847, 0, 0, 1572848, 0, 0, 1572849, 0, 0, 1572850, 0, 0, 1572851, 0, 0, 1572852, 0, 0, 1572853, 0, 0, 1572854, 0, 0, 1572855, 0, 0, 1572856, 0, 0, 1572857, 0, 0, 1572858, 0, 0, 1572859, 0, 0, 1572860, 0, 0, 1572861, 0, 0, 1572862, 0, 0, 1572863, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0, 1507360, 0, 0, 1507361, 0, 0, 1507362, 0, 0, 1507363, 0, 0, 1507364, 0, 0, 1507365, 0, 0, 1507366, 0, 0, 1507367, 0, 0, 1507368, 0, 0, 1507369, 0, 0, 1507370, 0, 0, 1507371, 0, 0, 1507372, 0, 0, 1507373, 0, 0, 1507374, 0, 0, 1507375, 0, 0, 1507376, 0, 0, 1507377, 0, 0, 1507378, 0, 0, 1507379, 0, 0, 1507380, 0, 0, 1507381, 0, 0, 1507382, 0, 0, 1507383, 0, 0, 1507384, 0, 0, 1507385, 0, 0, 1507386, 0, 0, 1507387, 0, 0, 1507388, 0, 0, 1507389, 0, 0, 1507390, 0, 0, 1507391, 0, 0, 1507392, 0, 0, 1507393, 0, 0, 1507394, 0, 0, 1507395, 0, 0, 1507396, 0, 0, 1507397, 0, 0, 1507398, 0, 0, 1507399, 0, 0, 1507400, 0, 0, 1507401, 0, 0, 1507402, 0, 0, 1507403, 0, 0, 1507404, 0, 0, 1507405, 0, 0, 1507406, 0, 0, 1507407, 0, 0, 1507408, 0, 0, 1507409, 0, 0, 1507410, 0, 0, 1507411, 0, 0, 1507412, 0, 0, 1507413, 0, 0, 1638382, 0, 0, 1638383, 0, 0, 1638384, 0, 0, 1638385, 0, 0, 1638386, 0, 0, 1638387, 0, 0, 1638388, 0, 0, 1638389, 0, 0, 1638390, 0, 0, 1638391, 0, 0, 1638392, 0, 0, 1638393, 0, 0, 1638394, 0, 0, 1638395, 0, 0, 1638396, 0, 0, 1638397, 0, 0, 1638398, 0, 0, 1638399, 0, 0, 1572864, 0, 0, 1572865, 0, 0, 1572866, 0, 0, 1572867, 0, 0, 1572868, 0, 0, 1572869, 0, 0, 1572870, 0, 0, 1572871, 0, 0, 1572872, 0, 0, 1572873, 0, 0, 1572874, 0, 0, 1572875, 0, 0, 1572876, 0, 0, 1572877, 0, 0, 1572878, 0, 0, 1572879, 0, 0, 1572880, 0, 0, 1572881, 0, 0, 1572882, 0, 0, 1572883, 0, 0, 1572884, 0, 0, 1572885, 0, 0, 1572886, 0, 0, 1572887, 0, 0, 1572888, 0, 0, 1572889, 0, 0, 1572890, 0, 0, 1572891, 0, 0, 1572892, 0, 0, 1572893, 0, 0, 1572894, 0, 0, 1572895, 0, 0, 1572896, 0, 0, 1572897, 0, 0, 1572898, 0, 0, 1572899, 0, 0, 1572900, 0, 0, 1572901, 0, 0, 1572902, 0, 0, 1572903, 0, 0, 1572904, 0, 0, 1572905, 0, 0, 1572906, 0, 0, 1572907, 0, 0, 1572908, 0, 0, 1572909, 0, 0, 1572910, 0, 0, 1572911, 0, 0, 1572912, 0, 0, 1572913, 0, 0, 1572914, 0, 0, 1572915, 0, 0, 1572916, 0, 0, 1572917, 0, 0, 1572918, 0, 0, 1572919, 0, 0, 1572920, 0, 0, 1572921, 0, 0, 1572922, 0, 0, 1572923, 0, 0, 1572924, 0, 0, 1572925, 0, 0, 1572926, 0, 0, 1572927, 0, 0, 1572928, 0, 0, 1572929, 0, 0, 1572930, 0, 0, 1572931, 0, 0, 1572932, 0, 0, 1572933, 0, 0, 1572934, 0, 0, 1572935, 0, 0, 1572936, 0, 0, 1572937, 0, 0, 1572938, 0, 0, 1572939, 0, 0, 1572940, 0, 0, 1572941, 0, 0, 1572942, 0, 0, 1572943, 0, 0, 1572944, 0, 0, 1572945, 0, 0, 1572946, 0, 0, 1572947, 0, 0, 1572948, 0, 0, 1572949, 0, 0, 1703918, 0, 0, 1703919, 0, 0, 1703920, 0, 0, 1703921, 0, 0, 1703922, 0, 0, 1703923, 0, 0, 1703924, 0, 0, 1703925, 0, 0, 1703926, 0, 0, 1703927, 0, 0, 1703928, 0, 0, 1703929, 0, 0, 1703930, 0, 0, 1703931, 0, 0, 1703932, 0, 0, 1703933, 0, 0, 1703934, 0, 0, 1703935, 0, 0, 1638400, 0, 0, 1638401, 0, 0, 1638402, 0, 0, 1638403, 0, 0, 1638404, 0, 0, 1638405, 0, 0, 1638406, 0, 0, 1638407, 0, 0, 1638408, 0, 0, 1638409, 0, 0, 1638410, 0, 0, 1638411, 0, 0, 1638412, 0, 0, 1638413, 0, 0, 1638414, 0, 0, 1638415, 0, 0, 1638416, 0, 0, 1638417, 0, 0, 1638418, 0, 0, 1638419, 0, 0, 1638420, 0, 0, 1638421, 0, 0, 1638422, 0, 0, 1638423, 0, 0, 1638424, 0, 0, 1638425, 0, 0, 1638426, 0, 0, 1638427, 0, 0, 1638428, 0, 0, 1638429, 0, 0, 1638430, 0, 0, 1638431, 0, 0, 1638432, 0, 0, 1638433, 0, 0, 1638434, 0, 0, 1638435, 0, 0, 1638436, 0, 0, 1638437, 0, 0, 1638438, 0, 0, 1638439, 0, 0, 1638440, 0, 0, 1638441, 0, 0, 1638442, 0, 0, 1638443, 0, 0, 1638444, 0, 0, 1638445, 0, 0, 1638446, 0, 0, 1638447, 0, 0, 1638448, 0, 0, 1638449, 0, 0, 1638450, 0, 0, 1638451, 0, 0, 1638452, 0, 0, 1638453, 0, 0, 1638454, 0, 0, 1638455, 0, 0, 1638456, 0, 0, 1638457, 0, 0, 1638458, 0, 0, 1638459, 0, 0, 1638460, 0, 0, 1638461, 0, 0, 1638462, 0, 0, 1638463, 0, 0, 1638464, 0, 0, 1638465, 0, 0, 1638466, 0, 0, 1638467, 0, 0, 1638468, 0, 0, 1638469, 0, 0, 1638470, 0, 0, 1638471, 0, 0, 1638472, 0, 0, 1638473, 0, 0, 1638474, 0, 0, 1638475, 0, 0, 1638476, 0, 0, 1638477, 0, 0, 1638478, 0, 0, 1638479, 0, 0, 1638480, 0, 0, 1638481, 0, 0, 1638482, 0, 0, 1638483, 0, 0, 1638484, 0, 0, 1638485, 0, 0, 1769454, 0, 0, 1769455, 0, 0, 1769456, 0, 0, 1769457, 0, 0, 1769458, 0, 0, 1769459, 0, 0, 1769460, 0, 0, 1769461, 0, 0, 1769462, 0, 0, 1769463, 0, 0, 1769464, 0, 0, 1769465, 0, 0, 1769466, 0, 0, 1769467, 0, 0, 1769468, 0, 0, 1769469, 0, 0, 1769470, 0, 0, 1769471, 0, 0, 1703936, 0, 0, 1703937, 0, 0, 1703938, 0, 0, 1703939, 0, 0, 1703940, 0, 0, 1703941, 0, 0, 1703942, 0, 0, 1703943, 0, 0, 1703944, 0, 0, 1703945, 0, 0, 1703946, 0, 0, 1703947, 0, 0, 1703948, 0, 0, 1703949, 0, 0, 1703950, 0, 0, 1703951, 0, 0, 1703952, 0, 0, 1703953, 0, 0, 1703954, 0, 0, 1703955, 0, 0, 1703956, 0, 0, 1703957, 0, 0, 1703958, 0, 0, 1703959, 0, 0, 1703960, 0, 0, 1703961, 0, 0, 1703962, 0, 0, 1703963, 0, 0, 1703964, 0, 0, 1703965, 0, 0, 1703966, 0, 0, 1703967, 0, 0, 1703968, 0, 0, 1703969, 0, 0, 1703970, 0, 0, 1703971, 0, 0, 1703972, 0, 0, 1703973, 0, 0, 1703974, 0, 0, 1703975, 0, 0, 1703976, 0, 0, 1703977, 0, 0, 1703978, 0, 0, 1703979, 0, 0, 1703980, 0, 0, 1703981, 0, 0, 1703982, 0, 0, 1703983, 0, 0, 1703984, 0, 0, 1703985, 0, 0, 1703986, 0, 0, 1703987, 0, 0, 1703988, 0, 0, 1703989, 0, 0, 1703990, 0, 0, 1703991, 0, 0, 1703992, 0, 0, 1703993, 0, 0, 1703994, 0, 0, 1703995, 0, 0, 1703996, 0, 0, 1703997, 0, 0, 1703998, 0, 0, 1703999, 0, 0, 1704000, 0, 0, 1704001, 0, 0, 1704002, 0, 0, 1704003, 0, 0, 1704004, 0, 0, 1704005, 0, 0, 1704006, 0, 0, 1704007, 0, 0, 1704008, 0, 0, 1704009, 0, 0, 1704010, 0, 0, 1704011, 0, 0, 1704012, 0, 0, 1704013, 0, 0, 1704014, 0, 0, 1704015, 0, 0, 1704016, 0, 0, 1704017, 0, 0, 1704018, 0, 0, 1704019, 0, 0, 1704020, 0, 0, 1704021, 0, 0 )

[node name="Player" parent="TileMap" instance=ExtResource( 2 )]
position = Vector2( -390, 1372 )
StompImpulse = 1600.0

[node name="Camera2D" parent="TileMap/Player" index="2"]
limit_right = 7800

[node name="Enemy" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 3370, 861 )

[node name="Enemy2" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 826, 1404 )

[node name="Enemy3" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 4561, 1405 )

[node name="Enemy4" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 6181, 1412 )

[node name="Coin" parent="." instance=ExtResource( 5 )]
position = Vector2( 1062, 765 )

[node name="Coin2" parent="." instance=ExtResource( 5 )]
position = Vector2( 2604, 624 )

[node name="Coin3" parent="." instance=ExtResource( 5 )]
position = Vector2( 4128, 888 )

[node name="Coin4" parent="." instance=ExtResource( 5 )]
position = Vector2( 4990, 888 )

[node name="Coin5" parent="." instance=ExtResource( 5 )]
position = Vector2( 4990, 755 )

[node name="Coin6" parent="." instance=ExtResource( 5 )]
position = Vector2( 4990, 625 )

[node name="Coin8" parent="." instance=ExtResource( 5 )]
position = Vector2( 5960, 453 )

[node name="Coin9" parent="." instance=ExtResource( 5 )]
position = Vector2( 6354, 762 )

[node name="Coin10" parent="." instance=ExtResource( 5 )]
position = Vector2( 6787, 759 )

[node name="Coin11" parent="." instance=ExtResource( 5 )]
position = Vector2( 7041, 674 )

[node name="Coin12" parent="." instance=ExtResource( 5 )]
position = Vector2( 7152, 124 )

[node name="Coin13" parent="." instance=ExtResource( 5 )]
position = Vector2( 7084, 166 )

[node name="Coin14" parent="." instance=ExtResource( 5 )]
position = Vector2( 7224, 166 )

[node name="Portal2D" parent="." instance=ExtResource( 6 )]
position = Vector2( 6679, 360 )
NextScene = ExtResource( 7 )

[editable path="TileMap/Player"]

A  => src/Levels/Level02.tscn +88 -0
@@ 1,88 @@
[gd_scene load_steps=12 format=2]

[ext_resource path="res://assets/tileset.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Player.tscn" type="PackedScene" id=2]
[ext_resource path="res://src/Actors/Enemy.tscn" type="PackedScene" id=3]
[ext_resource path="res://assets/background.png" type="Texture" id=4]
[ext_resource path="res://src/UserInterface/UserInterface.cs" type="Script" id=5]
[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=6]
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=7]
[ext_resource path="res://src/Screens/EndScreen.tscn" type="PackedScene" id=8]
[ext_resource path="res://src/Objects/Portal2D.tscn" type="PackedScene" id=9]

[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 )

[sub_resource type="TileSet" id=2]
0/name = "tileset.png 0"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 80, 80 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0

[node name="LevelTemplate" type="Node2D"]
__meta__ = {
"_edit_horizontal_guides_": [ 1770.0, 0.0 ],
"_edit_vertical_guides_": [ 4920.0, -3.0 ]
}

[node name="UserInterface" type="CanvasLayer" parent="."]
layer = 100

[node name="UserInterface" type="Control" parent="UserInterface" instance=ExtResource( 7 )]
pause_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 6 )
script = ExtResource( 5 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="CanvasLayer" type="CanvasLayer" parent="."]
layer = -1

[node name="background" type="TextureRect" parent="CanvasLayer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = 1920.0
margin_bottom = 1080.0
texture = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="TileMap" type="TileMap" parent="."]
position = Vector2( 920, -394 )
tile_set = SubResource( 2 )
cell_size = Vector2( 80, 80 )
collision_layer = 8
collision_mask = 0
format = 1
tile_data = PoolIntArray( 393204, 0, 0, 393205, 0, 0, 393206, 0, 0, 327699, 0, 0, 327700, 0, 0, 327701, 0, 0, 458740, 0, 0, 458741, 0, 0, 458742, 0, 0, 393235, 0, 0, 393236, 0, 0, 393237, 0, 0, 524276, 0, 0, 524277, 0, 0, 524278, 0, 0, 458771, 0, 0, 458772, 0, 0, 458773, 0, 0, 589812, 0, 0, 589813, 0, 0, 589814, 0, 0, 524307, 0, 0, 524308, 0, 0, 524309, 0, 0, 655348, 0, 0, 655349, 0, 0, 655350, 0, 0, 589843, 0, 0, 589844, 0, 0, 589845, 0, 0, 720884, 0, 0, 720885, 0, 0, 720886, 0, 0, 655379, 0, 0, 655380, 0, 0, 655381, 0, 0, 786420, 0, 0, 786421, 0, 0, 786422, 0, 0, 720915, 0, 0, 720916, 0, 0, 720917, 0, 0, 851956, 0, 0, 851957, 0, 0, 851958, 0, 0, 786451, 0, 0, 786452, 0, 0, 786453, 0, 0, 917492, 0, 0, 917493, 0, 0, 917494, 0, 0, 851987, 0, 0, 851988, 0, 0, 851989, 0, 0, 983028, 0, 0, 983029, 0, 0, 983030, 0, 0, 983031, 0, 0, 983032, 0, 0, 983033, 0, 0, 983034, 0, 0, 917523, 0, 0, 917524, 0, 0, 917525, 0, 0, 1048564, 0, 0, 1048565, 0, 0, 1048566, 0, 0, 1048567, 0, 0, 1048568, 0, 0, 1048569, 0, 0, 1048570, 0, 0, 1048571, 0, 0, 983054, 0, 0, 983059, 0, 0, 983060, 0, 0, 983061, 0, 0, 1114100, 0, 0, 1114101, 0, 0, 1114102, 0, 0, 1114103, 0, 0, 1114104, 0, 0, 1114105, 0, 0, 1114106, 0, 0, 1114107, 0, 0, 1048586, 0, 0, 1048587, 0, 0, 1048588, 0, 0, 1048589, 0, 0, 1048590, 0, 0, 1048591, 0, 0, 1048592, 0, 0, 1048595, 0, 0, 1048596, 0, 0, 1048597, 0, 0, 1179636, 0, 0, 1179637, 0, 0, 1179638, 0, 0, 1179639, 0, 0, 1179640, 0, 0, 1179641, 0, 0, 1179642, 0, 0, 1179643, 0, 0, 1114121, 0, 0, 1114122, 0, 0, 1114123, 0, 0, 1114124, 0, 0, 1114125, 0, 0, 1114126, 0, 0, 1114127, 0, 0, 1114128, 0, 0, 1114129, 0, 0, 1114131, 0, 0, 1114132, 0, 0, 1114133, 0, 0, 1245172, 0, 0, 1245173, 0, 0, 1245174, 0, 0, 1245175, 0, 0, 1245176, 0, 0, 1245177, 0, 0, 1245178, 0, 0, 1245179, 0, 0, 1245180, 0, 0, 1245181, 0, 0, 1245182, 0, 0, 1245183, 0, 0, 1179648, 0, 0, 1179649, 0, 0, 1179650, 0, 0, 1179651, 0, 0, 1179652, 0, 0, 1179653, 0, 0, 1179654, 0, 0, 1179655, 0, 0, 1179656, 0, 0, 1179657, 0, 0, 1179658, 0, 0, 1179659, 0, 0, 1179660, 0, 0, 1179661, 0, 0, 1179662, 0, 0, 1179663, 0, 0, 1179664, 0, 0, 1179665, 0, 0, 1179666, 0, 0, 1179667, 0, 0, 1179668, 0, 0, 1179669, 0, 0, 1310708, 0, 0, 1310709, 0, 0, 1310710, 0, 0, 1310711, 0, 0, 1310712, 0, 0, 1310713, 0, 0, 1310714, 0, 0, 1310715, 0, 0, 1310716, 0, 0, 1310717, 0, 0, 1310718, 0, 0, 1310719, 0, 0, 1245184, 0, 0, 1245185, 0, 0, 1245186, 0, 0, 1245187, 0, 0, 1245188, 0, 0, 1245189, 0, 0, 1245190, 0, 0, 1245191, 0, 0, 1245192, 0, 0, 1245193, 0, 0, 1245194, 0, 0, 1245195, 0, 0, 1245196, 0, 0, 1245197, 0, 0, 1245198, 0, 0, 1245199, 0, 0, 1245200, 0, 0, 1245201, 0, 0, 1245202, 0, 0, 1245203, 0, 0, 1245204, 0, 0, 1245205, 0, 0, 1376244, 0, 0, 1376245, 0, 0, 1376246, 0, 0, 1376247, 0, 0, 1376248, 0, 0, 1376249, 0, 0, 1376250, 0, 0, 1376251, 0, 0, 1376252, 0, 0, 1376253, 0, 0, 1376254, 0, 0, 1376255, 0, 0, 1310720, 0, 0, 1310721, 0, 0, 1310722, 0, 0, 1310723, 0, 0, 1310724, 0, 0, 1310725, 0, 0, 1310726, 0, 0, 1310727, 0, 0, 1310728, 0, 0, 1310729, 0, 0, 1310730, 0, 0, 1310731, 0, 0, 1310732, 0, 0, 1310733, 0, 0, 1310734, 0, 0, 1310735, 0, 0, 1310736, 0, 0, 1310737, 0, 0, 1310738, 0, 0, 1310739, 0, 0, 1310740, 0, 0, 1310741, 0, 0, 1441780, 0, 0, 1441781, 0, 0, 1441782, 0, 0, 1441783, 0, 0, 1441784, 0, 0, 1441785, 0, 0, 1441786, 0, 0, 1441787, 0, 0, 1441788, 0, 0, 1441789, 0, 0, 1441790, 0, 0, 1441791, 0, 0, 1376256, 0, 0, 1376257, 0, 0, 1376258, 0, 0, 1376259, 0, 0, 1376260, 0, 0, 1376261, 0, 0, 1376262, 0, 0, 1376263, 0, 0, 1376264, 0, 0, 1376265, 0, 0, 1376266, 0, 0, 1376267, 0, 0, 1376268, 0, 0, 1376269, 0, 0, 1376270, 0, 0, 1376271, 0, 0, 1376272, 0, 0, 1376273, 0, 0, 1376274, 0, 0, 1376275, 0, 0, 1376276, 0, 0, 1376277, 0, 0, 1507316, 0, 0, 1507317, 0, 0, 1507318, 0, 0, 1507319, 0, 0, 1507320, 0, 0, 1507321, 0, 0, 1507322, 0, 0, 1507323, 0, 0, 1507324, 0, 0, 1507325, 0, 0, 1507326, 0, 0, 1507327, 0, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1572852, 0, 0, 1572853, 0, 0, 1572854, 0, 0, 1572855, 0, 0, 1572856, 0, 0, 1572857, 0, 0, 1572858, 0, 0, 1572859, 0, 0, 1572860, 0, 0, 1572861, 0, 0, 1572862, 0, 0, 1572863, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1638388, 0, 0, 1638389, 0, 0, 1638390, 0, 0, 1638391, 0, 0, 1638392, 0, 0, 1638393, 0, 0, 1638394, 0, 0, 1638395, 0, 0, 1638396, 0, 0, 1638397, 0, 0, 1638398, 0, 0, 1638399, 0, 0, 1572864, 0, 0, 1572865, 0, 0, 1572866, 0, 0, 1572867, 0, 0, 1572868, 0, 0, 1572869, 0, 0, 1572870, 0, 0, 1572871, 0, 0, 1572872, 0, 0, 1572873, 0, 0, 1572874, 0, 0, 1572875, 0, 0, 1572876, 0, 0, 1572877, 0, 0, 1572878, 0, 0, 1572879, 0, 0, 1572880, 0, 0, 1572881, 0, 0, 1572882, 0, 0, 1572883, 0, 0, 1572884, 0, 0, 1572885, 0, 0, 1703924, 0, 0, 1703925, 0, 0, 1703926, 0, 0, 1703927, 0, 0, 1703928, 0, 0, 1703929, 0, 0, 1703930, 0, 0, 1703931, 0, 0, 1703932, 0, 0, 1703933, 0, 0, 1703934, 0, 0, 1703935, 0, 0, 1638400, 0, 0, 1638401, 0, 0, 1638402, 0, 0, 1638403, 0, 0, 1638404, 0, 0, 1638405, 0, 0, 1638406, 0, 0, 1638407, 0, 0, 1638408, 0, 0, 1638409, 0, 0, 1638410, 0, 0, 1638411, 0, 0, 1638412, 0, 0, 1638413, 0, 0, 1638414, 0, 0, 1638415, 0, 0, 1638416, 0, 0, 1638417, 0, 0, 1638418, 0, 0, 1638419, 0, 0, 1638420, 0, 0, 1638421, 0, 0, 1769460, 0, 0, 1769461, 0, 0, 1769462, 0, 0, 1769463, 0, 0, 1769464, 0, 0, 1769465, 0, 0, 1769466, 0, 0, 1769467, 0, 0, 1769468, 0, 0, 1769469, 0, 0, 1769470, 0, 0, 1769471, 0, 0, 1703936, 0, 0, 1703937, 0, 0, 1703938, 0, 0, 1703939, 0, 0, 1703940, 0, 0, 1703941, 0, 0, 1703942, 0, 0, 1703943, 0, 0, 1703944, 0, 0, 1703945, 0, 0, 1703946, 0, 0, 1703947, 0, 0, 1703948, 0, 0, 1703949, 0, 0, 1703950, 0, 0, 1703951, 0, 0, 1703952, 0, 0, 1703953, 0, 0, 1703954, 0, 0, 1703955, 0, 0, 1703956, 0, 0, 1703957, 0, 0 )

[node name="Player" parent="TileMap" instance=ExtResource( 2 )]
position = Vector2( -575, 788 )

[node name="Camera2D" parent="TileMap/Player" index="2"]
limit_right = 4920

[node name="Enemy3" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 567, 1406 )

[node name="Portal2D" parent="." instance=ExtResource( 9 )]
position = Vector2( 2072, 768 )
NextScene = ExtResource( 8 )

[editable path="TileMap/Player"]

A  => src/Levels/LevelTemplate.tscn +104 -0
@@ 1,104 @@
[gd_scene load_steps=13 format=2]

[ext_resource path="res://assets/tileset.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Player.tscn" type="PackedScene" id=2]
[ext_resource path="res://src/Actors/Enemy.tscn" type="PackedScene" id=3]
[ext_resource path="res://assets/background.png" type="Texture" id=4]
[ext_resource path="res://src/Objects/Coin.tscn" type="PackedScene" id=5]
[ext_resource path="res://src/Objects/Portal2D.tscn" type="PackedScene" id=6]
[ext_resource path="res://src/Levels/Level02.tscn" type="PackedScene" id=7]
[ext_resource path="res://src/UserInterface/UserInterface.cs" type="Script" id=8]
[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=9]
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=10]

[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 )

[sub_resource type="TileSet" id=2]
0/name = "tileset.png 0"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 80, 80 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0

[node name="LevelTemplate" type="Node2D"]
__meta__ = {
"_edit_horizontal_guides_": [ 1770.0, 0.0 ],
"_edit_vertical_guides_": [ 4920.0, -3.0 ]
}

[node name="UserInterface" type="CanvasLayer" parent="."]
layer = 100

[node name="UserInterface" type="Control" parent="UserInterface" instance=ExtResource( 10 )]
pause_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 9 )
script = ExtResource( 8 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="CanvasLayer" type="CanvasLayer" parent="."]
layer = -1

[node name="background" type="TextureRect" parent="CanvasLayer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = 1920.0
margin_bottom = 1080.0
texture = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="TileMap" type="TileMap" parent="."]
position = Vector2( 920, -394 )
tile_set = SubResource( 2 )
cell_size = Vector2( 80, 80 )
collision_layer = 8
collision_mask = 0
format = 1
tile_data = PoolIntArray( 393204, 0, 0, 393205, 0, 0, 393206, 0, 0, 327726, 0, 0, 327727, 0, 0, 327728, 0, 0, 327729, 0, 0, 458740, 0, 0, 458741, 0, 0, 458742, 0, 0, 393262, 0, 0, 393263, 0, 0, 393264, 0, 0, 393265, 0, 0, 524276, 0, 0, 524277, 0, 0, 524278, 0, 0, 458799, 0, 0, 458800, 0, 0, 458801, 0, 0, 589812, 0, 0, 589813, 0, 0, 589814, 0, 0, 524335, 0, 0, 524336, 0, 0, 524337, 0, 0, 655348, 0, 0, 655349, 0, 0, 655350, 0, 0, 589871, 0, 0, 589872, 0, 0, 589873, 0, 0, 720884, 0, 0, 720885, 0, 0, 720886, 0, 0, 655407, 0, 0, 655408, 0, 0, 655409, 0, 0, 786420, 0, 0, 786421, 0, 0, 786422, 0, 0, 720943, 0, 0, 720944, 0, 0, 720945, 0, 0, 851956, 0, 0, 851957, 0, 0, 851958, 0, 0, 786479, 0, 0, 786480, 0, 0, 786481, 0, 0, 917492, 0, 0, 917493, 0, 0, 917494, 0, 0, 852015, 0, 0, 852016, 0, 0, 852017, 0, 0, 983028, 0, 0, 983029, 0, 0, 983030, 0, 0, 983031, 0, 0, 983032, 0, 0, 983033, 0, 0, 983034, 0, 0, 917551, 0, 0, 917552, 0, 0, 917553, 0, 0, 1048564, 0, 0, 1048565, 0, 0, 1048566, 0, 0, 1048567, 0, 0, 1048568, 0, 0, 1048569, 0, 0, 1048570, 0, 0, 1048571, 0, 0, 983076, 0, 0, 983077, 0, 0, 983078, 0, 0, 983087, 0, 0, 983088, 0, 0, 983089, 0, 0, 1114100, 0, 0, 1114101, 0, 0, 1114102, 0, 0, 1114103, 0, 0, 1114104, 0, 0, 1114105, 0, 0, 1114106, 0, 0, 1114107, 0, 0, 1048589, 0, 0, 1048590, 0, 0, 1048608, 0, 0, 1048609, 0, 0, 1048610, 0, 0, 1048611, 0, 0, 1048612, 0, 0, 1048613, 0, 0, 1048614, 0, 0, 1048620, 0, 0, 1048623, 0, 0, 1048624, 0, 0, 1048625, 0, 0, 1179636, 0, 0, 1179637, 0, 0, 1179638, 0, 0, 1179639, 0, 0, 1179640, 0, 0, 1179641, 0, 0, 1179642, 0, 0, 1179643, 0, 0, 1114123, 0, 0, 1114124, 0, 0, 1114125, 0, 0, 1114126, 0, 0, 1114127, 0, 0, 1114132, 0, 0, 1114133, 0, 0, 1114134, 0, 0, 1114135, 0, 0, 1114136, 0, 0, 1114137, 0, 0, 1114138, 0, 0, 1114139, 0, 0, 1114140, 0, 0, 1114141, 0, 0, 1114142, 0, 0, 1114143, 0, 0, 1114144, 0, 0, 1114145, 0, 0, 1114146, 0, 0, 1114147, 0, 0, 1114148, 0, 0, 1114149, 0, 0, 1114150, 0, 0, 1114151, 0, 0, 1114152, 0, 0, 1114153, 0, 0, 1114154, 0, 0, 1114156, 0, 0, 1114157, 0, 0, 1114159, 0, 0, 1114160, 0, 0, 1114161, 0, 0, 1245172, 0, 0, 1245173, 0, 0, 1245174, 0, 0, 1245175, 0, 0, 1245176, 0, 0, 1245177, 0, 0, 1245178, 0, 0, 1245179, 0, 0, 1245180, 0, 0, 1245181, 0, 0, 1245182, 0, 0, 1245183, 0, 0, 1179648, 0, 0, 1179649, 0, 0, 1179650, 0, 0, 1179651, 0, 0, 1179652, 0, 0, 1179653, 0, 0, 1179654, 0, 0, 1179655, 0, 0, 1179656, 0, 0, 1179657, 0, 0, 1179658, 0, 0, 1179659, 0, 0, 1179660, 0, 0, 1179661, 0, 0, 1179662, 0, 0, 1179663, 0, 0, 1179664, 0, 0, 1179665, 0, 0, 1179666, 0, 0, 1179667, 0, 0, 1179668, 0, 0, 1179669, 0, 0, 1179670, 0, 0, 1179671, 0, 0, 1179672, 0, 0, 1179673, 0, 0, 1179674, 0, 0, 1179675, 0, 0, 1179676, 0, 0, 1179677, 0, 0, 1179678, 0, 0, 1179679, 0, 0, 1179680, 0, 0, 1179681, 0, 0, 1179682, 0, 0, 1179683, 0, 0, 1179684, 0, 0, 1179685, 0, 0, 1179686, 0, 0, 1179687, 0, 0, 1179688, 0, 0, 1179689, 0, 0, 1179690, 0, 0, 1179691, 0, 0, 1179692, 0, 0, 1179693, 0, 0, 1179694, 0, 0, 1179695, 0, 0, 1179696, 0, 0, 1179697, 0, 0, 1310708, 0, 0, 1310709, 0, 0, 1310710, 0, 0, 1310711, 0, 0, 1310712, 0, 0, 1310713, 0, 0, 1310714, 0, 0, 1310715, 0, 0, 1310716, 0, 0, 1310717, 0, 0, 1310718, 0, 0, 1310719, 0, 0, 1245184, 0, 0, 1245185, 0, 0, 1245186, 0, 0, 1245187, 0, 0, 1245188, 0, 0, 1245189, 0, 0, 1245190, 0, 0, 1245191, 0, 0, 1245192, 0, 0, 1245193, 0, 0, 1245194, 0, 0, 1245195, 0, 0, 1245196, 0, 0, 1245197, 0, 0, 1245198, 0, 0, 1245199, 0, 0, 1245200, 0, 0, 1245201, 0, 0, 1245202, 0, 0, 1245203, 0, 0, 1245204, 0, 0, 1245205, 0, 0, 1245206, 0, 0, 1245207, 0, 0, 1245208, 0, 0, 1245209, 0, 0, 1245210, 0, 0, 1245211, 0, 0, 1245212, 0, 0, 1245213, 0, 0, 1245214, 0, 0, 1245215, 0, 0, 1245216, 0, 0, 1245217, 0, 0, 1245218, 0, 0, 1245219, 0, 0, 1245220, 0, 0, 1245221, 0, 0, 1245222, 0, 0, 1245223, 0, 0, 1245224, 0, 0, 1245225, 0, 0, 1245226, 0, 0, 1245227, 0, 0, 1245228, 0, 0, 1245229, 0, 0, 1245230, 0, 0, 1245231, 0, 0, 1245232, 0, 0, 1245233, 0, 0, 1376244, 0, 0, 1376245, 0, 0, 1376246, 0, 0, 1376247, 0, 0, 1376248, 0, 0, 1376249, 0, 0, 1376250, 0, 0, 1376251, 0, 0, 1376252, 0, 0, 1376253, 0, 0, 1376254, 0, 0, 1376255, 0, 0, 1310720, 0, 0, 1310721, 0, 0, 1310722, 0, 0, 1310723, 0, 0, 1310724, 0, 0, 1310725, 0, 0, 1310726, 0, 0, 1310727, 0, 0, 1310728, 0, 0, 1310729, 0, 0, 1310730, 0, 0, 1310731, 0, 0, 1310732, 0, 0, 1310733, 0, 0, 1310734, 0, 0, 1310735, 0, 0, 1310736, 0, 0, 1310737, 0, 0, 1310738, 0, 0, 1310739, 0, 0, 1310740, 0, 0, 1310741, 0, 0, 1310742, 0, 0, 1310743, 0, 0, 1310744, 0, 0, 1310745, 0, 0, 1310746, 0, 0, 1310747, 0, 0, 1310748, 0, 0, 1310749, 0, 0, 1310750, 0, 0, 1310751, 0, 0, 1310752, 0, 0, 1310753, 0, 0, 1310754, 0, 0, 1310755, 0, 0, 1310756, 0, 0, 1310757, 0, 0, 1310758, 0, 0, 1310759, 0, 0, 1310760, 0, 0, 1310761, 0, 0, 1310762, 0, 0, 1310763, 0, 0, 1310764, 0, 0, 1310765, 0, 0, 1310766, 0, 0, 1310767, 0, 0, 1310768, 0, 0, 1310769, 0, 0, 1441780, 0, 0, 1441781, 0, 0, 1441782, 0, 0, 1441783, 0, 0, 1441784, 0, 0, 1441785, 0, 0, 1441786, 0, 0, 1441787, 0, 0, 1441788, 0, 0, 1441789, 0, 0, 1441790, 0, 0, 1441791, 0, 0, 1376256, 0, 0, 1376257, 0, 0, 1376258, 0, 0, 1376259, 0, 0, 1376260, 0, 0, 1376261, 0, 0, 1376262, 0, 0, 1376263, 0, 0, 1376264, 0, 0, 1376265, 0, 0, 1376266, 0, 0, 1376267, 0, 0, 1376268, 0, 0, 1376269, 0, 0, 1376270, 0, 0, 1376271, 0, 0, 1376272, 0, 0, 1376273, 0, 0, 1376274, 0, 0, 1376275, 0, 0, 1376276, 0, 0, 1376277, 0, 0, 1376278, 0, 0, 1376279, 0, 0, 1376280, 0, 0, 1376281, 0, 0, 1376282, 0, 0, 1376283, 0, 0, 1376284, 0, 0, 1376285, 0, 0, 1376286, 0, 0, 1376287, 0, 0, 1376288, 0, 0, 1376289, 0, 0, 1376290, 0, 0, 1376291, 0, 0, 1376292, 0, 0, 1376293, 0, 0, 1376294, 0, 0, 1376295, 0, 0, 1376296, 0, 0, 1376297, 0, 0, 1376298, 0, 0, 1376299, 0, 0, 1376300, 0, 0, 1376301, 0, 0, 1376302, 0, 0, 1376303, 0, 0, 1376304, 0, 0, 1376305, 0, 0, 1507316, 0, 0, 1507317, 0, 0, 1507318, 0, 0, 1507319, 0, 0, 1507320, 0, 0, 1507321, 0, 0, 1507322, 0, 0, 1507323, 0, 0, 1507324, 0, 0, 1507325, 0, 0, 1507326, 0, 0, 1507327, 0, 0, 1441792, 0, 0, 1441793, 0, 0, 1441794, 0, 0, 1441795, 0, 0, 1441796, 0, 0, 1441797, 0, 0, 1441798, 0, 0, 1441799, 0, 0, 1441800, 0, 0, 1441801, 0, 0, 1441802, 0, 0, 1441803, 0, 0, 1441804, 0, 0, 1441805, 0, 0, 1441806, 0, 0, 1441807, 0, 0, 1441808, 0, 0, 1441809, 0, 0, 1441810, 0, 0, 1441811, 0, 0, 1441812, 0, 0, 1441813, 0, 0, 1441814, 0, 0, 1441815, 0, 0, 1441816, 0, 0, 1441817, 0, 0, 1441818, 0, 0, 1441819, 0, 0, 1441820, 0, 0, 1441821, 0, 0, 1441822, 0, 0, 1441823, 0, 0, 1441824, 0, 0, 1441825, 0, 0, 1441826, 0, 0, 1441827, 0, 0, 1441828, 0, 0, 1441829, 0, 0, 1441830, 0, 0, 1441831, 0, 0, 1441832, 0, 0, 1441833, 0, 0, 1441834, 0, 0, 1441835, 0, 0, 1441836, 0, 0, 1441837, 0, 0, 1441838, 0, 0, 1441839, 0, 0, 1441840, 0, 0, 1441841, 0, 0, 1572852, 0, 0, 1572853, 0, 0, 1572854, 0, 0, 1572855, 0, 0, 1572856, 0, 0, 1572857, 0, 0, 1572858, 0, 0, 1572859, 0, 0, 1572860, 0, 0, 1572861, 0, 0, 1572862, 0, 0, 1572863, 0, 0, 1507328, 0, 0, 1507329, 0, 0, 1507330, 0, 0, 1507331, 0, 0, 1507332, 0, 0, 1507333, 0, 0, 1507334, 0, 0, 1507335, 0, 0, 1507336, 0, 0, 1507337, 0, 0, 1507338, 0, 0, 1507339, 0, 0, 1507340, 0, 0, 1507341, 0, 0, 1507342, 0, 0, 1507343, 0, 0, 1507344, 0, 0, 1507345, 0, 0, 1507346, 0, 0, 1507347, 0, 0, 1507348, 0, 0, 1507349, 0, 0, 1507350, 0, 0, 1507351, 0, 0, 1507352, 0, 0, 1507353, 0, 0, 1507354, 0, 0, 1507355, 0, 0, 1507356, 0, 0, 1507357, 0, 0, 1507358, 0, 0, 1507359, 0, 0, 1507360, 0, 0, 1507361, 0, 0, 1507362, 0, 0, 1507363, 0, 0, 1507364, 0, 0, 1507365, 0, 0, 1507366, 0, 0, 1507367, 0, 0, 1507368, 0, 0, 1507369, 0, 0, 1507370, 0, 0, 1507371, 0, 0, 1507372, 0, 0, 1507373, 0, 0, 1507374, 0, 0, 1507375, 0, 0, 1507376, 0, 0, 1507377, 0, 0, 1638388, 0, 0, 1638389, 0, 0, 1638390, 0, 0, 1638391, 0, 0, 1638392, 0, 0, 1638393, 0, 0, 1638394, 0, 0, 1638395, 0, 0, 1638396, 0, 0, 1638397, 0, 0, 1638398, 0, 0, 1638399, 0, 0, 1572864, 0, 0, 1572865, 0, 0, 1572866, 0, 0, 1572867, 0, 0, 1572868, 0, 0, 1572869, 0, 0, 1572870, 0, 0, 1572871, 0, 0, 1572872, 0, 0, 1572873, 0, 0, 1572874, 0, 0, 1572875, 0, 0, 1572876, 0, 0, 1572877, 0, 0, 1572878, 0, 0, 1572879, 0, 0, 1572880, 0, 0, 1572881, 0, 0, 1572882, 0, 0, 1572883, 0, 0, 1572884, 0, 0, 1572885, 0, 0, 1572886, 0, 0, 1572887, 0, 0, 1572888, 0, 0, 1572889, 0, 0, 1572890, 0, 0, 1572891, 0, 0, 1572892, 0, 0, 1572893, 0, 0, 1572894, 0, 0, 1572895, 0, 0, 1572896, 0, 0, 1572897, 0, 0, 1572898, 0, 0, 1572899, 0, 0, 1572900, 0, 0, 1572901, 0, 0, 1572902, 0, 0, 1572903, 0, 0, 1572904, 0, 0, 1572905, 0, 0, 1572906, 0, 0, 1572907, 0, 0, 1572908, 0, 0, 1572909, 0, 0, 1572910, 0, 0, 1572911, 0, 0, 1572912, 0, 0, 1572913, 0, 0, 1703924, 0, 0, 1703925, 0, 0, 1703926, 0, 0, 1703927, 0, 0, 1703928, 0, 0, 1703929, 0, 0, 1703930, 0, 0, 1703931, 0, 0, 1703932, 0, 0, 1703933, 0, 0, 1703934, 0, 0, 1703935, 0, 0, 1638400, 0, 0, 1638401, 0, 0, 1638402, 0, 0, 1638403, 0, 0, 1638404, 0, 0, 1638405, 0, 0, 1638406, 0, 0, 1638407, 0, 0, 1638408, 0, 0, 1638409, 0, 0, 1638410, 0, 0, 1638411, 0, 0, 1638412, 0, 0, 1638413, 0, 0, 1638414, 0, 0, 1638415, 0, 0, 1638416, 0, 0, 1638417, 0, 0, 1638418, 0, 0, 1638419, 0, 0, 1638420, 0, 0, 1638421, 0, 0, 1638422, 0, 0, 1638423, 0, 0, 1638424, 0, 0, 1638425, 0, 0, 1638426, 0, 0, 1638427, 0, 0, 1638428, 0, 0, 1638429, 0, 0, 1638430, 0, 0, 1638431, 0, 0, 1638432, 0, 0, 1638433, 0, 0, 1638434, 0, 0, 1638435, 0, 0, 1638436, 0, 0, 1638437, 0, 0, 1638438, 0, 0, 1638439, 0, 0, 1638440, 0, 0, 1638441, 0, 0, 1638442, 0, 0, 1638443, 0, 0, 1638444, 0, 0, 1638445, 0, 0, 1638446, 0, 0, 1638447, 0, 0, 1638448, 0, 0, 1638449, 0, 0, 1769460, 0, 0, 1769461, 0, 0, 1769462, 0, 0, 1769463, 0, 0, 1769464, 0, 0, 1769465, 0, 0, 1769466, 0, 0, 1769467, 0, 0, 1769468, 0, 0, 1769469, 0, 0, 1769470, 0, 0, 1769471, 0, 0, 1703936, 0, 0, 1703937, 0, 0, 1703938, 0, 0, 1703939, 0, 0, 1703940, 0, 0, 1703941, 0, 0, 1703942, 0, 0, 1703943, 0, 0, 1703944, 0, 0, 1703945, 0, 0, 1703946, 0, 0, 1703947, 0, 0, 1703948, 0, 0, 1703949, 0, 0, 1703950, 0, 0, 1703951, 0, 0, 1703952, 0, 0, 1703953, 0, 0, 1703954, 0, 0, 1703955, 0, 0, 1703956, 0, 0, 1703957, 0, 0, 1703958, 0, 0, 1703959, 0, 0, 1703960, 0, 0, 1703961, 0, 0, 1703962, 0, 0, 1703963, 0, 0, 1703964, 0, 0, 1703965, 0, 0, 1703966, 0, 0, 1703967, 0, 0, 1703968, 0, 0, 1703969, 0, 0, 1703970, 0, 0, 1703971, 0, 0, 1703972, 0, 0, 1703973, 0, 0, 1703974, 0, 0, 1703975, 0, 0, 1703976, 0, 0, 1703977, 0, 0, 1703978, 0, 0, 1703979, 0, 0, 1703980, 0, 0, 1703981, 0, 0, 1703982, 0, 0, 1703983, 0, 0, 1703984, 0, 0, 1703985, 0, 0 )

[node name="Player" parent="TileMap" instance=ExtResource( 2 )]
position = Vector2( -575, 788 )

[node name="Camera2D" parent="TileMap/Player" index="2"]
limit_right = 4920

[node name="Enemy" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 338, 1434 )

[node name="Enemy2" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 2016, 1329 )

[node name="Enemy3" parent="TileMap" instance=ExtResource( 3 )]
position = Vector2( 3004, 1178 )

[node name="Coin" parent="." instance=ExtResource( 5 )]
position = Vector2( 1729, 718 )

[node name="Coin2" parent="." instance=ExtResource( 5 )]
position = Vector2( 1973, 725 )

[node name="Coin3" parent="." instance=ExtResource( 5 )]
position = Vector2( 2102, 715 )

[node name="Portal2D" parent="." instance=ExtResource( 6 )]
position = Vector2( 851, 1045 )
NextScene = ExtResource( 7 )

[editable path="TileMap/Player"]

A  => src/Objects/Coin.cs +29 -0
@@ 1,29 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.Objects
{
    public class Coin : Area2D
    {
        [Export]
        protected int Score = 100;
        
        protected AnimationPlayer AnimPlayer;
        
        public override void _Ready()
        {
            AnimPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
        }
        
        private void OnBodyEntered(object body)
        {
            Picked();
        }

        private void Picked()
        {
            PlayerData.Instance.Score = Score;
            AnimPlayer.Play("fade_out");
        }
    }
}

A  => src/Objects/Coin.tscn +84 -0
@@ 1,84 @@
[gd_scene load_steps=6 format=2]

[ext_resource path="res://assets/coin.png" type="Texture" id=1]
[ext_resource path="res://src/Objects/Coin.cs" type="Script" id=2]

[sub_resource type="CircleShape2D" id=1]
radius = 34.0147

[sub_resource type="Animation" id=2]
resource_name = "bouncing"
length = 1.4
loop = true
tracks/0/type = "value"
tracks/0/path = NodePath("coin:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.7 ),
"transitions": PoolRealArray( 0.287175, 2.2974 ),
"update": 0,
"values": [ Vector2( 0, 10 ), Vector2( 0, -10 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("coin:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 1 ) ]
}

[sub_resource type="Animation" id=3]
resource_name = "fade_out"
length = 0.4
tracks/0/type = "value"
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.4 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
}
tracks/1/type = "method"
tracks/1/path = NodePath(".")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0.4 ),
"transitions": PoolRealArray( 1 ),
"values": [ {
"args": [  ],
"method": "queue_free"
} ]
}

[node name="Coin" type="Area2D"]
position = Vector2( 0, 10 )
collision_layer = 4
script = ExtResource( 2 )

[node name="coin" type="Sprite" parent="."]
position = Vector2( 0, 10 )
texture = ExtResource( 1 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource( 1 )

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "bouncing"
anims/bouncing = SubResource( 2 )
anims/fade_out = SubResource( 3 )
[connection signal="body_entered" from="." to="." method="OnBodyEntered"]

A  => src/Objects/Portal2D.cs +31 -0
@@ 1,31 @@
using Godot;

namespace First2DGame.Objects
{
    public class Portal2D : Area2D
    {
        [Export]
        private PackedScene NextScene = new PackedScene();
        
        protected AnimationPlayer AnimPlayer;
        
        private void OnBodyEntered(object body)
        {
            Teleport();
        }
        
        public override void _Ready()
        {
            AnimPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
        }

        private async void Teleport()
        {
            AnimPlayer.Play("fade_in");

            await ToSignal(AnimPlayer, "animation_finished");

            GetTree().ChangeSceneTo(NextScene);
        }
    }
}

A  => src/Objects/Portal2D.tscn +93 -0
@@ 1,93 @@
[gd_scene load_steps=6 format=2]

[ext_resource path="res://assets/portal.png" type="Texture" id=1]
[ext_resource path="res://src/Objects/Portal2D.cs" type="Script" id=2]

[sub_resource type="CapsuleShape2D" id=1]
radius = 70.0
height = 66.0

[sub_resource type="Animation" id=2]
resource_name = "fade_in"
tracks/0/type = "value"
tracks/0/path = NodePath("TransitionLayer/ColorRect:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 1 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Color( 0, 0, 0, 0 ), Color( 0, 0, 0, 1 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("TransitionLayer/ColorRect:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}

[sub_resource type="Animation" id=3]
resource_name = "start"
length = 0.001
tracks/0/type = "value"
tracks/0/path = NodePath("TransitionLayer/ColorRect:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 0, 0, 0, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("TransitionLayer/ColorRect:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ false ]
}

[node name="Portal2D" type="Area2D"]
monitorable = false
collision_layer = 0
script = ExtResource( 2 )

[node name="portal" type="Sprite" parent="."]
position = Vector2( 0, -128 )
texture = ExtResource( 1 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( 0, -128 )
shape = SubResource( 1 )

[node name="TransitionLayer" type="CanvasLayer" parent="."]
layer = 100

[node name="ColorRect" type="ColorRect" parent="TransitionLayer"]
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 0 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "start"
anims/fade_in = SubResource( 2 )
anims/start = SubResource( 3 )
[connection signal="body_entered" from="." to="." method="OnBodyEntered"]

A  => src/Screens/EndScreen.cs +17 -0
@@ 1,17 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.Screens
{
    public class EndScreen : Control
    {
        protected Label Label;

        public override void _Ready()
        {
            Label = GetNode<Label>("Label");

            Label.Text = $"Your final score is {PlayerData.Instance.Score}.\nYou died {PlayerData.Instance.Deaths} times.";
        }
    }   
}

A  => src/Screens/EndScreen.tscn +71 -0
@@ 1,71 @@
[gd_scene load_steps=7 format=2]

[ext_resource path="res://assets/background.png" type="Texture" id=1]
[ext_resource path="res://src/Screens/EndScreen.cs" type="Script" id=2]
[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=3]
[ext_resource path="res://src/UserInterface/Title.tscn" type="PackedScene" id=5]
[ext_resource path="res://src/UserInterface/ChangeSceneButton.tscn" type="PackedScene" id=6]
[ext_resource path="res://src/UserInterface/QuitButton.tscn" type="PackedScene" id=7]

[node name="EndScreen" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 3 )
script = ExtResource( 2 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="TextureRect" type="TextureRect" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 2.0
margin_right = 2.0
texture = ExtResource( 1 )
expand = true
stretch_mode = 2

[node name="Title" parent="." instance=ExtResource( 5 )]
anchor_top = 0.5
anchor_bottom = 0.5
margin_left = -494.0
margin_top = -197.0
margin_right = 494.0
margin_bottom = -140.0
text = "Congratulations, you finished the game!"

[node name="Label" type="Label" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -139.5
margin_top = -123.0
margin_right = 139.5
margin_bottom = -58.0
text = "Your final score is {}.
You died {} times."
align = 1
__meta__ = {
"_edit_use_anchors_": false
}

[node name="Menu" type="VBoxContainer" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -188.0
margin_top = -32.0
margin_right = 188.0
margin_bottom = 200.0
__meta__ = {
"_edit_use_anchors_": false
}

[node name="ChangeSceneButton" parent="Menu" instance=ExtResource( 6 )]
NextScenePath = "res://src/Levels/Level01.tscn"

[node name="QuitButton" parent="Menu" instance=ExtResource( 7 )]
margin_top = 118.0
margin_bottom = 232.0

A  => src/Screens/MainScreen.tscn +54 -0
@@ 1,54 @@
[gd_scene load_steps=6 format=2]

[ext_resource path="res://src/UserInterface/ChangeSceneButton.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/UserInterface/QuitButton.tscn" type="PackedScene" id=2]
[ext_resource path="res://assets/background.png" type="Texture" id=3]
[ext_resource path="res://src/UserInterface/Title.tscn" type="PackedScene" id=4]
[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=5]

[node name="MainScreen" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 5 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="TextureRect" type="TextureRect" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 2.0
margin_right = 2.0
texture = ExtResource( 3 )
expand = true
stretch_mode = 2
__meta__ = {
"_edit_use_anchors_": false
}

[node name="Title" parent="." instance=ExtResource( 4 )]
margin_left = -257.0
margin_top = 261.0
margin_right = 257.0
margin_bottom = 318.0
text = "My First Godot Game"

[node name="Menu" type="VBoxContainer" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -188.0
margin_top = -114.0
margin_right = 188.0
margin_bottom = 118.0
__meta__ = {
"_edit_use_anchors_": false
}

[node name="ChangeSceneButton" parent="Menu" instance=ExtResource( 1 )]
NextScenePath = "res://src/Levels/Level01.tscn"

[node name="QuitButton" parent="Menu" instance=ExtResource( 2 )]
margin_top = 118.0
margin_bottom = 232.0

A  => src/UserInterface/ChangeSceneButton.cs +21 -0
@@ 1,21 @@
using Godot;

namespace First2DGame.UserInterface
{
    [Tool]
    public class ChangeSceneButton : Button
    {
        [Export(PropertyHint.File)]
        protected string NextScenePath = "";
        
        private void onButtonUp()
        {
            GetTree().ChangeScene(NextScenePath);
        }

        public override string _GetConfigurationWarning()
        {
            return NextScenePath == "" ? "NextScenePath must be set for the button to work" : "";
        }
    }
}

A  => src/UserInterface/ChangeSceneButton.tscn +14 -0
@@ 1,14 @@
[gd_scene load_steps=2 format=2]

[ext_resource path="res://src/UserInterface/ChangeSceneButton.cs" type="Script" id=1]

[node name="ChangeSceneButton" type="Button"]
margin_right = 376.0
margin_bottom = 114.0
size_flags_vertical = 3
text = "Play"
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="button_up" from="." to="." method="onButtonUp"]

A  => src/UserInterface/QuitButton.cs +12 -0
@@ 1,12 @@
using Godot;

namespace First2DGame.UserInterface
{
    public class QuitButton : Button
    {
        private void onButtonUp()
        {
            GetTree().Quit();
        }
    }   
}

A  => src/UserInterface/QuitButton.tscn +14 -0
@@ 1,14 @@
[gd_scene load_steps=2 format=2]

[ext_resource path="res://src/UserInterface/QuitButton.cs" type="Script" id=1]

[node name="QuitButton" type="Button"]
margin_right = 376.0
margin_bottom = 114.0
size_flags_vertical = 3
text = "Quit"
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="button_up" from="." to="." method="onButtonUp"]

A  => src/UserInterface/RetryButton.cs +15 -0
@@ 1,15 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.UserInterface
{
    public class RetryButton : Button
    {
        private void onButtonUp()
        {
            PlayerData.Instance.Score = 0;
            GetTree().Paused = false;
            GetTree().ReloadCurrentScene();
        }
    }   
}

A  => src/UserInterface/RetryButton.tscn +14 -0
@@ 1,14 @@
[gd_scene load_steps=2 format=2]

[ext_resource path="res://src/UserInterface/RetryButton.cs" type="Script" id=1]

[node name="RetryButton" type="Button"]
margin_right = 376.0
margin_bottom = 114.0
size_flags_vertical = 3
text = "Retry"
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="button_up" from="." to="." method="onButtonUp"]

A  => src/UserInterface/Title.tscn +17 -0
@@ 1,17 @@
[gd_scene load_steps=2 format=2]

[ext_resource path="res://assets/font_title.tres" type="DynamicFont" id=1]

[node name="Title" type="Label"]
anchor_left = 0.5
anchor_right = 0.5
margin_left = -68.0
margin_top = 200.0
margin_right = 68.0
margin_bottom = 257.0
custom_fonts/font = ExtResource( 1 )
text = "Title"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}

A  => src/UserInterface/UserInterface.cs +55 -0
@@ 1,55 @@
using First2DGame.Autoload;
using Godot;

namespace First2DGame.UserInterface
{
    public class UserInterface : Control
    {
        protected SceneTree SceneTree;
        protected ColorRect PauseOverlay;
        protected Label Score;
        protected Label PauseTitle;

        private bool _paused;
        
        public override void _Ready()
        {
            SceneTree = GetTree();
            PauseOverlay = GetNode<ColorRect>("PauseOverlay");
            Score = GetNode<Label>("Label");
            PauseTitle = GetNode<Label>("PauseOverlay/Title");

            PlayerData.Instance.Connect("ScoreUpdated", this, "UpdateInterface");
            PlayerData.Instance.Connect("PlayerDied", this, "onPlayerDied");
            UpdateInterface();
        }

        private void onPlayerDied()
        {
            Paused = true;
            PauseTitle.Text = "You died";
        }

        public override void _UnhandledInput(InputEvent @event)
        {
            if (!@event.IsActionPressed("pause") || PauseTitle.Text == "You died") return;
            Paused = !_paused;
            SceneTree.SetInputAsHandled();
        }

        private void UpdateInterface()
        {
            Score.Text = $"Score: {PlayerData.Instance.Score}";
        }

        public bool Paused
        {
            set
            {
                _paused = value;
                SceneTree.Paused = value;
                PauseOverlay.Visible = value;
            }
        }
    }
}

A  => src/UserInterface/UserInterface.tscn +69 -0
@@ 1,69 @@
[gd_scene load_steps=7 format=2]

[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=1]
[ext_resource path="res://src/UserInterface/Title.tscn" type="PackedScene" id=2]
[ext_resource path="res://src/UserInterface/ChangeSceneButton.tscn" type="PackedScene" id=3]
[ext_resource path="res://src/UserInterface/QuitButton.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/UserInterface/RetryButton.tscn" type="PackedScene" id=5]
[ext_resource path="res://src/UserInterface/UserInterface.cs" type="Script" id=6]

[node name="UserInterface" type="Control"]
pause_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 1 )
script = ExtResource( 6 )
__meta__ = {
"_edit_use_anchors_": false
}

[node name="Label" type="Label" parent="."]
anchor_left = 1.0
anchor_right = 1.0
margin_left = -149.0
margin_top = 28.0
margin_right = -28.0
margin_bottom = 59.0
text = "Score: {} "
align = 2

[node name="PauseOverlay" type="ColorRect" parent="."]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 0.235294 )

[node name="Title" parent="PauseOverlay" instance=ExtResource( 2 )]
anchor_top = 0.5
anchor_bottom = 0.5
margin_left = -203.0
margin_top = -305.0
margin_right = 203.0
margin_bottom = -248.0
text = "Paused"

[node name="PauseMenu" type="VBoxContainer" parent="PauseOverlay"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -203.0
margin_top = -219.0
margin_right = 203.0
margin_bottom = 219.0

[node name="RetryButton" parent="PauseOverlay/PauseMenu" instance=ExtResource( 5 )]
margin_right = 406.0
margin_bottom = 143.0

[node name="ChangeSceneButton" parent="PauseOverlay/PauseMenu" instance=ExtResource( 3 )]
margin_top = 147.0
margin_right = 406.0
margin_bottom = 290.0
text = "Main Screen"
NextScenePath = "res://src/Screens/MainScreen.tscn"

[node name="QuitButton" parent="PauseOverlay/PauseMenu" instance=ExtResource( 4 )]
margin_top = 294.0
margin_right = 406.0
margin_bottom = 438.0