├── html_export
├── .gdignore
├── static
│ ├── fullscreen_on.png
│ ├── fullscreen_off.png
│ └── learn-gdscript.png
└── compile.md
├── course
├── glossary.csv.import
├── documentation.csv.import
├── unused-material
│ └── align-tracks copy
│ │ └── Track.gd
├── screenshot.png
├── common
│ ├── hand_ice.png
│ ├── hand_fire.png
│ ├── robot_body.png
│ ├── hand_ice_open.png
│ ├── hand_fire_open.png
│ ├── inventory
│ │ ├── gems.png
│ │ ├── shield.png
│ │ ├── sword.png
│ │ ├── pickup_fire.png
│ │ ├── pickup_ice.png
│ │ ├── healing_heart.png
│ │ ├── pickup_health.png
│ │ └── pickup_lightning.png
│ ├── robot_body_happy.png
│ ├── sparkle_sprite.png
│ ├── robot_body_right_1.png
│ └── robot_body_right_2.png
├── lesson-15-modulo
│ ├── visuals
│ │ ├── circle.png
│ │ ├── square.png
│ │ ├── square_large.png
│ │ ├── traffic_light.png
│ │ ├── Modulo
│ │ │ ├── normal_stylebox.tres
│ │ │ └── remainder_stylebox.tres
│ │ └── DiceShower.gd
│ ├── even_levels
│ │ └── EvenLevels.live-editor
│ │ │ └── scene
│ │ │ └── EvenLevels.tscn.tres
│ ├── rolling_dice
│ │ └── RollingDice.live-editor
│ │ │ └── scene
│ │ │ └── RollingDice.tscn.tres
│ └── traffic_lights
│ │ └── TrafficLights.live-editor
│ │ └── scene
│ │ └── TrafficLights.tscn.tres
├── lesson-16-2d-vectors
│ ├── visuals
│ │ └── triangle.png
│ ├── resetting_robot
│ │ └── RobotReset.live-editor
│ │ │ └── scene
│ │ │ └── RobotReset.tscn.tres
│ └── increase_scale
│ │ ├── IncreaseScale.live-editor
│ │ └── scene
│ │ │ └── IncreaseScale.tscn.tres
│ │ ├── IncreaseScale.tscn
│ │ └── IncreaseScale.gd
├── lesson-1-what-code-is-like
│ ├── first_practice
│ │ ├── TestsWhatCodeIsLike.gd
│ │ ├── WelcomeToTheApp.gd
│ │ ├── WelcomeToTheApp.tscn
│ │ └── WelcomeToTheApp.live-editor
│ │ │ └── scene
│ │ │ └── WelcomeToTheApp.tscn.tres
│ ├── sonic-colors-ultimate.jpg
│ ├── ImageSonic.tscn
│ └── ThreeCodeExamples.gd
├── lesson-8-defining-variables
│ ├── console-output.png
│ └── define-health-variable
│ │ ├── DefineHealthVar.gd
│ │ ├── DefineHealthVar.tscn
│ │ └── DefineHealthVar.live-editor
│ │ ├── scene
│ │ └── DefineHealthVar.tscn.tres
│ │ └── scripts
│ │ └── DefineHealthVar.gd.tres
├── lesson-19-creating-arrays
│ ├── visuals
│ │ ├── rocks_gems.png
│ │ └── rocks_shield.png
│ ├── moving-turtle
│ │ └── MovingTurtle.live-editor
│ │ │ └── scene
│ │ │ └── MovingTurtle.tscn.tres
│ └── selecting-units
│ │ ├── SelectingUnits.live-editor
│ │ └── scene
│ │ │ └── SelectingUnits.tscn.tres
│ │ └── TestSelectingUnits.gd
├── lesson-13-conditions
│ ├── visuals
│ │ └── godot_bottom_happy.png
│ ├── limiting_health
│ │ └── LimitingHealth.live-editor
│ │ │ └── scene
│ │ │ └── LimitingHealth.tscn.tres
│ ├── using_conditions
│ │ ├── UsingConditions.live-editor
│ │ │ ├── scene
│ │ │ │ └── UsingConditions.tscn.tres
│ │ │ └── scripts
│ │ │ │ └── WelcomeToTheApp.gd.tres
│ │ └── UsingConditions.gd
│ └── prevent_zero_health
│ │ └── PreventZeroHealth.live-editor
│ │ └── scene
│ │ └── PreventZeroHealth.tscn.tres
├── lesson-24-access-array-indices
│ ├── align-tracks
│ │ ├── tracks.png
│ │ └── AlignTracks.live-editor
│ │ │ └── scene
│ │ │ └── AlignTracks.tscn.tres
│ └── find-crystals
│ │ └── FindCrystals.live-editor
│ │ └── scene
│ │ └── FindCrystals.tscn.tres
├── lesson-27-value-types
│ ├── display-energy
│ │ ├── bar_bg_ninepatch.png
│ │ ├── lightning_bar_fill.png
│ │ ├── DisplayingEnergy.live-editor
│ │ │ └── scene
│ │ │ │ └── DisplayingEnergy.tscn.tres
│ │ ├── TestDisplayingEnergy.gd
│ │ └── DisplayingEnergy.gd
│ ├── player-input
│ │ ├── PlayerInput.live-editor
│ │ │ └── scene
│ │ │ │ └── PlayerInput.tscn.tres
│ │ └── PlayerInput.gd
│ └── visuals
│ │ ├── CodeHealthVar.tscn
│ │ └── CodeAddIntToString.tscn
├── glossary.tres
├── Documentation.tres
├── lesson-26-looping-over-dictionaries
│ ├── GameBoard.tscn
│ ├── Turtle.tscn
│ ├── place-units
│ │ └── PlaceUnits.live-editor
│ │ │ └── scene
│ │ │ └── PlaceUnits.tscn.tres
│ ├── display-inventory
│ │ └── DisplayInventory.live-editor
│ │ │ └── scene
│ │ │ └── DisplayInventory.tscn.tres
│ └── ExampleGameBoard.tscn
├── lesson-2-your-first-error
│ ├── first-error
│ │ ├── TestsFixError.gd
│ │ ├── ErrorScene.gd
│ │ └── ErrorScene.live-editor
│ │ │ └── scene
│ │ │ └── ErrorScene.tscn.tres
│ └── ErrorTranslatorExample.gd
├── lesson-22-functions-return-values
│ ├── visuals
│ │ └── grid_demo
│ │ │ ├── GridCell.gd
│ │ │ └── GridMapping.gd
│ └── convert-grid-coordinates
│ │ ├── ConvertGridCoordinates.tscn
│ │ └── ConvertGridCoordinates.live-editor
│ │ └── scene
│ │ └── ConvertGridCoordinates.tscn.tres
├── lesson-28-specifying-types
│ ├── fix-hints
│ │ ├── FixHints.tscn
│ │ ├── FixHints.gd
│ │ └── FixHints.live-editor
│ │ │ └── scene
│ │ │ └── FixHints.tscn.tres
│ ├── fix-values
│ │ ├── FixValues.tscn
│ │ ├── FixValues.gd
│ │ └── FixValues.live-editor
│ │ │ └── scene
│ │ │ └── FixValues.tscn.tres
│ └── CodeTryReplaceCellSize.tscn
├── lesson-3-standing-on-shoulders-of-giants
│ ├── make-visible
│ │ ├── TestsMakeCharacterVisible.gd
│ │ ├── MakeCharacterVisible.gd
│ │ └── MakeCharacterVisible.live-editor
│ │ │ └── scene
│ │ │ └── MakeCharacterVisible.tscn.tres
│ └── make-upright
│ │ ├── MakeRobotUpright.gd
│ │ ├── TestsMakeRobotUpright.gd
│ │ └── MakeRobotUpright.live-editor
│ │ └── scene
│ │ └── MakeRobotUpright.tscn.tres
├── lesson-4-drawing-a-rectangle
│ ├── turning_right
│ │ ├── TurningRight.tscn
│ │ ├── TurningRight.live-editor
│ │ │ └── scene
│ │ │ │ └── TurningRight.tscn.tres
│ │ └── TurningRight.gd
│ ├── drawing_rectangle
│ │ ├── DrawingRectangle.tscn
│ │ ├── DrawingRectangle.live-editor
│ │ │ └── scene
│ │ │ │ └── DrawingRectangle.tscn.tres
│ │ └── DrawingRectangle.gd
│ ├── visuals
│ │ ├── TurtleHello.tscn
│ │ └── DemoDrawingMoveForward.tscn
│ └── drawing_bigger_rectangle
│ │ ├── DrawingBiggerRectangle.tscn
│ │ ├── DrawingBiggerRectangle.live-editor
│ │ └── scene
│ │ │ └── DrawingBiggerRectangle.tscn.tres
│ │ └── DrawingBiggerRectangle.gd
├── lesson-20-looping-over-arrays
│ ├── drawing-in-loops
│ │ ├── DrawingInLoops.tscn
│ │ └── DrawingInLoops.live-editor
│ │ │ └── scene
│ │ │ └── DrawingInLoops.tscn.tres
│ └── robot-path
│ │ └── RobotPath.live-editor
│ │ └── scene
│ │ └── RobotPath.tscn.tres
├── lesson-5-your-first-function
│ ├── drawing_squares
│ │ ├── DrawingSquares.tscn
│ │ ├── DrawingSquares.live-editor
│ │ │ └── scene
│ │ │ │ └── DrawingSquares.tscn.tres
│ │ └── DrawingSquares.gd
│ ├── drawing_multiple_squares
│ │ ├── DrawingMultipleSquares.tscn
│ │ └── DrawingMultipleSquares.live-editor
│ │ │ └── scene
│ │ │ └── DrawingMultipleSquares.tscn.tres
│ ├── ExampleTurtleMoveAndRotate.tscn
│ └── ExampleFunctionBody.tscn
├── lesson-18-for-loops
│ ├── for_rectangles
│ │ ├── ForDrawingMultipleRectangles.tscn
│ │ └── ForDrawingMultipleRectangles.live-editor
│ │ │ └── scene
│ │ │ └── ForDrawingMultipleRectangles.tscn.tres
│ └── for_move
│ │ ├── PracticeBoardFor.live-editor
│ │ └── scene
│ │ │ └── PracticeBoardFor.tscn.tres
│ │ └── TestPracticeBoardFor.gd
├── lesson-6-multiple-function-parameters
│ ├── drawing_corners
│ │ ├── DrawingCorners.tscn
│ │ ├── DrawingLine.tscn.depren
│ │ ├── DrawingCorners.live-editor
│ │ │ └── scene
│ │ │ │ └── DrawingCorners.tscn.tres
│ │ └── DrawingCorners.gd
│ ├── drawing_squares
│ │ ├── DrawingSquares.tscn
│ │ └── DrawingSquares.live-editor
│ │ │ └── scene
│ │ │ └── DrawingSquares.tscn.tres
│ ├── drawing_corners_advanced
│ │ ├── DrawingLine.tscn.depren
│ │ ├── DrawingCornersAdvanced.tscn
│ │ └── DrawingCornersAdvanced.live-editor
│ │ │ └── scene
│ │ │ └── DrawingCornersAdvanced.tscn.tres
│ ├── drawing_rectangles
│ │ ├── DrawingRectangles.tscn
│ │ └── DrawingRectangles.live-editor
│ │ │ └── scene
│ │ │ └── DrawingRectangles.tscn.tres
│ └── visuals
│ │ ├── DrawAnySquare.gd
│ │ ├── DemoDrawingSquares.tscn
│ │ ├── DemoDrawingSquares.gd
│ │ ├── ExampleRotateFunction.tscn
│ │ ├── ExampleRotate.tscn
│ │ ├── ExampleDrawSquareDefinition1.tscn
│ │ └── ExampleDrawSquareDefinition2.tscn
├── lesson-11-time-delta
│ ├── visuals
│ │ ├── RunningRobot.tscn
│ │ ├── RunningRobot.gd
│ │ ├── RobotRace.gd
│ │ ├── DemoRobotRace.tscn
│ │ └── DemoRotatingSpriteFrame.gd
│ ├── rotating-using-delta
│ │ ├── RotatingSpriteDelta.gd
│ │ ├── RotatingSpriteDelta.live-editor
│ │ │ └── scene
│ │ │ │ └── RotatingSpriteDelta.tscn.tres
│ │ └── RotatingSpriteDelta.tscn
│ └── rotating-and-moving-delta
│ │ ├── RotatingMovingSpriteDelta.gd
│ │ ├── RotatingMovingSpriteDelta.live-editor
│ │ └── scene
│ │ │ └── RotatingMovingSpriteDelta.tscn.tres
│ │ └── RotatingMovingSpriteDelta.tscn
├── lesson-7-member-variables
│ ├── draw_rectangle_at_position
│ │ ├── DrawingRectangleAtPosition.tscn
│ │ └── DrawingRectangleAtPosition.live-editor
│ │ │ └── scene
│ │ │ └── DrawingRectangleAtPosition.tscn.tres
│ ├── draw_rectangles_at_positions
│ │ ├── DrawingMultipleRectangles.tscn
│ │ └── DrawingMultipleRectangles.live-editor
│ │ │ └── scene
│ │ │ └── DrawingMultipleRectangles.tscn.tres
│ └── ExampleHealthVariableDefinition.tscn
├── lesson-21-strings
│ ├── string_array
│ │ ├── StringArray.live-editor
│ │ │ └── scene
│ │ │ │ └── StringArray.tscn.tres
│ │ ├── StringArray.tscn
│ │ └── TestsStringArray.gd
│ └── string_error
│ │ ├── StringError.live-editor
│ │ └── scene
│ │ │ └── StringError.tscn.tres
│ │ └── StringError.gd
├── lesson-12-using-variables
│ ├── clarify
│ │ ├── ClarifyCode.live-editor
│ │ │ └── scene
│ │ │ │ └── ClarifyCode.tscn.tres
│ │ ├── ClarifyCode.gd
│ │ └── ClarifyCode.tscn
│ ├── fixing_error
│ │ ├── FixingError.live-editor
│ │ │ └── scene
│ │ │ │ └── FixingError.tscn.tres
│ │ ├── FixingError.tscn
│ │ └── FixingError.gd
│ └── visuals
│ │ └── ExampleUnclear.tscn
├── lesson-14-multiplying
│ ├── reducing_damage
│ │ └── ReducingDamage.live-editor
│ │ │ └── scene
│ │ │ └── ReducingDamage.tscn.tres
│ └── increase_max_health
│ │ ├── IncreaseMaxHealth.live-editor
│ │ └── scene
│ │ │ └── IncreaseMaxHealth.tscn.tres
│ │ └── IncreaseMaxHealth.gd
├── lesson-9-adding-and-subtracting
│ ├── healing
│ │ └── HealingRobot.live-editor
│ │ │ └── scene
│ │ │ └── HealingRobot.tscn.tres
│ └── taking-damage
│ │ └── DamagingRobot.live-editor
│ │ └── scene
│ │ └── DamagingRobot.tscn.tres
├── lesson-10-the-game-loop
│ ├── rotating-sprite
│ │ ├── RotatingSprite.live-editor
│ │ │ └── scene
│ │ │ │ └── RotatingSprite.tscn.tres
│ │ ├── RotatingSprite.gd
│ │ └── RotatingSprite.tscn
│ ├── rotating-and-moving
│ │ ├── RotateAndMoveSprite.live-editor
│ │ │ └── scene
│ │ │ │ └── RotateAndMoveSprite.tscn.tres
│ │ ├── RotateAndMoveSprite.tscn
│ │ └── RotateAndMoveSprite.gd
│ └── visuals
│ │ └── ExampleProcessFunction.tscn
├── lesson-17-while-loops
│ ├── while_move
│ │ ├── PracticeBoardWhile.live-editor
│ │ │ └── scene
│ │ │ │ └── PracticeBoardWhile.tscn.tres
│ │ └── TestPracticeBoardWhile.gd
│ └── visuals
│ │ └── Robot.gd
├── lesson-23-append-to-arrays
│ ├── clearing-meals
│ │ └── ClearingMeals.live-editor
│ │ │ └── scene
│ │ │ └── ClearingMeals.tscn.tres
│ ├── popping-crates
│ │ └── PoppingCrates.live-editor
│ │ │ └── scene
│ │ │ └── PoppingCrates.tscn.tres
│ └── visuals
│ │ ├── ExampleRestaurantOrders.tscn
│ │ └── CodeAddOrder.tscn
├── lesson-25-creating-dictionaries
│ ├── adding-items
│ │ └── AddingItems.live-editor
│ │ │ └── scene
│ │ │ └── AddingItems.tscn.tres
│ └── creating-inventory
│ │ └── CreatingInventory.live-editor
│ │ └── scene
│ │ └── CreatingInventory.tscn.tres
└── number_lessons.py
├── lsp
├── error_database.csv.import
└── GDQuestCodes.gd
├── icon.png
├── ui
├── theme
│ ├── empty.tres
│ ├── stylebox_empty.tres
│ ├── fonts
│ │ ├── Montserrat-Bold.ttf
│ │ ├── OpenSans-Bold.ttf
│ │ ├── OpenSans-Italic.ttf
│ │ ├── OpenSans-Regular.ttf
│ │ ├── OpenSans-SemiBold.ttf
│ │ ├── Montserrat-Regular.ttf
│ │ ├── OpenSans-BoldItalic.ttf
│ │ ├── SourceCodePro-Regular.otf
│ │ ├── font_code_small.tres
│ │ ├── font_button.tres
│ │ ├── font_text.tres
│ │ ├── font_text_bold.tres
│ │ ├── font_title.tres
│ │ ├── font_code.tres
│ │ ├── font_text_italics.tres
│ │ ├── font_title_big.tres
│ │ ├── font_version.tres
│ │ ├── font_well_done_bold.tres
│ │ ├── font_documentation_bold.tres
│ │ ├── font_main_menu_buttons.tres
│ │ ├── font_practice_progress.tres
│ │ ├── font_title_slim.tres
│ │ ├── font_well_done_normal.tres
│ │ ├── font_well_done_title.tres
│ │ ├── font_documentation_italics.tres
│ │ ├── font_documentation_normal.tres
│ │ ├── font_text_bold_italics.tres
│ │ ├── font_button_small.tres
│ │ ├── font_documentation_mono.tres
│ │ ├── font_title_small.tres
│ │ ├── font_lesson_heading.tres
│ │ ├── font_button_big_green.tres
│ │ └── font_percent.tres
│ ├── panel_breadcrumbs.tres
│ ├── hseparator_stylebox.tres
│ ├── hseparator_lesson_content.tres
│ ├── practice_info_separator.tres
│ ├── vseparator_stylebox.tres
│ ├── progress_bar_foreground.tres
│ ├── progress_bar_background.tres
│ ├── practice_list_button.tres
│ ├── button_main_menu_normal.tres
│ ├── popupmenu_item_hover.tres
│ ├── button_main_menu_focus.tres
│ ├── revealer_content_panel.tres
│ ├── revealer_hints_panel.tres
│ ├── hslider_grabber.tres
│ ├── hslider_grabber_highlight.tres
│ ├── panel_darker.tres
│ ├── vslider_grabber.tres
│ ├── vslider_grabber_highlight.tres
│ ├── panel_course_page.tres
│ ├── progress_simple_foreground.tres
│ ├── progress_simple_background.tres
│ ├── hscrollbar_grabber.tres
│ ├── vscrollbar_grabber.tres
│ ├── button_main_menu_hover.tres
│ ├── vscrollbar_large_grabber.tres
│ ├── hscrollbar_grabber_highlight.tres
│ ├── vscrollbar_grabber_highlight.tres
│ ├── hscrollbar_grabber_pressed.tres
│ ├── vscrollbar_grabber_pressed.tres
│ ├── vscrollbar_large_grabber_highlight.tres
│ ├── vscrollbar_large_grabber_pressed.tres
│ ├── codeeditor_locked_panel.tres
│ ├── revealer_notes_panel.tres
│ ├── popupmenu_panel.tres
│ ├── hscrollbar_scroll.tres
│ ├── revealer_title_panel.tres
│ ├── vscrollbar_scroll.tres
│ ├── panel_sliceeditor.tres
│ ├── vscrollbar_large_scroll.tres
│ ├── button_hover.tres
│ ├── hslider_slider.tres
│ ├── vslider_slider.tres
│ ├── button_disabled.tres
│ ├── button_normal.tres
│ ├── button_pressed.tres
│ ├── panel_normal.tres
│ ├── panel_error_log.tres
│ ├── outliner_background.tres
│ ├── quiz_outline_error.tres
│ ├── quiz_outline_passed.tres
│ ├── revealer_notes_title_expanded.tres
│ ├── text_stylebox_normal.tres
│ ├── text_stylebox_readonly.tres
│ ├── textedit_stylebox.tres
│ ├── outliner_details_background.tres
│ ├── outliner_item_hover.tres
│ ├── outliner_item_selected.tres
│ ├── panel_darker_with_shadow.tres
│ ├── quiz_outline_neutral.tres
│ ├── runnable_example_panel_outline.tres
│ ├── focus.tres
│ ├── button_outline_focus.tres
│ ├── pill.tres
│ ├── quiz_answer_hover.tres
│ ├── quiz_answer_normal.tres
│ ├── quiz_answer_pressed.tres
│ ├── panel_sliceeditor_title.tres
│ ├── revealer_notes_title.tres
│ ├── focus_accent.tres
│ ├── focus_strict.tres
│ ├── focus_outside_button.tres
│ ├── button_outline_large_accent.tres
│ ├── button_outline_large_strict.tres
│ ├── panel_tooltip.tres
│ ├── button_outline_large_hover.tres
│ ├── button_outline_large_normal.tres
│ ├── button_outline_large_pressed.tres
│ ├── button_outline_hover.tres
│ ├── button_outline_normal.tres
│ ├── button_outline_pressed.tres
│ └── button_outline_normal_muted.tres
├── icons
│ ├── expand.png
│ ├── chevron.png
│ ├── collapse.png
│ ├── icon_run.png
│ ├── arrow_left.png
│ ├── arrow_right.png
│ ├── icon_check.png
│ ├── icon_error.png
│ ├── icon_help.png
│ ├── icon_pause.png
│ ├── icon_report.png
│ ├── icon_save.png
│ ├── icon_space.png
│ ├── fullscreen_on.png
│ ├── icon_console.png
│ ├── icon_continue.png
│ ├── icon_gamepad.png
│ ├── icon_settings.png
│ ├── practice_list.png
│ ├── checkbox_checked.png
│ ├── checkbox_empty.png
│ ├── fullscreen_off.png
│ ├── loading_splash.png
│ ├── navigation_back.png
│ ├── icon_hslider_tick.png
│ ├── icon_slider_grabber.png
│ ├── navigation_outliner.png
│ ├── radiomark_small_empty.png
│ ├── checkbox_disabled_empty.png
│ ├── icon_slider_grabber_hl.png
│ ├── radiomark_small_checked.png
│ ├── checkbox_disabled_checked.png
│ ├── icon_option_button_arrow.png
│ ├── code_tab.svg
│ └── radiomark_empty.svg
├── screens
│ ├── lesson
│ │ └── quizzes
│ │ │ ├── QuizAnswerButtonGroup.tres
│ │ │ ├── UIQuizInputField.gd
│ │ │ └── UIQuizChoice.tscn
│ ├── welcome_screen
│ │ ├── title.png
│ │ ├── ui-screen.png
│ │ ├── background.png
│ │ ├── star_green.png
│ │ ├── star_white.png
│ │ ├── star_green_small.png
│ │ ├── star_white_small.png
│ │ ├── title_background.png
│ │ ├── FloatingStar.gd
│ │ ├── StarGreen.tscn
│ │ ├── StarWhite.tscn
│ │ └── test_quiz.tres
│ ├── practice
│ │ ├── gdquestboy_logo.png
│ │ ├── gdquestboy_frame.tres
│ │ ├── gdquestboy_frame_main_menu.tres
│ │ └── PracticeHint.gd
│ └── end_screen
│ │ └── main_menu
│ │ ├── logo.png
│ │ ├── sky_dark.png
│ │ ├── sky_day.png
│ │ ├── star_1.png
│ │ ├── star_2.png
│ │ ├── star_3.png
│ │ ├── star_4.png
│ │ ├── illustration.png
│ │ ├── sky_evening.png
│ │ ├── sky_day_blurred.png
│ │ ├── Sky.gd
│ │ ├── FloatingStar.tscn
│ │ └── FloatingStar.gd
└── components
│ ├── connectionIndicator_OFF.png
│ ├── connectionIndicator_ON.png
│ ├── robot_tutor_no_connection.png
│ ├── QuitButton.gd
│ ├── BreadCrumbs.tscn
│ ├── BigGreenButton.gd
│ ├── popups
│ ├── ExternalErrorPopup.gd
│ └── ReportFormPopup.gd
│ ├── GDQuestLogo.tscn
│ ├── QuitButton.tscn
│ ├── OutputConsolePrintMessage.gd
│ ├── ConnectionIndicator.tscn
│ └── FullScreenButton.tscn
├── game_demos
├── turtle.png
├── run_and_jump
│ ├── assets
│ │ ├── title.png
│ │ ├── background.png
│ │ ├── character0000.png
│ │ ├── character0001.png
│ │ ├── character0002.png
│ │ ├── obstacle-big0000.png
│ │ ├── obstacle-big0001.png
│ │ ├── obstacle-big0002.png
│ │ ├── obstacle-small0000.png
│ │ ├── obstacle-small0001.png
│ │ └── obstacle-small0002.png
│ ├── Obstacle.tscn
│ └── Game.live-editor
│ │ └── scene
│ │ └── Game.tscn.tres
├── font_turtle_label.tres
└── panel_turtle_label.tres
├── app-practice-screen.png
├── override.staging.cfg
├── addons
├── SmoothScroll
│ ├── icon.afdesign
│ ├── plugin.cfg
│ └── plugin.gd
├── ColorPickerPresets
│ ├── presets.hex
│ ├── .gitignore
│ ├── plugin.cfg
│ └── ColorPickerPresets.gd
├── gdscript-course-builder
│ ├── icons
│ │ └── insert-content-block.png
│ ├── plugin.cfg
│ ├── plugins
│ │ └── MainScreenPlugin.gd
│ └── ui
│ │ ├── SortableList.tscn
│ │ ├── QuizInputField.gd
│ │ └── SearchBar.tscn
└── gdscript-slice-exporter
│ ├── plugin.cfg
│ └── collections
│ └── SceneProperties.gd
├── default_env.tres
├── resources
├── Course.gd
├── CourseProgress.gd
├── ScriptSlice.gd
└── ContentBlock.gd
├── override.example.cfg
├── .github
└── ISSUE_TEMPLATE
│ ├── content-issue.md
│ └── feature_request.md
├── .vscode
├── settings.json
├── tasks.json
└── launch.json
├── .gitignore
└── utils
└── version.gd
/html_export/.gdignore:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/course/glossary.csv.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="keep"
4 |
--------------------------------------------------------------------------------
/course/documentation.csv.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="keep"
4 |
--------------------------------------------------------------------------------
/course/unused-material/align-tracks copy/Track.gd:
--------------------------------------------------------------------------------
1 | extends Sprite
2 |
--------------------------------------------------------------------------------
/lsp/error_database.csv.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="keep"
4 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/icon.png
--------------------------------------------------------------------------------
/ui/theme/empty.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxEmpty" format=2]
2 |
3 | [resource]
4 |
--------------------------------------------------------------------------------
/ui/icons/expand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/expand.png
--------------------------------------------------------------------------------
/ui/theme/stylebox_empty.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxEmpty" format=2]
2 |
3 | [resource]
4 |
--------------------------------------------------------------------------------
/course/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/screenshot.png
--------------------------------------------------------------------------------
/game_demos/turtle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/turtle.png
--------------------------------------------------------------------------------
/ui/icons/chevron.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/chevron.png
--------------------------------------------------------------------------------
/ui/icons/collapse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/collapse.png
--------------------------------------------------------------------------------
/ui/icons/icon_run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_run.png
--------------------------------------------------------------------------------
/app-practice-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/app-practice-screen.png
--------------------------------------------------------------------------------
/ui/icons/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/arrow_left.png
--------------------------------------------------------------------------------
/ui/icons/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/arrow_right.png
--------------------------------------------------------------------------------
/ui/icons/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_check.png
--------------------------------------------------------------------------------
/ui/icons/icon_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_error.png
--------------------------------------------------------------------------------
/ui/icons/icon_help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_help.png
--------------------------------------------------------------------------------
/ui/icons/icon_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_pause.png
--------------------------------------------------------------------------------
/ui/icons/icon_report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_report.png
--------------------------------------------------------------------------------
/ui/icons/icon_save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_save.png
--------------------------------------------------------------------------------
/ui/icons/icon_space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_space.png
--------------------------------------------------------------------------------
/course/common/hand_ice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/hand_ice.png
--------------------------------------------------------------------------------
/ui/icons/fullscreen_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/fullscreen_on.png
--------------------------------------------------------------------------------
/ui/icons/icon_console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_console.png
--------------------------------------------------------------------------------
/ui/icons/icon_continue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_continue.png
--------------------------------------------------------------------------------
/ui/icons/icon_gamepad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_gamepad.png
--------------------------------------------------------------------------------
/ui/icons/icon_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_settings.png
--------------------------------------------------------------------------------
/ui/icons/practice_list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/practice_list.png
--------------------------------------------------------------------------------
/course/common/hand_fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/hand_fire.png
--------------------------------------------------------------------------------
/course/common/robot_body.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/robot_body.png
--------------------------------------------------------------------------------
/override.staging.cfg:
--------------------------------------------------------------------------------
1 | [global]
2 |
3 | lsp_url="https://lsp.gdquest.com"
4 | lsp_url.release="https://lsp.gdquest.com"
--------------------------------------------------------------------------------
/ui/icons/checkbox_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/checkbox_checked.png
--------------------------------------------------------------------------------
/ui/icons/checkbox_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/checkbox_empty.png
--------------------------------------------------------------------------------
/ui/icons/fullscreen_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/fullscreen_off.png
--------------------------------------------------------------------------------
/ui/icons/loading_splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/loading_splash.png
--------------------------------------------------------------------------------
/ui/icons/navigation_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/navigation_back.png
--------------------------------------------------------------------------------
/ui/screens/lesson/quizzes/QuizAnswerButtonGroup.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="ButtonGroup" format=2]
2 |
3 | [resource]
4 |
--------------------------------------------------------------------------------
/course/common/hand_ice_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/hand_ice_open.png
--------------------------------------------------------------------------------
/ui/icons/icon_hslider_tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_hslider_tick.png
--------------------------------------------------------------------------------
/addons/SmoothScroll/icon.afdesign:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/addons/SmoothScroll/icon.afdesign
--------------------------------------------------------------------------------
/course/common/hand_fire_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/hand_fire_open.png
--------------------------------------------------------------------------------
/course/common/inventory/gems.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/gems.png
--------------------------------------------------------------------------------
/course/common/inventory/shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/shield.png
--------------------------------------------------------------------------------
/course/common/inventory/sword.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/sword.png
--------------------------------------------------------------------------------
/course/common/robot_body_happy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/robot_body_happy.png
--------------------------------------------------------------------------------
/course/common/sparkle_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/sparkle_sprite.png
--------------------------------------------------------------------------------
/ui/icons/icon_slider_grabber.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_slider_grabber.png
--------------------------------------------------------------------------------
/ui/icons/navigation_outliner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/navigation_outliner.png
--------------------------------------------------------------------------------
/ui/icons/radiomark_small_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/radiomark_small_empty.png
--------------------------------------------------------------------------------
/ui/theme/fonts/Montserrat-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/Montserrat-Bold.ttf
--------------------------------------------------------------------------------
/ui/theme/fonts/OpenSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/OpenSans-Bold.ttf
--------------------------------------------------------------------------------
/ui/theme/fonts/OpenSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/OpenSans-Italic.ttf
--------------------------------------------------------------------------------
/course/common/robot_body_right_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/robot_body_right_1.png
--------------------------------------------------------------------------------
/course/common/robot_body_right_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/robot_body_right_2.png
--------------------------------------------------------------------------------
/html_export/static/fullscreen_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/html_export/static/fullscreen_on.png
--------------------------------------------------------------------------------
/ui/icons/checkbox_disabled_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/checkbox_disabled_empty.png
--------------------------------------------------------------------------------
/ui/icons/icon_slider_grabber_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_slider_grabber_hl.png
--------------------------------------------------------------------------------
/ui/icons/radiomark_small_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/radiomark_small_checked.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/title.png
--------------------------------------------------------------------------------
/ui/theme/fonts/OpenSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/OpenSans-Regular.ttf
--------------------------------------------------------------------------------
/ui/theme/fonts/OpenSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/OpenSans-SemiBold.ttf
--------------------------------------------------------------------------------
/course/common/inventory/pickup_fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/pickup_fire.png
--------------------------------------------------------------------------------
/course/common/inventory/pickup_ice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/pickup_ice.png
--------------------------------------------------------------------------------
/html_export/static/fullscreen_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/html_export/static/fullscreen_off.png
--------------------------------------------------------------------------------
/html_export/static/learn-gdscript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/html_export/static/learn-gdscript.png
--------------------------------------------------------------------------------
/ui/icons/checkbox_disabled_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/checkbox_disabled_checked.png
--------------------------------------------------------------------------------
/ui/icons/icon_option_button_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/icons/icon_option_button_arrow.png
--------------------------------------------------------------------------------
/ui/screens/practice/gdquestboy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/practice/gdquestboy_logo.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/ui-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/ui-screen.png
--------------------------------------------------------------------------------
/ui/theme/fonts/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/ui/theme/fonts/OpenSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/OpenSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/course/common/inventory/healing_heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/healing_heart.png
--------------------------------------------------------------------------------
/course/common/inventory/pickup_health.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/pickup_health.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/title.png
--------------------------------------------------------------------------------
/ui/components/connectionIndicator_OFF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/components/connectionIndicator_OFF.png
--------------------------------------------------------------------------------
/ui/components/connectionIndicator_ON.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/components/connectionIndicator_ON.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/logo.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/background.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/star_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/star_green.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/star_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/star_white.png
--------------------------------------------------------------------------------
/ui/theme/fonts/SourceCodePro-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/theme/fonts/SourceCodePro-Regular.otf
--------------------------------------------------------------------------------
/course/common/inventory/pickup_lightning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/common/inventory/pickup_lightning.png
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-15-modulo/visuals/circle.png
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-15-modulo/visuals/square.png
--------------------------------------------------------------------------------
/ui/components/robot_tutor_no_connection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/components/robot_tutor_no_connection.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/sky_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/sky_dark.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/sky_day.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/sky_day.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/star_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/star_1.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/star_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/star_2.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/star_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/star_3.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/star_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/star_4.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/background.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/star_green_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/star_green_small.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/star_white_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/star_white_small.png
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/title_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/welcome_screen/title_background.png
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/square_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-15-modulo/visuals/square_large.png
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/traffic_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-15-modulo/visuals/traffic_light.png
--------------------------------------------------------------------------------
/course/lesson-16-2d-vectors/visuals/triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-16-2d-vectors/visuals/triangle.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/character0000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/character0000.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/character0001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/character0001.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/character0002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/character0002.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/illustration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/illustration.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/sky_evening.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/sky_evening.png
--------------------------------------------------------------------------------
/ui/theme/panel_breadcrumbs.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
5 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/first_practice/TestsWhatCodeIsLike.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 |
4 | func test_run_the_code() -> String:
5 | return ""
6 |
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-big0000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-big0000.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-big0001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-big0001.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-big0002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-big0002.png
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/sky_day_blurred.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/ui/screens/end_screen/main_menu/sky_day_blurred.png
--------------------------------------------------------------------------------
/addons/ColorPickerPresets/presets.hex:
--------------------------------------------------------------------------------
1 | 090a20
2 | 171830
3 | 303049
4 | 4a4b63
5 | 928fb8
6 | 3dff6e
7 | f5fafa
8 | fff540
9 | 26c6f7
10 | aa00ba
11 | ff1852
--------------------------------------------------------------------------------
/course/lesson-8-defining-variables/console-output.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-8-defining-variables/console-output.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-small0000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-small0000.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-small0001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-small0001.png
--------------------------------------------------------------------------------
/game_demos/run_and_jump/assets/obstacle-small0002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/game_demos/run_and_jump/assets/obstacle-small0002.png
--------------------------------------------------------------------------------
/course/lesson-19-creating-arrays/visuals/rocks_gems.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-19-creating-arrays/visuals/rocks_gems.png
--------------------------------------------------------------------------------
/ui/theme/hseparator_stylebox.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxLine" format=2]
2 |
3 | [resource]
4 | color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | thickness = 4
6 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/sonic-colors-ultimate.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-1-what-code-is-like/sonic-colors-ultimate.jpg
--------------------------------------------------------------------------------
/course/lesson-13-conditions/visuals/godot_bottom_happy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-13-conditions/visuals/godot_bottom_happy.png
--------------------------------------------------------------------------------
/course/lesson-19-creating-arrays/visuals/rocks_shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-19-creating-arrays/visuals/rocks_shield.png
--------------------------------------------------------------------------------
/ui/theme/hseparator_lesson_content.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxLine" format=2]
2 |
3 | [resource]
4 | color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | thickness = 6
6 |
--------------------------------------------------------------------------------
/ui/theme/practice_info_separator.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxLine" format=2]
2 |
3 | [resource]
4 | color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | thickness = 4
6 |
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/icons/insert-content-block.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/addons/gdscript-course-builder/icons/insert-content-block.png
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/plugin.cfg:
--------------------------------------------------------------------------------
1 | [plugin]
2 |
3 | name="Course Builder for Live Editor"
4 | description=""
5 | author="GDQuest"
6 | version="1.0"
7 | script="plugin.gd"
8 |
--------------------------------------------------------------------------------
/course/lesson-24-access-array-indices/align-tracks/tracks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-24-access-array-indices/align-tracks/tracks.png
--------------------------------------------------------------------------------
/addons/ColorPickerPresets/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Godot-specific ignores
3 | .import/
4 | export.cfg
5 | export_presets.cfg
6 |
7 | # Mono-specific ignores
8 | .mono/
9 | data_*/
10 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/display-energy/bar_bg_ninepatch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-27-value-types/display-energy/bar_bg_ninepatch.png
--------------------------------------------------------------------------------
/course/lesson-27-value-types/display-energy/lightning_bar_fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitbutter/learn-gdscript/main/course/lesson-27-value-types/display-energy/lightning_bar_fill.png
--------------------------------------------------------------------------------
/ui/components/QuitButton.gd:
--------------------------------------------------------------------------------
1 | extends Button
2 |
3 |
4 | func _ready() -> void:
5 | connect("pressed", get_tree(), "quit")
6 |
7 | if OS.has_feature("JavaScript"):
8 | queue_free()
9 |
--------------------------------------------------------------------------------
/ui/theme/vseparator_stylebox.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxLine" format=2]
2 |
3 | [resource]
4 | color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | thickness = 4
6 | vertical = true
7 |
--------------------------------------------------------------------------------
/course/glossary.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://resources/Glossary.gd" type="Script" id=1]
4 |
5 | [resource]
6 | script = ExtResource( 1 )
7 |
--------------------------------------------------------------------------------
/default_env.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Environment" load_steps=2 format=2]
2 |
3 | [sub_resource type="ProceduralSky" id=1]
4 |
5 | [resource]
6 | background_mode = 2
7 | background_sky = SubResource( 1 )
8 |
--------------------------------------------------------------------------------
/ui/theme/progress_bar_foreground.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 |
--------------------------------------------------------------------------------
/ui/theme/progress_bar_background.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 |
--------------------------------------------------------------------------------
/ui/theme/practice_list_button.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxEmpty" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 6.0
7 | content_margin_bottom = 6.0
8 |
--------------------------------------------------------------------------------
/lsp/GDQuestCodes.gd:
--------------------------------------------------------------------------------
1 | class_name GDQuestCodes
2 |
3 |
4 | enum ErrorCode{
5 | CANNOT_CONNECT_TO_LSP = 20000,
6 | CANNOT_INITIATE_CONNECTION,
7 | LSP_UNDETECTED_ERROR,
8 | LSP_TIMED_OUT,
9 | RECURSIVE_FUNCTION,
10 | LSP_NO_URL
11 | }
12 |
--------------------------------------------------------------------------------
/ui/theme/button_main_menu_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | draw_center = false
9 |
--------------------------------------------------------------------------------
/addons/SmoothScroll/plugin.cfg:
--------------------------------------------------------------------------------
1 | [plugin]
2 |
3 | name="SmoothScroll"
4 | description="""This plugin adds a new scroll container class
5 | with additional smooth scroll options."""
6 | author="Fabian Keßler (SpyrexDE)"
7 | version="1.0"
8 | script="plugin.gd"
--------------------------------------------------------------------------------
/course/Documentation.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://resources/Documentation.gd" type="Script" id=1]
4 |
5 | [resource]
6 | script = ExtResource( 1 )
7 | documentation_file = "res://course/documentation.csv"
8 |
--------------------------------------------------------------------------------
/game_demos/font_turtle_label.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [sub_resource type="DynamicFontData" id=1]
4 | font_path = "res://ui/theme/fonts/Montserrat-Bold.ttf"
5 |
6 | [resource]
7 | size = 18
8 | font_data = SubResource( 1 )
9 |
--------------------------------------------------------------------------------
/resources/Course.gd:
--------------------------------------------------------------------------------
1 | # Contains a series of lessons to tackle sequentially.
2 | class_name Course
3 | extends Resource
4 |
5 | export var title := ""
6 | # Array[Lesson]
7 | export var lessons: Array
8 |
9 |
10 | func _init() -> void:
11 | lessons = []
12 |
--------------------------------------------------------------------------------
/ui/theme/popupmenu_item_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
5 | expand_margin_left = 4.0
6 | expand_margin_right = 4.0
7 | expand_margin_top = 1.0
8 | expand_margin_bottom = 1.0
9 |
--------------------------------------------------------------------------------
/course/lesson-26-looping-over-dictionaries/GameBoard.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-26-looping-over-dictionaries/GameBoard.gd" type="Script" id=1]
4 |
5 | [node name="GameBoard" type="Node2D"]
6 | script = ExtResource( 1 )
7 |
--------------------------------------------------------------------------------
/override.example.cfg:
--------------------------------------------------------------------------------
1 | # Use this template to override project settings
2 | # MAKE SURE TO REMOVE ALL COMMENTS, Godot does not support comments in
3 | # override.cfg files
4 | [global]
5 |
6 | lsp_url="http://localhost:3000/api/v1"
7 | lsp_url.release="https://lsp.gdquest.com/api/v1"
--------------------------------------------------------------------------------
/ui/theme/button_main_menu_focus.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 |
--------------------------------------------------------------------------------
/ui/theme/revealer_content_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 0 )
9 |
--------------------------------------------------------------------------------
/ui/theme/revealer_hints_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 4.0
7 | content_margin_bottom = 4.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 0 )
9 |
--------------------------------------------------------------------------------
/ui/theme/hslider_grabber.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.572549, 0.560784, 0.721569, 1 )
5 | corner_radius_top_left = 6
6 | corner_radius_top_right = 6
7 | corner_radius_bottom_right = 6
8 | corner_radius_bottom_left = 6
9 |
--------------------------------------------------------------------------------
/ui/theme/hslider_grabber_highlight.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 6
6 | corner_radius_top_right = 6
7 | corner_radius_bottom_right = 6
8 | corner_radius_bottom_left = 6
9 |
--------------------------------------------------------------------------------
/ui/theme/panel_darker.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
5 | corner_radius_top_left = 12
6 | corner_radius_top_right = 12
7 | corner_radius_bottom_right = 12
8 | corner_radius_bottom_left = 12
9 |
--------------------------------------------------------------------------------
/ui/theme/vslider_grabber.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.572549, 0.560784, 0.721569, 1 )
5 | corner_radius_top_left = 6
6 | corner_radius_top_right = 6
7 | corner_radius_bottom_right = 6
8 | corner_radius_bottom_left = 6
9 |
--------------------------------------------------------------------------------
/ui/theme/vslider_grabber_highlight.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 6
6 | corner_radius_top_right = 6
7 | corner_radius_bottom_right = 6
8 | corner_radius_bottom_left = 6
9 |
--------------------------------------------------------------------------------
/ui/theme/panel_course_page.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.188235, 0.188235, 0.286275, 1 )
5 | corner_radius_top_left = 12
6 | corner_radius_top_right = 12
7 | corner_radius_bottom_right = 12
8 | corner_radius_bottom_left = 12
9 |
--------------------------------------------------------------------------------
/ui/theme/progress_simple_foreground.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 16
6 | corner_radius_top_right = 16
7 | corner_radius_bottom_right = 16
8 | corner_radius_bottom_left = 16
9 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_code_small.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/SourceCodePro-Regular.otf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | use_mipmaps = true
7 | use_filter = true
8 | font_data = ExtResource( 1 )
9 |
--------------------------------------------------------------------------------
/course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | # EXPORT health
4 | var health = 100
5 | # /EXPORT health
6 |
7 | func _ready():
8 | yield(get_tree().create_timer(0.5), "timeout")
9 | Events.emit_signal("practice_run_completed")
10 |
--------------------------------------------------------------------------------
/ui/theme/progress_simple_background.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.188235, 0.188235, 0.286275, 1 )
5 | corner_radius_top_left = 16
6 | corner_radius_top_right = 16
7 | corner_radius_bottom_right = 16
8 | corner_radius_bottom_left = 16
9 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/content-issue.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Content issue
3 | about: There's a typo or something unclear in some of the app's text.
4 | title: ''
5 | labels: content
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Issue description:**
11 | A clear and concise description of what the issue is.
12 |
--------------------------------------------------------------------------------
/course/lesson-26-looping-over-dictionaries/Turtle.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://game_demos/turtle.png" type="Texture" id=1]
4 |
5 | [node name="Turtle" type="Sprite"]
6 | position = Vector2( 20, 283 )
7 | scale = Vector2( 0.8, 0.8 )
8 | texture = ExtResource( 1 )
9 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_button.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 24
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_text.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 20
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_text_bold.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 20
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_title.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 24
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/hscrollbar_grabber.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_grabber.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/course/lesson-2-your-first-error/first-error/TestsFixError.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 |
4 | func test_remove_errors() -> String:
5 | for line in _slice.get_main_lines():
6 | if "#" in line:
7 | return tr("There's still a comment in your code. You need to remove the comment sign (#).")
8 | return ""
9 |
--------------------------------------------------------------------------------
/ui/theme/button_main_menu_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | draw_center = false
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_code.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/SourceCodePro-Regular.otf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 20
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_text_italics.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Italic.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 20
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_title_big.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 32
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_version.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 14
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_well_done_bold.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 26
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_large_grabber.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/addons/SmoothScroll/plugin.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends EditorPlugin
3 |
4 |
5 | func _enter_tree():
6 | add_custom_type("SmoothScrollContainer", "ScrollContainer", preload("SmoothScrollContainer.gd"), preload("class-icon.svg"))
7 |
8 |
9 | func _exit_tree():
10 | remove_custom_type("SmoothScrollContainer")
11 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_documentation_bold.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 18
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_main_menu_buttons.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 32
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_practice_progress.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 22
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_title_slim.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 24
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_well_done_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 26
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_well_done_title.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 42
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/hscrollbar_grabber_highlight.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.584314, 1, 0.65098, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_grabber_highlight.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.584314, 1, 0.65098, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/course/lesson-22-functions-return-values/visuals/grid_demo/GridCell.gd:
--------------------------------------------------------------------------------
1 | extends Panel
2 |
3 | var cell := Vector2.ZERO setget set_cell
4 |
5 | onready var label := $Label as Label
6 |
7 | func set_cell(value: Vector2):
8 | cell = value
9 | if not label:
10 | yield(self, "ready")
11 | label.text = str(cell)
12 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_documentation_italics.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Italic.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 18
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_documentation_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-Regular.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 18
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_text_bold_italics.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/OpenSans-BoldItalic.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 20
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/hscrollbar_grabber_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.25098, 0.858824, 0.321569, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_grabber_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.25098, 0.858824, 0.321569, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_large_grabber_highlight.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.584314, 1, 0.65098, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/addons/ColorPickerPresets/plugin.cfg:
--------------------------------------------------------------------------------
1 | [plugin]
2 |
3 | name="ColorPickerPresets"
4 | description="Sets the editor color picker presets from
5 | `presets.hex`, if it exists. The file is local to the
6 | addon folder."
7 | author="Răzvan Cosmin Rădulescu - razcore"
8 | version="0.1"
9 | script="ColorPickerPresets.gd"
10 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-hints/FixHints.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-28-specifying-types/fix-hints/FixHints.gd" type="Script" id=1]
4 |
5 | [node name="FixHints" type="Control"]
6 | anchor_right = 1.0
7 | anchor_bottom = 1.0
8 | script = ExtResource( 1 )
9 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-values/FixValues.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-28-specifying-types/fix-values/FixValues.gd" type="Script" id=1]
4 |
5 | [node name="Control" type="Control"]
6 | anchor_right = 1.0
7 | anchor_bottom = 1.0
8 | script = ExtResource( 1 )
9 |
--------------------------------------------------------------------------------
/ui/components/BreadCrumbs.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/components/BreadCrumbs.gd" type="Script" id=2]
4 |
5 | [node name="BreadCrumbs" type="HBoxContainer"]
6 | margin_bottom = 48.0
7 | script = ExtResource( 2 )
8 | __meta__ = {
9 | "_edit_use_anchors_": false
10 | }
11 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_button_small.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [sub_resource type="DynamicFontData" id=1]
4 | font_path = "res://ui/theme/fonts/Montserrat-Bold.ttf"
5 |
6 | [resource]
7 | size = 18
8 | use_mipmaps = true
9 | use_filter = true
10 | font_data = SubResource( 1 )
11 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_documentation_mono.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/SourceCodePro-Regular.otf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 18
7 | use_mipmaps = true
8 | use_filter = true
9 | font_data = ExtResource( 1 )
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_title_small.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [sub_resource type="DynamicFontData" id=1]
4 | font_path = "res://ui/theme/fonts/Montserrat-Bold.ttf"
5 |
6 | [resource]
7 | size = 20
8 | use_mipmaps = true
9 | use_filter = true
10 | font_data = SubResource( 1 )
11 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_large_grabber_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.25098, 0.858824, 0.321569, 1 )
5 | corner_radius_top_left = 8
6 | corner_radius_top_right = 8
7 | corner_radius_bottom_right = 8
8 | corner_radius_bottom_left = 8
9 | corner_detail = 4
10 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "**/.git": true,
4 | "**/.svn": true,
5 | "**/.hg": true,
6 | "**/CVS": true,
7 | "**/.DS_Store": true,
8 | "**/Thumbs.db": true,
9 | "**/*.png.import": true,
10 | "**/*.kra": true
11 | },
12 | "explorerExclude.backup": null
13 | }
14 |
--------------------------------------------------------------------------------
/ui/theme/codeeditor_locked_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0.313726 )
5 | corner_radius_top_left = 12
6 | corner_radius_top_right = 12
7 | corner_radius_bottom_right = 12
8 | corner_radius_bottom_left = 12
9 | expand_margin_right = 8.0
10 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_lesson_heading.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 28
7 | use_mipmaps = true
8 | use_filter = true
9 | extra_spacing_top = 8
10 | font_data = ExtResource( 1 )
11 |
--------------------------------------------------------------------------------
/resources/CourseProgress.gd:
--------------------------------------------------------------------------------
1 | class_name CourseProgress
2 | extends Resource
3 |
4 | # Course resource identifier.
5 | export var course_id := ""
6 | # Lesson progression data.
7 | export var lessons := [] # Array of LessonProgress
8 |
9 | func _init() -> void:
10 | lessons = []
11 |
12 |
13 | func reset() -> void:
14 | lessons = []
15 |
--------------------------------------------------------------------------------
/ui/icons/code_tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_button_big_green.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 24
7 | use_mipmaps = true
8 | use_filter = true
9 | extra_spacing_char = 1
10 | font_data = ExtResource( 1 )
11 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // See https://go.microsoft.com/fwlink/?LinkId=733558
3 | // for the documentation about the tasks.json format
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "label": "[i18n] Extract Messages",
8 | "type": "shell",
9 | "group": "build",
10 | "command": "python ./i18n/extract.py",
11 | }
12 | ]
13 | }
--------------------------------------------------------------------------------
/addons/gdscript-slice-exporter/plugin.cfg:
--------------------------------------------------------------------------------
1 | [plugin]
2 |
3 | name="GDScript Slice Exporter"
4 | description="""This plugin builds resource files to use in the interactive learn app.
5 | The resources represent editable portions of scripts students can work with in the learning app
6 | """
7 | author="GDQuest"
8 | version="1.0"
9 | script="plugin.gd"
10 |
--------------------------------------------------------------------------------
/ui/components/BigGreenButton.gd:
--------------------------------------------------------------------------------
1 | extends Button
2 |
3 |
4 | func _ready() -> void:
5 | var color := Color("303049")
6 | add_color_override("icon_color_normal", color)
7 | add_color_override("icon_color_hover", color)
8 | add_color_override("icon_color_focus", color)
9 | add_color_override("icon_color_pressed", get_color("font_color_pressed"))
10 |
--------------------------------------------------------------------------------
/ui/theme/revealer_notes_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 24.0
5 | content_margin_right = 24.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | corner_radius_bottom_right = 12
10 | corner_radius_bottom_left = 12
11 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-visible/TestsMakeCharacterVisible.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 |
4 | func test_character_is_visible() -> String:
5 | var node_2d := _scene_root_viewport.get_child(0) as Node2D
6 | if not node_2d.visible:
7 | return tr("The character is still invisible! Did you call the show() function?")
8 | return ""
9 |
--------------------------------------------------------------------------------
/ui/theme/popupmenu_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 12.0
5 | content_margin_right = 12.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 1 )
9 | shadow_color = Color( 0.0352941, 0.0392157, 0.12549, 0.501961 )
10 | shadow_size = 8
11 |
--------------------------------------------------------------------------------
/ui/theme/hscrollbar_scroll.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_top = 4.0
5 | content_margin_bottom = 4.0
6 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
7 | corner_radius_top_left = 8
8 | corner_radius_top_right = 8
9 | corner_radius_bottom_right = 8
10 | corner_radius_bottom_left = 8
11 | corner_detail = 4
12 |
--------------------------------------------------------------------------------
/ui/theme/revealer_title_panel.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 10.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 0 )
9 | border_width_bottom = 2
10 | border_color = Color( 0.290196, 0.294118, 0.388235, 1 )
11 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_scroll.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 6.0
5 | content_margin_right = 6.0
6 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
7 | corner_radius_top_left = 8
8 | corner_radius_top_right = 8
9 | corner_radius_bottom_right = 8
10 | corner_radius_bottom_left = 8
11 | corner_detail = 4
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated files
2 | html_export/index.html
3 |
4 |
5 | # Godot-specific ignores
6 | .import/
7 | export.cfg
8 |
9 | # Mono-specific ignores
10 | .mono/
11 | data_*/
12 |
13 | # Plugins used for development
14 | addons/editor_icon_previewer
15 | addons/godot-plugin-refresher
16 |
17 | # Exports
18 | build/**/
19 |
20 | # Local user overrides
21 | override.cfg
--------------------------------------------------------------------------------
/ui/theme/panel_sliceeditor.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
5 | border_color = Color( 0.505882, 0.494118, 0.654902, 1 )
6 | border_blend = true
7 | corner_radius_top_left = 12
8 | corner_radius_top_right = 12
9 | corner_radius_bottom_right = 12
10 | corner_radius_bottom_left = 12
11 |
--------------------------------------------------------------------------------
/ui/theme/vscrollbar_large_scroll.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
7 | corner_radius_top_left = 8
8 | corner_radius_top_right = 8
9 | corner_radius_bottom_right = 8
10 | corner_radius_bottom_left = 8
11 | corner_detail = 4
12 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-hints/FixHints.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | # EXPORT fix
4 | var vector: Vector2 = Vector2(1, 1)
5 | var text: String = "Hello, world!"
6 | var whole_number: int = 4
7 | var decimal_number: float = 3.14
8 | # /EXPORT fix
9 |
10 | func _run():
11 | yield(get_tree().create_timer(0.5), "timeout")
12 | Events.emit_signal("practice_run_completed")
13 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-values/FixValues.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | # EXPORT fix
4 | var whole_number: int = 4
5 | var text: String = "Hello, world!"
6 | var vector: Vector2 = Vector2(1, 1)
7 | var decimal_number: float = 3.14
8 | # /EXPORT fix
9 |
10 | func _run():
11 | yield(get_tree().create_timer(0.5), "timeout")
12 | Events.emit_signal("practice_run_completed")
13 |
--------------------------------------------------------------------------------
/ui/screens/lesson/quizzes/UIQuizInputField.gd:
--------------------------------------------------------------------------------
1 | class_name UIQuizInputField
2 | extends UIBaseQuiz
3 |
4 | onready var _line_edit := $ClipContentBoundary/ChoiceContainer/ChoiceView/Answers/LineEdit as LineEdit
5 |
6 |
7 | func _ready() -> void:
8 | _line_edit.connect("text_entered", self, "_test_answer")
9 |
10 |
11 | func _get_answers() -> Array:
12 | return [_line_edit.text]
13 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/turning_right/TurningRight.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/turning_right/TurningRight.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="TurningRight" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/utils/version.gd:
--------------------------------------------------------------------------------
1 | # AUTO GENERATED changed_file, YOUR CHANGES WILL NOT REMAIN
2 | class_name AppVersion
3 |
4 | const version := "0.3.0";
5 | const git_commit := "6de164cb076cb7ae64eabd4e9e28fdcc865e3840";
6 | const git_branch := "version-number";
7 | const build_date := [2022, 03, 02, 14, 11, 31];
8 | const build_date_unix := 1646223091;
9 | const build_date_iso := "2022/03/02 14:11:31;"
10 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/Modulo/normal_stylebox.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.572549, 0.560784, 0.721569, 1 )
5 | border_width_bottom = 4
6 | border_color = Color( 0.960784, 0.980392, 0.980392, 1 )
7 | corner_radius_top_left = 4
8 | corner_radius_top_right = 4
9 | corner_radius_bottom_right = 4
10 | corner_radius_bottom_left = 4
11 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/Modulo/remainder_stylebox.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.239216, 1, 0.431373, 1 )
5 | border_width_bottom = 4
6 | border_color = Color( 0.960784, 0.980392, 0.980392, 1 )
7 | corner_radius_top_left = 4
8 | corner_radius_top_right = 4
9 | corner_radius_bottom_right = 4
10 | corner_radius_bottom_left = 4
11 |
--------------------------------------------------------------------------------
/course/lesson-20-looping-over-arrays/drawing-in-loops/DrawingInLoops.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-20-looping-over-arrays/drawing-in-loops/DrawingInLoops.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="DrawingInLoops" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/ui/theme/button_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | corner_radius_top_left = 8
10 | corner_radius_top_right = 8
11 | corner_radius_bottom_right = 8
12 | corner_radius_bottom_left = 8
13 |
--------------------------------------------------------------------------------
/ui/theme/hslider_slider.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_top = 4.0
5 | content_margin_bottom = 4.0
6 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
7 | corner_radius_top_left = 6
8 | corner_radius_top_right = 6
9 | corner_radius_bottom_right = 6
10 | corner_radius_bottom_left = 6
11 | expand_margin_left = 6.0
12 | expand_margin_right = 6.0
13 |
--------------------------------------------------------------------------------
/ui/theme/vslider_slider.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 4.0
5 | content_margin_right = 4.0
6 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
7 | corner_radius_top_left = 6
8 | corner_radius_top_right = 6
9 | corner_radius_bottom_right = 6
10 | corner_radius_bottom_left = 6
11 | expand_margin_top = 6.0
12 | expand_margin_bottom = 6.0
13 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/drawing_squares/DrawingSquares.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-5-your-first-function/drawing_squares/DrawingSquares.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="SquareDrawingTurtle" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/game_demos/run_and_jump/Obstacle.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://game_demos/run_and_jump/Obstacle.gd" type="Script" id=1]
4 |
5 | [node name="Area2D" type="Area2D"]
6 | script = ExtResource( 1 )
7 |
8 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
9 | position = Vector2( 0, -0.203634 )
10 |
11 | [node name="Sprite" type="Sprite" parent="."]
12 |
--------------------------------------------------------------------------------
/ui/theme/button_disabled.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.247059, 0.247059, 0.341176, 1 )
9 | corner_radius_top_left = 8
10 | corner_radius_top_right = 8
11 | corner_radius_bottom_right = 8
12 | corner_radius_bottom_left = 8
13 |
--------------------------------------------------------------------------------
/ui/theme/button_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | corner_radius_top_left = 8
10 | corner_radius_top_right = 8
11 | corner_radius_bottom_right = 8
12 | corner_radius_bottom_left = 8
13 |
--------------------------------------------------------------------------------
/ui/theme/button_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | corner_radius_top_left = 8
10 | corner_radius_top_right = 8
11 | corner_radius_bottom_right = 8
12 | corner_radius_bottom_left = 8
13 |
--------------------------------------------------------------------------------
/ui/theme/panel_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/panel_error_log.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/course/lesson-18-for-loops/for_rectangles/ForDrawingMultipleRectangles.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-18-for-loops/for_rectangles/ForDrawingMultipleRectangles.gd" type="Script" id=2]
5 |
6 | [node name="DrawingMultipleRectangles" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_rectangle/DrawingRectangle.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/drawing_rectangle/DrawingRectangle.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RectangleDrawingTurtle" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/visuals/TurtleHello.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://game_demos/turtle.png" type="Texture" id=1]
4 |
5 | [node name="TurtleHello" type="TextureRect"]
6 | margin_right = 100.0
7 | margin_bottom = 100.0
8 | size_flags_horizontal = 3
9 | texture = ExtResource( 1 )
10 | stretch_mode = 4
11 | __meta__ = {
12 | "_edit_use_anchors_": false
13 | }
14 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners/DrawingCorners.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corners/DrawingCorners.gd" type="Script" id=2]
5 |
6 | [node name="DrawingCorners" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners/DrawingLine.tscn.depren:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corner/DrawingLine.gd" type="Script" id=2]
5 |
6 | [node name="DrawingLine" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_squares/DrawingSquares.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_squares/DrawingSquares.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="DrawingSquares" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/ui/theme/outliner_background.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/quiz_outline_error.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | draw_center = false
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 1, 0.0941176, 0.321569, 1 )
10 | corner_radius_top_left = 12
11 | corner_radius_top_right = 12
12 | corner_radius_bottom_right = 12
13 | corner_radius_bottom_left = 12
14 |
--------------------------------------------------------------------------------
/ui/theme/quiz_outline_passed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | draw_center = false
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 0.239216, 1, 0.431373, 1 )
10 | corner_radius_top_left = 12
11 | corner_radius_top_right = 12
12 | corner_radius_bottom_right = 12
13 | corner_radius_bottom_left = 12
14 |
--------------------------------------------------------------------------------
/ui/theme/revealer_notes_title_expanded.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
9 | border_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
10 | corner_radius_top_left = 12
11 | corner_radius_top_right = 12
12 |
--------------------------------------------------------------------------------
/ui/theme/text_stylebox_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/text_stylebox_readonly.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/textedit_stylebox.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 16.0
7 | content_margin_bottom = 16.0
8 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/visuals/RunningRobot.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-11-time-delta/visuals/RunningRobot.gd" type="Script" id=2]
5 |
6 | [node name="RunningRobot" type="Node2D"]
7 | script = ExtResource( 2 )
8 |
9 | [node name="Robot" parent="." instance=ExtResource( 1 )]
10 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners_advanced/DrawingLine.tscn.depren:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corner/DrawingLine.gd" type="Script" id=2]
5 |
6 | [node name="DrawingLine" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/ui/theme/outliner_details_background.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/outliner_item_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 0.501961 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/outliner_item_selected.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.188235, 0.188235, 0.286275, 0.752941 )
9 | corner_radius_top_left = 12
10 | corner_radius_top_right = 12
11 | corner_radius_bottom_right = 12
12 | corner_radius_bottom_left = 12
13 |
--------------------------------------------------------------------------------
/ui/theme/panel_darker_with_shadow.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
5 | corner_radius_top_left = 12
6 | corner_radius_top_right = 12
7 | corner_radius_bottom_right = 12
8 | corner_radius_bottom_left = 12
9 | shadow_color = Color( 0.0352941, 0.0392157, 0.129412, 0.439216 )
10 | shadow_size = 8
11 | shadow_offset = Vector2( 0, 5 )
12 |
--------------------------------------------------------------------------------
/ui/components/popups/ExternalErrorPopup.gd:
--------------------------------------------------------------------------------
1 | extends ColorRect
2 |
3 | onready var _confirm_button := $PanelContainer/Column/Margin/Column/Buttons/ConfirmButton as Button
4 |
5 |
6 | func _ready():
7 | _confirm_button.connect("pressed", self, "hide")
8 | connect("visibility_changed", self, "_on_visibility_changed")
9 |
10 |
11 | func _on_visibility_changed() -> void:
12 | if visible:
13 | _confirm_button.grab_focus()
14 |
--------------------------------------------------------------------------------
/ui/theme/quiz_outline_neutral.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | draw_center = false
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 0.572549, 0.560784, 0.721569, 1 )
10 | corner_radius_top_left = 12
11 | corner_radius_top_right = 12
12 | corner_radius_bottom_right = 12
13 | corner_radius_bottom_left = 12
14 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree")
4 |
5 | # EXPORT welcome_to_app
6 | func _ready() -> void:
7 | print("Welcome!")
8 | # /EXPORT welcome_to_app
9 | yield(get_tree().create_timer(1.0), "timeout")
10 | Events.emit_signal("practice_run_completed")
11 |
12 | func _run():
13 | _animation_tree.travel("saying_hi")
14 |
--------------------------------------------------------------------------------
/course/lesson-2-your-first-error/first-error/ErrorScene.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree")
4 |
5 | func _ready():
6 | yield(get_tree().create_timer(1.0), "timeout")
7 | Events.emit_signal("practice_run_completed")
8 |
9 | # EXPORT wrong_code
10 | func this_code_is_wrong():
11 | return
12 | # /EXPORT wrong_code
13 |
14 | func _run():
15 | _animation_tree.travel("saying_hi")
16 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-upright/MakeRobotUpright.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready():
5 | rotation = -0.5
6 |
7 |
8 | func _run():
9 | run()
10 | yield(get_tree().create_timer(1.0), "timeout")
11 | Events.emit_signal("practice_run_completed")
12 |
13 |
14 | # EXPORT rotate
15 | func run():
16 | rotate(0.5)
17 | # /EXPORT rotate
18 |
19 |
20 | func reset():
21 | rotation = -0.5
22 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_rectangles/DrawingRectangles.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_rectangles/DrawingRectangles.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="DrawingRectangles" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/ui/theme/runnable_example_panel_outline.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | draw_center = false
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 0.4, 0.384314, 0.564706, 1 )
10 | corner_radius_top_left = 12
11 | corner_radius_top_right = 12
12 | corner_radius_bottom_right = 12
13 | corner_radius_bottom_left = 12
14 |
--------------------------------------------------------------------------------
/course/lesson-22-functions-return-values/convert-grid-coordinates/ConvertGridCoordinates.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-22-functions-return-values/convert-grid-coordinates/ConvertGridCoordinates.gd" type="Script" id=1]
4 |
5 | [node name="ConvertGridCoordinates" type="Node2D"]
6 | script = ExtResource( 1 )
7 |
8 | [node name="Camera2D" type="Camera2D" parent="."]
9 | current = true
10 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-visible/MakeCharacterVisible.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree")
4 |
5 | func _ready():
6 | _animation_tree.travel("saying_hi")
7 |
8 | func _run():
9 | run()
10 | yield(get_tree().create_timer(1.0), "timeout")
11 | Events.emit_signal("practice_run_completed")
12 |
13 | # EXPORT show
14 | func run():
15 | show()
16 | # /EXPORT show
17 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/drawing_multiple_squares/DrawingMultipleSquares.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-5-your-first-function/drawing_multiple_squares/DrawingMultipleSquares.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="DrawingMultipleSquares" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.gd" type="Script" id=1]
4 |
5 | [node name="DefineHealthVar" type="CenterContainer"]
6 | anchor_right = 1.0
7 | anchor_bottom = 1.0
8 | script = ExtResource( 1 )
9 | __meta__ = {
10 | "_edit_use_anchors_": false
11 | }
12 |
--------------------------------------------------------------------------------
/game_demos/run_and_jump/Game.live-editor/scene/Game.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/run_and_jump/Game.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/theme/focus.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0 )
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 0.14902, 0.776471, 0.968627, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 |
--------------------------------------------------------------------------------
/ui/theme/fonts/font_percent.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="DynamicFont" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/theme/fonts/Montserrat-Bold.ttf" type="DynamicFontData" id=1]
4 |
5 | [resource]
6 | size = 18
7 | outline_size = 2
8 | outline_color = Color( 0.290196, 0.294118, 0.388235, 1 )
9 | use_mipmaps = true
10 | use_filter = true
11 | extra_spacing_top = 2
12 | extra_spacing_bottom = 2
13 | font_data = ExtResource( 1 )
14 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/ImageSonic.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/lesson-1-what-code-is-like/sonic-colors-ultimate.jpg" type="Texture" id=1]
4 |
5 | [node name="TextureRect" type="TextureRect"]
6 | margin_right = 800.0
7 | margin_bottom = 400.0
8 | rect_min_size = Vector2( 0, 450 )
9 | size_flags_horizontal = 3
10 | texture = ExtResource( 1 )
11 | expand = true
12 | stretch_mode = 6
13 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_bigger_rectangle/DrawingBiggerRectangle.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/drawing_bigger_rectangle/DrawingBiggerRectangle.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RectangleBiggerDrawingTurtle" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners_advanced/DrawingCornersAdvanced.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corners_advanced/DrawingCornersAdvanced.gd" type="Script" id=2]
5 |
6 | [node name="DrawingLine" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/DrawAnySquare.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends RunnableCodeExample
3 |
4 | func _ready():
5 | create_slider_for("size", 20.0, 200.0, 10.0)
6 |
7 | func _set_instance_value(value: float, property_name: String, value_label: Label) -> void:
8 | ._set_instance_value(value, property_name, value_label)
9 | _gdscript_text_edit.text = gdscript_code.replace(property_name, "%s [=%s]"%[property_name, value])
10 |
--------------------------------------------------------------------------------
/html_export/compile.md:
--------------------------------------------------------------------------------
1 | # Compiling for web
2 |
3 | Because I need this often, here's a one-liner to compile for web:
4 |
5 | ```sh
6 | rm -rf build/web && \
7 | mkdir -p build/web && \
8 | godot -v --export "HTML5" build/web/index.html && \
9 | cp -r html_export/static/* build/web && \
10 | cd build/web && \
11 | python -m http.server 8000 && \
12 | cd -
13 | ```
14 |
15 | (This assumes `python` and `godot` are available on `$PATH`)
--------------------------------------------------------------------------------
/ui/components/GDQuestLogo.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/components/gdquest_logo_white.svg" type="Texture" id=1]
4 | [ext_resource path="res://ui/components/GDQuestLogo.gd" type="Script" id=2]
5 |
6 | [node name="GDQuestLogo" type="TextureButton"]
7 | margin_right = 181.0
8 | margin_bottom = 56.0
9 | mouse_default_cursor_shape = 2
10 | texture_normal = ExtResource( 1 )
11 | script = ExtResource( 2 )
12 |
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/FloatingStar.gd:
--------------------------------------------------------------------------------
1 | extends TextureRect
2 |
3 | export var min_offset := 6.0
4 | export var max_offset := 14.0
5 |
6 | onready var offset := rand_range(min_offset, max_offset)
7 | onready var time_offset := randf()
8 |
9 | onready var start_position := rect_position
10 |
11 |
12 | func _process(delta: float) -> void:
13 | rect_position.y = start_position.y + sin(OS.get_ticks_msec() / 1000.0 + time_offset) * offset
14 |
--------------------------------------------------------------------------------
/course/lesson-7-member-variables/draw_rectangle_at_position/DrawingRectangleAtPosition.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-7-member-variables/draw_rectangle_at_position/DrawingRectangleAtPosition.gd" type="Script" id=1]
4 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [node name="DrawingRectangleAtPosition" instance=ExtResource( 2 )]
7 | script = ExtResource( 1 )
8 |
--------------------------------------------------------------------------------
/course/lesson-7-member-variables/draw_rectangles_at_positions/DrawingMultipleRectangles.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-7-member-variables/draw_rectangles_at_positions/DrawingMultipleRectangles.gd" type="Script" id=2]
5 |
6 | [node name="DrawingMultipleRectangles" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
--------------------------------------------------------------------------------
/ui/screens/practice/gdquestboy_frame.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxTexture" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/screens/practice/gdquestboy_9slice.svg" type="Texture" id=1]
4 |
5 | [resource]
6 | texture = ExtResource( 1 )
7 | region_rect = Rect2( 0, 0, 595, 595 )
8 | margin_left = 38.0
9 | margin_right = 38.0
10 | margin_top = 84.0
11 | margin_bottom = 51.4555
12 | axis_stretch_horizontal = 1
13 | axis_stretch_vertical = 1
14 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_focus.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0 )
5 | border_width_left = 2
6 | border_width_top = 2
7 | border_width_right = 2
8 | border_width_bottom = 2
9 | border_color = Color( 0.14902, 0.776471, 0.968627, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 |
--------------------------------------------------------------------------------
/ui/screens/practice/gdquestboy_frame_main_menu.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxTexture" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://ui/screens/practice/gdquestboy_9slice.svg" type="Texture" id=1]
4 |
5 | [resource]
6 | texture = ExtResource( 1 )
7 | region_rect = Rect2( 0, 0, 595, 595 )
8 | margin_left = 28.0
9 | margin_right = 28.0
10 | margin_top = 84.0
11 | margin_bottom = 44.0
12 | axis_stretch_horizontal = 1
13 | axis_stretch_vertical = 1
14 |
--------------------------------------------------------------------------------
/ui/theme/pill.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 12.0
5 | content_margin_right = 12.0
6 | content_margin_top = 0.0
7 | content_margin_bottom = 0.0
8 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
9 | corner_radius_top_left = 16
10 | corner_radius_top_right = 16
11 | corner_radius_bottom_right = 16
12 | corner_radius_bottom_left = 16
13 | expand_margin_top = 2.0
14 | expand_margin_bottom = 2.0
15 |
--------------------------------------------------------------------------------
/ui/theme/quiz_answer_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 10.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_color = Color( 0.960784, 0.980392, 0.980392, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-using-delta/RotatingSpriteDelta.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 |
8 | # EXPORT move_and_rotate
9 | func _process(delta):
10 | rotate(2 * delta)
11 | # /EXPORT move_and_rotate
12 |
13 |
14 | func _run() -> void:
15 | reset()
16 | _process(0.0)
17 | set_process(true)
18 |
19 |
20 | func reset() -> void:
21 | rotation = 0.0
22 | position = Vector2(0, 0)
23 | set_process(false)
24 |
--------------------------------------------------------------------------------
/ui/theme/quiz_answer_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 10.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | border_color = Color( 0.572549, 0.560784, 0.721569, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 |
--------------------------------------------------------------------------------
/ui/theme/quiz_answer_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 10.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | border_color = Color( 0.290196, 0.294118, 0.388235, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/even_levels/EvenLevels.live-editor/scene/EvenLevels.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-15-modulo/even_levels/EvenLevels.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/rolling_dice/RollingDice.live-editor/scene/RollingDice.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-15-modulo/rolling_dice/RollingDice.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/DemoDrawingSquares.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/visuals/DemoDrawingSquares.gd" type="Script" id=2]
5 |
6 | [node name="DemoDrawingSquares" type="Node2D"]
7 | script = ExtResource( 2 )
8 |
9 | [node name="DrawingTurtle" parent="." instance=ExtResource( 1 )]
10 |
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/StarGreen.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/screens/welcome_screen/FloatingStar.gd" type="Script" id=1]
4 | [ext_resource path="res://ui/screens/welcome_screen/star_green.png" type="Texture" id=2]
5 |
6 | [node name="StarGreen" type="TextureRect"]
7 | margin_right = 38.0
8 | margin_bottom = 38.0
9 | texture = ExtResource( 2 )
10 | script = ExtResource( 1 )
11 | __meta__ = {
12 | "_edit_use_anchors_": false
13 | }
14 |
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/StarWhite.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/screens/welcome_screen/FloatingStar.gd" type="Script" id=1]
4 | [ext_resource path="res://ui/screens/welcome_screen/star_white.png" type="Texture" id=2]
5 |
6 | [node name="StarWhite" type="TextureRect"]
7 | margin_right = 38.0
8 | margin_bottom = 38.0
9 | texture = ExtResource( 2 )
10 | script = ExtResource( 1 )
11 | __meta__ = {
12 | "_edit_use_anchors_": false
13 | }
14 |
--------------------------------------------------------------------------------
/course/lesson-21-strings/string_array/StringArray.live-editor/scene/StringArray.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-21-strings/string_array/StringArray.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-21-strings/string_error/StringError.live-editor/scene/StringError.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-21-strings/string_error/StringError.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-hints/FixHints.live-editor/scene/FixHints.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-28-specifying-types/fix-hints/FixHints.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.gd" type="Script" id=4]
5 |
6 | [node name="WelcomeToTheApp" instance=ExtResource( 1 )]
7 | script = ExtResource( 4 )
8 |
9 | [node name="Camera2D" type="Camera2D" parent="Pivot" index="3"]
10 | current = true
11 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/clarify/ClarifyCode.live-editor/scene/ClarifyCode.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-12-using-variables/clarify/ClarifyCode.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/traffic_lights/TrafficLights.live-editor/scene/TrafficLights.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-15-modulo/traffic_lights/TrafficLights.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/player-input/PlayerInput.live-editor/scene/PlayerInput.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-27-value-types/player-input/PlayerInput.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/fix-values/FixValues.live-editor/scene/FixValues.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-28-specifying-types/fix-values/FixValues.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/screens/lesson/quizzes/UIQuizChoice.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/screens/lesson/UIBaseQuiz.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://ui/screens/lesson/quizzes/UIQuizChoice.gd" type="Script" id=2]
5 |
6 | [node name="UIQuizChoice" instance=ExtResource( 1 )]
7 | script = ExtResource( 2 )
8 |
9 | [node name="Question" parent="ClipContentBoundary/ChoiceContainer/ChoiceView/QuizHeader" index="0"]
10 | text = "[b]Question[/b]"
11 |
--------------------------------------------------------------------------------
/course/lesson-16-2d-vectors/resetting_robot/RobotReset.live-editor/scene/RobotReset.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-16-2d-vectors/resetting_robot/RobotReset.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-18-for-loops/for_move/PracticeBoardFor.live-editor/scene/PracticeBoardFor.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-18-for-loops/for_move/PracticeBoardFor.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-2-your-first-error/first-error/ErrorScene.live-editor/scene/ErrorScene.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-2-your-first-error/first-error/ErrorScene.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/fixing_error/FixingError.live-editor/scene/FixingError.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-12-using-variables/fixing_error/FixingError.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-16-2d-vectors/increase_scale/IncreaseScale.live-editor/scene/IncreaseScale.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-16-2d-vectors/increase_scale/IncreaseScale.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-20-looping-over-arrays/robot-path/RobotPath.live-editor/scene/RobotPath.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-20-looping-over-arrays/robot-path/RobotPath.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/theme/panel_sliceeditor_title.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 16.0
7 | content_margin_bottom = 10.0
8 | bg_color = Color( 0.0352941, 0.0392157, 0.12549, 1 )
9 | border_color = Color( 0.505882, 0.494118, 0.654902, 1 )
10 | border_blend = true
11 | corner_radius_top_left = 12
12 | corner_radius_top_right = 12
13 | corner_radius_bottom_right = 12
14 | corner_radius_bottom_left = 12
15 |
--------------------------------------------------------------------------------
/course/lesson-13-conditions/limiting_health/LimitingHealth.live-editor/scene/LimitingHealth.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-13-conditions/limiting_health/LimitingHealth.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-14-multiplying/reducing_damage/ReducingDamage.live-editor/scene/ReducingDamage.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-14-multiplying/reducing_damage/ReducingDamage.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-19-creating-arrays/moving-turtle/MovingTurtle.live-editor/scene/MovingTurtle.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-19-creating-arrays/moving-turtle/MovingTurtle.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-9-adding-and-subtracting/healing/HealingRobot.live-editor/scene/HealingRobot.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-9-adding-and-subtracting/healing/HealingRobot.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/theme/revealer_notes_title.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.290196, 0.294118, 0.388235, 1 )
9 | border_width_bottom = 4
10 | border_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
11 | corner_radius_top_left = 12
12 | corner_radius_top_right = 12
13 | corner_radius_bottom_right = 12
14 | corner_radius_bottom_left = 12
15 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-sprite/RotatingSprite.live-editor/scene/RotatingSprite.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-10-the-game-loop/rotating-sprite/RotatingSprite.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-13-conditions/using_conditions/UsingConditions.live-editor/scene/UsingConditions.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-13-conditions/using_conditions/UsingConditions.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-17-while-loops/while_move/PracticeBoardWhile.live-editor/scene/PracticeBoardWhile.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-17-while-loops/while_move/PracticeBoardWhile.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-23-append-to-arrays/clearing-meals/ClearingMeals.live-editor/scene/ClearingMeals.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-23-append-to-arrays/clearing-meals/ClearingMeals.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-23-append-to-arrays/popping-crates/PoppingCrates.live-editor/scene/PoppingCrates.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-23-append-to-arrays/popping-crates/PoppingCrates.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-24-access-array-indices/align-tracks/AlignTracks.live-editor/scene/AlignTracks.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-24-access-array-indices/align-tracks/AlignTracks.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-25-creating-dictionaries/adding-items/AddingItems.live-editor/scene/AddingItems.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-25-creating-dictionaries/adding-items/AddingItems.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/display-energy/DisplayingEnergy.live-editor/scene/DisplayingEnergy.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-27-value-types/display-energy/DisplayingEnergy.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/turning_right/TurningRight.live-editor/scene/TurningRight.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/turning_right/TurningRight.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 2 )
8 | scene = ExtResource( 1 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/Sky.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends HBoxContainer
3 |
4 | onready var tree := get_tree()
5 |
6 |
7 | func _ready() -> void:
8 | connect("resized", self, "update_size")
9 |
10 |
11 | func update_size() -> void:
12 | yield(tree, "idle_frame")
13 | for control in get_children():
14 | var new_position: Vector2 = control.rect_position
15 | var texture_rect: TextureRect = control.get_child(0)
16 | texture_rect.rect_position.x = - new_position.x
17 | texture_rect.rect_size = rect_size
18 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-sprite/RotatingSprite.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 |
8 | # EXPORT move_and_rotate
9 | func _process(_delta):
10 | rotate(0.05)
11 | # /EXPORT move_and_rotate
12 |
13 |
14 | func _run() -> void:
15 | reset()
16 | set_process(true)
17 | yield(get_tree().create_timer(1.0), "timeout")
18 | Events.emit_signal("practice_run_completed")
19 |
20 |
21 | func reset() -> void:
22 | rotation = 0.0
23 | set_process(false)
24 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-and-moving-delta/RotatingMovingSpriteDelta.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 |
8 | # EXPORT move_and_rotate
9 | func _process(delta):
10 | rotate(2 * delta)
11 | move_local_x(100 * delta)
12 | # /EXPORT move_and_rotate
13 |
14 |
15 | func _run() -> void:
16 | reset()
17 | _process(0.0)
18 | set_process(true)
19 |
20 |
21 | func reset() -> void:
22 | rotation = 0.0
23 | position = Vector2(0, 0)
24 | set_process(false)
25 |
--------------------------------------------------------------------------------
/course/lesson-19-creating-arrays/selecting-units/SelectingUnits.live-editor/scene/SelectingUnits.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-19-creating-arrays/selecting-units/SelectingUnits.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-24-access-array-indices/find-crystals/FindCrystals.live-editor/scene/FindCrystals.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-24-access-array-indices/find-crystals/FindCrystals.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-26-looping-over-dictionaries/place-units/PlaceUnits.live-editor/scene/PlaceUnits.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-26-looping-over-dictionaries/place-units/PlaceUnits.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.live-editor/scene/WelcomeToTheApp.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-13-conditions/prevent_zero_health/PreventZeroHealth.live-editor/scene/PreventZeroHealth.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-13-conditions/prevent_zero_health/PreventZeroHealth.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/drawing_squares/DrawingSquares.live-editor/scene/DrawingSquares.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-5-your-first-function/drawing_squares/DrawingSquares.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-9-adding-and-subtracting/taking-damage/DamagingRobot.live-editor/scene/DamagingRobot.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-9-adding-and-subtracting/taking-damage/DamagingRobot.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-14-multiplying/increase_max_health/IncreaseMaxHealth.live-editor/scene/IncreaseMaxHealth.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-14-multiplying/increase_max_health/IncreaseMaxHealth.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-20-looping-over-arrays/drawing-in-loops/DrawingInLoops.live-editor/scene/DrawingInLoops.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-20-looping-over-arrays/drawing-in-loops/DrawingInLoops.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-using-delta/RotatingSpriteDelta.live-editor/scene/RotatingSpriteDelta.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-11-time-delta/rotating-using-delta/RotatingSpriteDelta.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/visuals/RunningRobot.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | var computer_speed := 1.0
4 | var distance := 400
5 | var speed := distance/3
6 |
7 | onready var _sprite := $Robot
8 |
9 | func _ready() -> void:
10 | _sprite.position.x = -distance/2
11 |
12 | func run() -> void:
13 | pass
14 |
15 | func reset() -> void:
16 | pass
17 |
18 | func set_sprite_position(new_position: Vector2) -> void:
19 | _sprite.position = new_position
20 |
21 | func get_sprite_position() -> Vector2:
22 | return _sprite.position
23 |
--------------------------------------------------------------------------------
/course/lesson-15-modulo/visuals/DiceShower.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | var max_number := 6
4 | var _result := 0
5 |
6 | onready var _result_label := $Sprite/Label as Label
7 | onready var _animation_player := $AnimationPlayer as AnimationPlayer
8 |
9 |
10 | func run() -> void:
11 | if _animation_player.is_playing():
12 | return
13 |
14 | roll(max_number)
15 |
16 |
17 | func roll(max_number: int) -> void:
18 | _result = randi() % max_number + 1
19 | _result_label.text = str(_result)
20 | _animation_player.play("roll")
21 |
--------------------------------------------------------------------------------
/course/lesson-2-your-first-error/ErrorTranslatorExample.gd:
--------------------------------------------------------------------------------
1 | extends MarginContainer
2 |
3 | onready var explanation := $MarginContainer/Column/Content/ErrorExplanation/Value as RichTextLabel
4 | onready var suggestion := $MarginContainer/Column/Content/ErrorSuggestion/Value as RichTextLabel
5 |
6 |
7 | func _ready() -> void:
8 | var message := GDScriptErrorDatabase.get_message(GDScriptCodes.ErrorCode.DUPLICATE_DECLARATION)
9 | explanation.bbcode_text = tr(message.explanation)
10 | suggestion.bbcode_text = tr(message.suggestion)
11 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-upright/TestsMakeRobotUpright.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | const TOLERANCE := 0.05
4 |
5 | func test_character_is_upright() -> String:
6 | var node_2d = _scene_root_viewport.get_child(0)
7 | if node_2d.rotation < -TOLERANCE:
8 | return tr("The robot is turned counter-clockwise! Did you turn it less than 0.5 radians?")
9 | elif node_2d.rotation > TOLERANCE:
10 | return tr("The robot is turned too far clockwise! Did you turn it more than 0.5 radians?")
11 | return ""
12 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_rectangle/DrawingRectangle.live-editor/scene/DrawingRectangle.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/drawing_rectangle/DrawingRectangle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 2 )
8 | scene = ExtResource( 1 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/screens/welcome_screen/test_quiz.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=2 format=2]
2 |
3 | [ext_resource path="res://resources/QuizChoice.gd" type="Script" id=1]
4 |
5 | [resource]
6 | script = ExtResource( 1 )
7 | quiz_id = ""
8 | question = "Are you eager to learn to code?"
9 | content_bbcode = ""
10 | hint = ""
11 | explanation_bbcode = "Cool, you'll get started in just a second."
12 | answer_options = [ "Sure!", "Nah..." ]
13 | valid_answers = [ "Sure!" ]
14 | is_multiple_choice = false
15 | do_shuffle_answers = false
16 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-and-moving/RotateAndMoveSprite.live-editor/scene/RotateAndMoveSprite.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-10-the-game-loop/rotating-and-moving/RotateAndMoveSprite.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-sprite/RotatingSprite.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-10-the-game-loop/rotating-sprite/RotatingSprite.gd" type="Script" id=1]
4 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RotatingMovingSpriteDelta" type="Node2D"]
7 |
8 | [node name="Robot" parent="." instance=ExtResource( 2 )]
9 | script = ExtResource( 1 )
10 |
11 | [node name="Camera2D" type="Camera2D" parent="."]
12 | current = true
13 |
--------------------------------------------------------------------------------
/course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.live-editor/scene/DefineHealthVar.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/components/QuitButton.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/icons/quit.svg" type="Texture" id=1]
4 | [ext_resource path="res://ui/components/QuitButton.gd" type="Script" id=2]
5 |
6 | [node name="QuitButton" type="Button"]
7 | margin_right = 36.0
8 | margin_bottom = 30.0
9 | hint_tooltip = "Quit the app.
10 | Shortcut: Alt+F4"
11 | mouse_default_cursor_shape = 2
12 | size_flags_horizontal = 0
13 | size_flags_vertical = 0
14 | icon = ExtResource( 1 )
15 | flat = true
16 | script = ExtResource( 2 )
17 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-using-delta/RotatingSpriteDelta.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-11-time-delta/rotating-using-delta/RotatingSpriteDelta.gd" type="Script" id=1]
4 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RotatingSpriteDelta" type="Node2D"]
7 |
8 | [node name="Robot" parent="." instance=ExtResource( 2 )]
9 | script = ExtResource( 1 )
10 |
11 | [node name="Camera2D" type="Camera2D" parent="."]
12 | current = true
13 |
--------------------------------------------------------------------------------
/course/lesson-25-creating-dictionaries/creating-inventory/CreatingInventory.live-editor/scene/CreatingInventory.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-25-creating-dictionaries/creating-inventory/CreatingInventory.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners/DrawingCorners.live-editor/scene/DrawingCorners.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corners/DrawingCorners.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_squares/DrawingSquares.live-editor/scene/DrawingSquares.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_squares/DrawingSquares.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/resources/ScriptSlice.gd:
--------------------------------------------------------------------------------
1 | # Represents one slice of a script. This is typically a section of a script that
2 | # corresponds to what you want the student to code in a practice.
3 | class_name ScriptSlice
4 | extends Resource
5 |
6 | export var start := 27
7 | export var end := 33
8 | export var leading_spaces := 0
9 | export var keyword := ""
10 | export var name := ""
11 | export var lines_before := []
12 | export var lines_after := []
13 | export var lines_editable := []
14 | export var closing := false
15 | export var is_full_file := false
16 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-and-moving/RotateAndMoveSprite.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-10-the-game-loop/rotating-and-moving/RotateAndMoveSprite.gd" type="Script" id=1]
4 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RotateAndMoveSprite" type="Node2D"]
7 |
8 | [node name="Robot" parent="." instance=ExtResource( 2 )]
9 | script = ExtResource( 1 )
10 |
11 | [node name="Camera2D" type="Camera2D" parent="."]
12 | current = true
13 |
--------------------------------------------------------------------------------
/course/lesson-18-for-loops/for_rectangles/ForDrawingMultipleRectangles.live-editor/scene/ForDrawingMultipleRectangles.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-18-for-loops/for_rectangles/ForDrawingMultipleRectangles.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-26-looping-over-dictionaries/display-inventory/DisplayInventory.live-editor/scene/DisplayInventory.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-26-looping-over-dictionaries/display-inventory/DisplayInventory.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-upright/MakeRobotUpright.live-editor/scene/MakeRobotUpright.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-3-standing-on-shoulders-of-giants/make-upright/MakeRobotUpright.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-13-conditions/using_conditions/UsingConditions.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _run():
5 | run()
6 |
7 |
8 | # EXPORT conditions
9 | func run():
10 | var health = 100
11 |
12 | if health > 5:
13 | print("health is greater than five.")
14 |
15 | if 1 < health:
16 | print("One is less than health.")
17 |
18 | if health == health:
19 | print("health is equal to health")
20 |
21 | if health != 7:
22 | print("health is not equal to seven.")
23 | # /EXPORT conditions
24 | Events.emit_signal("practice_run_completed")
25 |
--------------------------------------------------------------------------------
/course/lesson-3-standing-on-shoulders-of-giants/make-visible/MakeCharacterVisible.live-editor/scene/MakeCharacterVisible.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-3-standing-on-shoulders-of-giants/make-visible/MakeCharacterVisible.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_rectangles/DrawingRectangles.live-editor/scene/DrawingRectangles.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_rectangles/DrawingRectangles.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-and-moving-delta/RotatingMovingSpriteDelta.live-editor/scene/RotatingMovingSpriteDelta.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-11-time-delta/rotating-and-moving-delta/RotatingMovingSpriteDelta.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/components/OutputConsolePrintMessage.gd:
--------------------------------------------------------------------------------
1 | extends PanelContainer
2 |
3 | var values := [] setget set_values
4 |
5 | onready var _label := $Label as Label
6 | onready var _tween := $Tween as Tween
7 |
8 |
9 | func _ready() -> void:
10 | _tween.stop_all()
11 | _tween.interpolate_property(self, "self_modulate:a", 1.0, 0.25, 1.5)
12 | _tween.start()
13 |
14 |
15 | func set_values(new_values: Array) -> void:
16 | values = new_values
17 | if not is_inside_tree():
18 | yield(self, "ready")
19 |
20 | _label.text = PoolStringArray(new_values).join(" ")
21 |
--------------------------------------------------------------------------------
/ui/theme/focus_accent.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.239216, 1, 0.431373, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/ui/theme/focus_strict.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 1, 0.0941176, 0.321569, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_bigger_rectangle/DrawingBiggerRectangle.live-editor/scene/DrawingBiggerRectangle.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-4-drawing-a-rectangle/drawing_bigger_rectangle/DrawingBiggerRectangle.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 2 )
8 | scene = ExtResource( 1 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/drawing_multiple_squares/DrawingMultipleSquares.live-editor/scene/DrawingMultipleSquares.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-5-your-first-function/drawing_multiple_squares/DrawingMultipleSquares.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/rotating-and-moving-delta/RotatingMovingSpriteDelta.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-11-time-delta/rotating-and-moving-delta/RotatingMovingSpriteDelta.gd" type="Script" id=1]
4 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=2]
5 |
6 | [node name="RotatingMovingSpriteDelta" type="Node2D"]
7 |
8 | [node name="Robot" parent="." instance=ExtResource( 2 )]
9 | script = ExtResource( 1 )
10 |
11 | [node name="Camera2D" type="Camera2D" parent="."]
12 | current = true
13 |
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/FloatingStar.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/screens/end_screen/main_menu/star_2.png" type="Texture" id=1]
4 | [ext_resource path="res://ui/screens/end_screen/main_menu/FloatingStar.gd" type="Script" id=2]
5 |
6 | [node name="FloatingStar" type="TextureRect"]
7 | texture = ExtResource( 1 )
8 | stretch_mode = 3
9 | script = ExtResource( 2 )
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="Tween" type="Tween" parent="."]
15 | repeat = true
16 | playback/repeat = true
17 |
--------------------------------------------------------------------------------
/ui/theme/focus_outside_button.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 0 )
5 | border_width_left = 4
6 | border_width_top = 4
7 | border_width_right = 4
8 | border_width_bottom = 4
9 | border_color = Color( 0.14902, 0.776471, 0.968627, 1 )
10 | corner_radius_top_left = 8
11 | corner_radius_top_right = 8
12 | corner_radius_bottom_right = 8
13 | corner_radius_bottom_left = 8
14 | expand_margin_left = 3.0
15 | expand_margin_right = 3.0
16 | expand_margin_top = 3.0
17 | expand_margin_bottom = 3.0
18 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "GDScript Godot",
9 | "type": "godot",
10 | "request": "launch",
11 | "project": "${workspaceFolder}",
12 | "port": 6007,
13 | "address": "127.0.0.1",
14 | "launch_game_instance": true,
15 | "launch_scene": false
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/rotating-and-moving/RotateAndMoveSprite.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 |
8 | # EXPORT move_and_rotate
9 | func _process(_delta):
10 | rotate(0.05)
11 | move_local_x(5)
12 | # /EXPORT move_and_rotate
13 |
14 |
15 | func _run() -> void:
16 | reset()
17 | set_process(true)
18 | yield(get_tree().create_timer(1.0), "timeout")
19 | Events.emit_signal("practice_run_completed")
20 |
21 |
22 | func reset() -> void:
23 | rotation = 0.0
24 | position = Vector2(0, 0)
25 | set_process(false)
26 |
--------------------------------------------------------------------------------
/course/lesson-22-functions-return-values/convert-grid-coordinates/ConvertGridCoordinates.live-editor/scene/ConvertGridCoordinates.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-22-functions-return-values/convert-grid-coordinates/ConvertGridCoordinates.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-7-member-variables/draw_rectangle_at_position/DrawingRectangleAtPosition.live-editor/scene/DrawingRectangleAtPosition.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-7-member-variables/draw_rectangle_at_position/DrawingRectangleAtPosition.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/course/lesson-7-member-variables/draw_rectangles_at_positions/DrawingMultipleRectangles.live-editor/scene/DrawingMultipleRectangles.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-7-member-variables/draw_rectangles_at_positions/DrawingMultipleRectangles.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_large_accent.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.239216, 1, 0.431373, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_large_strict.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 1, 0.0941176, 0.321569, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/ui/theme/panel_tooltip.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.290196, 0.294118, 0.388235, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners_advanced/DrawingCornersAdvanced.live-editor/scene/DrawingCornersAdvanced.tscn.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/SceneProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-6-multiple-function-parameters/drawing_corners_advanced/DrawingCornersAdvanced.tscn" type="PackedScene" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | scene = ExtResource( 2 )
9 | viewport_size = Vector2( 1920, 1080 )
10 |
--------------------------------------------------------------------------------
/game_demos/panel_turtle_label.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 16.0
5 | content_margin_right = 16.0
6 | content_margin_top = 10.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.960784, 0.980392, 0.980392, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.572549, 0.560784, 0.721569, 1 )
14 | corner_radius_top_left = 24
15 | corner_radius_top_right = 24
16 | corner_radius_bottom_right = 24
17 | corner_radius_bottom_left = 24
18 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_large_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.960784, 0.980392, 0.980392, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/clarify/ClarifyCode.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 | # EXPORT clarify
8 | var angular_speed = 4
9 |
10 | func _process(delta):
11 | rotate(angular_speed * delta)
12 | # /EXPORT clarify
13 |
14 |
15 | func _run() -> void:
16 | reset()
17 | _process(0.0)
18 | set_process(true)
19 | yield(get_tree().create_timer(1.0), "timeout")
20 | Events.emit_signal("practice_run_completed")
21 |
22 |
23 | func reset() -> void:
24 | rotation = 0.0
25 | position = Vector2(300, 200)
26 | set_process(false)
27 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_large_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.572549, 0.560784, 0.721569, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_large_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 8.0
5 | content_margin_right = 8.0
6 | content_margin_top = 8.0
7 | content_margin_bottom = 8.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 4
10 | border_width_top = 4
11 | border_width_right = 4
12 | border_width_bottom = 4
13 | border_color = Color( 0.14902, 0.776471, 0.968627, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 |
--------------------------------------------------------------------------------
/ui/components/ConnectionIndicator.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/components/connectionIndicator_ON.png" type="Texture" id=1]
4 | [ext_resource path="res://ui/components/ConnectionIndicator.gd" type="Script" id=2]
5 |
6 | [node name="ConnectionIndicator" type="TextureRect"]
7 | margin_left = 20.0
8 | margin_top = 20.0
9 | margin_right = 68.0
10 | margin_bottom = 68.0
11 | size_flags_horizontal = 8
12 | size_flags_vertical = 0
13 | texture = ExtResource( 1 )
14 | script = ExtResource( 2 )
15 | __meta__ = {
16 | "_edit_use_anchors_": false
17 | }
18 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/player-input/PlayerInput.gd:
--------------------------------------------------------------------------------
1 | extends PanelContainer
2 |
3 | onready var input_field := $MarginContainer/VBoxContainer/HBoxContainer2/SpinBox as SpinBox
4 |
5 |
6 | func _run():
7 | buy_selected_item()
8 | yield(get_tree().create_timer(0.5), "timeout")
9 | Events.emit_signal("practice_run_completed")
10 |
11 |
12 | # EXPORT run
13 | var player_input = ""
14 | var item_count = 0
15 |
16 | func buy_selected_item():
17 | player_input = get_player_input()
18 | item_count = int(player_input)
19 | # /EXPORT run
20 |
21 |
22 | func get_player_input():
23 | return input_field.value
24 |
--------------------------------------------------------------------------------
/ui/components/FullScreenButton.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/icons/fullscreen_on.png" type="Texture" id=1]
4 | [ext_resource path="res://ui/components/FullScreenButton.gd" type="Script" id=2]
5 |
6 | [node name="FullScreenButton" type="Button"]
7 | margin_right = 36.0
8 | margin_bottom = 30.0
9 | rect_min_size = Vector2( 24, 24 )
10 | hint_tooltip = "Toggle the app full-screen.
11 | Shortcut: F11"
12 | mouse_default_cursor_shape = 2
13 | size_flags_vertical = 4
14 | shortcut_in_tooltip = false
15 | icon = ExtResource( 1 )
16 | flat = true
17 | script = ExtResource( 2 )
18 |
--------------------------------------------------------------------------------
/ui/screens/end_screen/main_menu/FloatingStar.gd:
--------------------------------------------------------------------------------
1 | extends TextureRect
2 |
3 | var duration := 1.5 + randf() * 0.5
4 |
5 | onready var _tween := $Tween as Tween
6 |
7 | func _ready() -> void:
8 | _tween.playback_speed = rand_range(0.9, 1.2)
9 | var top_pos := rect_position - Vector2(0, randf() * 12.0 + 4.0)
10 | _tween.interpolate_property(self, "rect_position", rect_position, top_pos, duration, Tween.TRANS_CUBIC, Tween.EASE_OUT)
11 | _tween.interpolate_property(self, "rect_position", top_pos, rect_position, duration, Tween.TRANS_CUBIC, Tween.EASE_OUT, duration)
12 | _tween.start()
13 | _tween.seek(randf())
14 |
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/plugins/MainScreenPlugin.gd:
--------------------------------------------------------------------------------
1 | # Wrapper class to make sure whichever control we put as the main screen plugin,
2 | # it is correctly displayed. Also gives easy access to EditorPlugin instance.
3 | tool
4 | extends MarginContainer
5 |
6 | var plugin_instance: EditorPlugin
7 |
8 | const ROOT_SCENE: PackedScene = preload("../ui/CourseEditor.tscn")
9 |
10 |
11 | func _init() -> void:
12 | size_flags_vertical = SIZE_EXPAND_FILL
13 |
14 |
15 | func _ready() -> void:
16 | var root := ROOT_SCENE.instance()
17 | add_child(root)
18 | root.editor_interface = plugin_instance.get_editor_interface()
19 |
--------------------------------------------------------------------------------
/course/lesson-21-strings/string_array/StringArray.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=4 format=2]
2 |
3 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-21-strings/string_array/StringArray.gd" type="Script" id=2]
5 |
6 | [sub_resource type="AnimationNodeStateMachinePlayback" id=1]
7 |
8 | [node name="StringArray" instance=ExtResource( 1 )]
9 | script = ExtResource( 2 )
10 |
11 | [node name="AnimationTree" parent="." index="3"]
12 | parameters/playback = SubResource( 1 )
13 |
14 | [node name="Camera2D" type="Camera2D" parent="." index="4"]
15 | current = true
16 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/clarify/ClarifyCode.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=4 format=2]
2 |
3 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-12-using-variables/clarify/ClarifyCode.gd" type="Script" id=2]
5 |
6 | [sub_resource type="AnimationNodeStateMachinePlayback" id=1]
7 |
8 | [node name="ClarifyCode" instance=ExtResource( 1 )]
9 | script = ExtResource( 2 )
10 |
11 | [node name="AnimationTree" parent="." index="3"]
12 | parameters/playback = SubResource( 1 )
13 |
14 | [node name="Camera2D" type="Camera2D" parent="." index="4"]
15 | current = true
16 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/DemoDrawingSquares.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | var size := 40.0
4 |
5 | onready var _turtle: DrawingTurtle = $DrawingTurtle
6 |
7 | func run():
8 | _turtle.reset()
9 | _turtle.position = Vector2.ZERO
10 | _turtle.move_forward(size)
11 | _turtle.turn_right(90)
12 | _turtle.move_forward(size)
13 | _turtle.turn_right(90)
14 | _turtle.move_forward(size)
15 | _turtle.turn_right(90)
16 | _turtle.move_forward(size)
17 | _turtle.turn_right(90)
18 |
19 | _turtle.play_draw_animation()
20 |
21 | var rect: Rect2 = _turtle.get_rect()
22 | _turtle.position = - rect.size / 2.0
23 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/display-energy/TestDisplayingEnergy.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | var node: Node
4 |
5 |
6 | func _prepare():
7 | node = _scene_root_viewport.get_child(0)
8 |
9 |
10 | func test_displayed_energy_matches_energy_value() -> String:
11 | var energy = node.get("energy")
12 | if not energy is int:
13 | return tr("The energy variable is not an int anymore. Did you change the energy value?")
14 |
15 | if not str(energy) in node.energy_label.text:
16 | return tr(
17 | "The value of the energy variable does not match the displayed text. Did you call the str() function?"
18 | )
19 | return ""
20 |
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/ui/SortableList.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-course-builder/ui/SortableList.gd" type="Script" id=1]
4 |
5 | [node name="SortableList" type="ScrollContainer"]
6 | anchor_right = 1.0
7 | anchor_bottom = 1.0
8 | follow_focus = true
9 | scroll_horizontal_enabled = false
10 | script = ExtResource( 1 )
11 | __meta__ = {
12 | "_edit_use_anchors_": false
13 | }
14 |
15 | [node name="Items" type="VBoxContainer" parent="."]
16 | margin_right = 1920.0
17 | size_flags_horizontal = 3
18 |
19 | [node name="Overlay" type="Control" parent="."]
20 | mouse_filter = 2
21 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/fixing_error/FixingError.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=4 format=2]
2 |
3 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-12-using-variables/fixing_error/FixingError.gd" type="Script" id=2]
5 |
6 | [sub_resource type="AnimationNodeStateMachinePlayback" id=1]
7 |
8 | [node name="FixingError" instance=ExtResource( 1 )]
9 | script = ExtResource( 2 )
10 |
11 | [node name="AnimationTree" parent="." index="3"]
12 | parameters/playback = SubResource( 1 )
13 |
14 | [node name="Camera2D" type="Camera2D" parent="." index="4"]
15 | current = true
16 |
--------------------------------------------------------------------------------
/course/lesson-16-2d-vectors/increase_scale/IncreaseScale.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=4 format=2]
2 |
3 | [ext_resource path="res://course/lesson-16-2d-vectors/increase_scale/IncreaseScale.gd" type="Script" id=1]
4 | [ext_resource path="res://course/common/Robot.tscn" type="PackedScene" id=2]
5 |
6 | [sub_resource type="AnimationNodeStateMachinePlayback" id=1]
7 |
8 | [node name="IncreaseScale" instance=ExtResource( 2 )]
9 | script = ExtResource( 1 )
10 |
11 | [node name="AnimationTree" parent="." index="3"]
12 | parameters/playback = SubResource( 1 )
13 |
14 | [node name="Camera2D" type="Camera2D" parent="." index="4"]
15 | current = true
16 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/turning_right/TurningRight.gd:
--------------------------------------------------------------------------------
1 | extends DrawingTurtle
2 |
3 |
4 | func _ready() -> void:
5 | if not is_connected("turtle_finished", self, "_complete_run"):
6 | connect("turtle_finished", self, "_complete_run")
7 |
8 |
9 | func _run():
10 | reset()
11 | draw_corner()
12 | play_draw_animation()
13 |
14 |
15 | # EXPORT draw_corner
16 | func draw_corner():
17 | move_forward(200)
18 | turn_right(90)
19 | move_forward(200)
20 | # /EXPORT draw_corner
21 |
22 |
23 | func _complete_run() -> void:
24 | yield(get_tree().create_timer(0.5), "timeout")
25 | Events.emit_signal("practice_run_completed")
26 |
--------------------------------------------------------------------------------
/course/lesson-21-strings/string_error/StringError.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree")
4 | onready var _label := find_node("Label")
5 |
6 |
7 | func _ready() -> void:
8 | _animation_tree.travel("idle")
9 |
10 |
11 | func _run() -> void:
12 | run()
13 | if robot_name is String:
14 | _label.text = robot_name
15 | yield(get_tree().create_timer(1.0), "timeout")
16 | _animation_tree.travel("saying_hi")
17 | Events.emit_signal("practice_run_completed")
18 |
19 |
20 | var robot_name = -1
21 |
22 | # EXPORT print_string
23 | func run():
24 | robot_name = "Robi"
25 | # /EXPORT print_string
26 |
--------------------------------------------------------------------------------
/ui/screens/practice/PracticeHint.gd:
--------------------------------------------------------------------------------
1 | tool
2 | class_name PracticeHint
3 | extends Revealer
4 |
5 | export(String, MULTILINE) var bbcode_text: String setget set_bbcode_text
6 |
7 | onready var _rich_text_label := $RichTextLabel as RichTextLabel
8 |
9 |
10 | func _notification(what: int) -> void:
11 | if what == NOTIFICATION_TRANSLATION_CHANGED:
12 | if is_instance_valid(_rich_text_label):
13 | _rich_text_label.bbcode_text = tr(bbcode_text)
14 |
15 |
16 | func set_bbcode_text(new_text: String) -> void:
17 | bbcode_text = new_text
18 | if not is_inside_tree():
19 | yield(self, "ready")
20 | _rich_text_label.bbcode_text = tr(bbcode_text)
21 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/visuals/RobotRace.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _robots := [$Robots/RunningRobotFrameDelta, $Robots/RunningRobotFrame]
4 | onready var _timer := $Timer
5 |
6 |
7 | func _ready() -> void:
8 | set_process(false)
9 |
10 |
11 | func run() -> void:
12 | reset()
13 | _timer.start()
14 | set_process(true)
15 |
16 |
17 | func _process(delta: float) -> void:
18 | for robot in _robots:
19 | robot.move(delta)
20 |
21 |
22 | func reset() -> void:
23 | set_process(false)
24 | _timer.stop()
25 | for robot in _robots:
26 | robot.reset()
27 |
28 |
29 | func _on_Timer_timeout() -> void:
30 | set_process(false)
31 |
--------------------------------------------------------------------------------
/course/lesson-17-while-loops/visuals/Robot.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | signal cell_changed
5 |
6 | var cell := Vector2(0, 0) setget set_cell, get_cell
7 | var cell_size := 96
8 | var grid_size_px := Vector2.ZERO setget set_grid_size_px
9 |
10 |
11 | func set_cell(new_cell: Vector2) -> void:
12 | cell = new_cell
13 | cell.x = min(cell.x, grid_size_px.x / cell_size - 1)
14 | position = cell * cell_size + Vector2(cell_size/2, 12) - grid_size_px / 2.0
15 | emit_signal("cell_changed")
16 |
17 |
18 | func get_cell() -> Vector2:
19 | return cell
20 |
21 |
22 | func set_grid_size_px(value: Vector2):
23 | grid_size_px = value
24 | set_cell(cell)
25 |
--------------------------------------------------------------------------------
/course/number_lessons.py:
--------------------------------------------------------------------------------
1 | import re
2 | import os
3 |
4 | regex_lesson_heading = re.compile(r"### Lesson ?(\d+)?:(.+)")
5 |
6 | this_directory = os.path.dirname(os.path.realpath(__file__))
7 | readme_file = os.path.join(this_directory, "README.md")
8 | output = []
9 | with open(readme_file, "r") as f:
10 | index = 1
11 | for line in f.readlines():
12 | match = regex_lesson_heading.match(line)
13 | if not match:
14 | output.append(line)
15 | else:
16 | output.append(f"### Lesson {index}:{match.group(2)}\n")
17 | index += 1
18 | with open(readme_file, "w") as f:
19 | f.writelines(output)
20 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/fixing_error/FixingError.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 |
4 | func _ready() -> void:
5 | set_process(false)
6 |
7 | # EXPORT clarify
8 | var angular_speed = 4
9 |
10 | func _process(delta):
11 | rotate(angular_speed * delta)
12 |
13 | func set_angular_speed(new_angular_speed):
14 | angular_speed = new_angular_speed
15 | # /EXPORT clarify
16 |
17 |
18 | func _run() -> void:
19 | reset()
20 | _process(0.0)
21 | set_process(true)
22 | yield(get_tree().create_timer(1.0), "timeout")
23 | Events.emit_signal("practice_run_completed")
24 |
25 |
26 | func reset() -> void:
27 | rotation = 0.0
28 | position = Vector2(300, 200)
29 | set_process(false)
30 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_hover.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 2
10 | border_width_top = 2
11 | border_width_right = 2
12 | border_width_bottom = 2
13 | border_color = Color( 0.960784, 0.980392, 0.980392, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 | shadow_color = Color( 0.0352941, 0.0392157, 0.129412, 0.290196 )
19 | shadow_offset = Vector2( 0, 4 )
20 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_normal.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | border_width_left = 2
10 | border_width_top = 2
11 | border_width_right = 2
12 | border_width_bottom = 2
13 | border_color = Color( 0.572549, 0.560784, 0.721569, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 | shadow_color = Color( 0.0352941, 0.0392157, 0.129412, 0.290196 )
19 | shadow_offset = Vector2( 0, 4 )
20 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_pressed.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0901961, 0.0941176, 0.188235, 1 )
9 | border_width_left = 2
10 | border_width_top = 2
11 | border_width_right = 2
12 | border_width_bottom = 2
13 | border_color = Color( 0.14902, 0.776471, 0.968627, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 | shadow_color = Color( 0.0352941, 0.0392157, 0.129412, 0.290196 )
19 | shadow_offset = Vector2( 0, 4 )
20 |
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/ui/QuizInputField.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends Control
3 |
4 | enum TypeOptions { STRING, FLOAT, INT }
5 |
6 | var _quiz: QuizInputField
7 |
8 | onready var _correct_answer := $HBoxContainer/LineEdit as LineEdit
9 |
10 |
11 | func _ready() -> void:
12 | _correct_answer.connect("text_changed", self, "_on_correct_answer_text_changed")
13 |
14 |
15 | func setup(quiz: QuizInputField) -> void:
16 | _quiz = quiz
17 | if not is_inside_tree():
18 | yield(self, "ready")
19 |
20 | _correct_answer.text = str(quiz.valid_answer)
21 |
22 |
23 | func _on_correct_answer_text_changed(new_text: String) -> void:
24 | _quiz.valid_answer = new_text
25 | _quiz.emit_changed()
26 |
--------------------------------------------------------------------------------
/ui/theme/button_outline_normal_muted.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="StyleBoxFlat" format=2]
2 |
3 | [resource]
4 | content_margin_left = 10.0
5 | content_margin_right = 10.0
6 | content_margin_top = 12.0
7 | content_margin_bottom = 12.0
8 | bg_color = Color( 0.0784314, 0.0823529, 0.164706, 1 )
9 | border_width_left = 2
10 | border_width_top = 2
11 | border_width_right = 2
12 | border_width_bottom = 2
13 | border_color = Color( 0.290196, 0.294118, 0.388235, 1 )
14 | corner_radius_top_left = 8
15 | corner_radius_top_right = 8
16 | corner_radius_bottom_right = 8
17 | corner_radius_bottom_left = 8
18 | shadow_color = Color( 0.0352941, 0.0392157, 0.129412, 0.290196 )
19 | shadow_offset = Vector2( 0, 4 )
20 |
--------------------------------------------------------------------------------
/course/lesson-16-2d-vectors/increase_scale/IncreaseScale.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree")
4 |
5 |
6 | var level = 1
7 | var max_health = 100
8 |
9 |
10 | func _ready():
11 | reset()
12 |
13 |
14 | # EXPORT level_scale
15 | func level_up():
16 | level += 1
17 | max_health *= 1.1
18 | scale += Vector2(0.2, 0.2)
19 | # /EXPORT level_scale
20 |
21 | func _run():
22 | reset()
23 | for i in range(2):
24 | level_up()
25 | _animation_tree.travel("level")
26 | yield(_animation_tree, "animation_finished")
27 | Events.emit_signal("practice_run_completed")
28 |
29 | func reset():
30 | scale = Vector2.ONE
31 | max_health = 100
32 | level = 1
33 |
--------------------------------------------------------------------------------
/course/lesson-22-functions-return-values/visuals/grid_demo/GridMapping.gd:
--------------------------------------------------------------------------------
1 | extends MarginContainer
2 |
3 | var cell_size := Vector2.ONE * 120
4 |
5 | onready var label := $VBoxContainer/Label as Label
6 | onready var grid := $VBoxContainer/CenterContainer/GridContainer as GridContainer
7 |
8 |
9 | func _ready() -> void:
10 | var index := 0
11 | for cell in grid.get_children():
12 | var coords = Vector2(index % grid.columns, floor(index / grid.columns))
13 | cell.connect("mouse_entered", self, "update_position", [coords])
14 | cell.cell = coords
15 | index += 1
16 |
17 |
18 | func update_position(cell: Vector2):
19 | label.text = "Cell world position: " + str(cell * cell_size + cell_size / 2)
20 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/ExampleTurtleMoveAndRotate.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 |
5 | [sub_resource type="GDScript" id=1]
6 | script/source = "extends Node2D
7 |
8 | func run():
9 | var drawing_turtle = $DrawingTurtle as DrawingTurtle
10 | drawing_turtle.reset()
11 | drawing_turtle.position.x = -100
12 | drawing_turtle.move_forward(200)
13 | drawing_turtle.turn_right(90)
14 | drawing_turtle.play_draw_animation()
15 |
16 | "
17 |
18 | [node name="ExampleTurtleMoveAndRotate" type="Node2D"]
19 | script = SubResource( 1 )
20 |
21 | [node name="DrawingTurtle" parent="." instance=ExtResource( 1 )]
22 |
--------------------------------------------------------------------------------
/ui/icons/radiomark_empty.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
24 |
--------------------------------------------------------------------------------
/resources/ContentBlock.gd:
--------------------------------------------------------------------------------
1 | # Represents one content block to display in a lesson. It can feature text
2 | # alone, text and something visual (picture, interactive scene) side-by-side, or
3 | # just something visual.
4 | class_name ContentBlock
5 | extends Resource
6 |
7 | enum Type { PLAIN, NOTE }
8 |
9 | # Uniquely identifies the content block resource.
10 | export var content_id := ""
11 |
12 | export var title := ""
13 | export var type: int = Type.PLAIN
14 | export (String, MULTILINE) var text := ""
15 |
16 | export (String, FILE) var visual_element_path := ""
17 | # If true, the visual element and text's order should be swapped.
18 | export var reverse_blocks := false
19 |
20 | export var has_separator := false
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/course/lesson-19-creating-arrays/selecting-units/TestSelectingUnits.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | const ROBOT_CELL := Vector2(5, 3)
4 |
5 | var game_board: Node2D
6 |
7 |
8 | func _prepare() -> void:
9 | game_board = _scene_root_viewport.get_child(0)
10 |
11 |
12 | func test_all_units_are_selected() -> String:
13 | for cell in game_board.units:
14 | if not cell in game_board.selected_units:
15 | return tr("Unit in cell %s not selected.") % cell
16 | return ""
17 |
18 |
19 | func test_only_units_are_selected() -> String:
20 | for cell in game_board.selected_units:
21 | if not cell in game_board.units:
22 | return tr("Trying to select a cell that doesn't contain a unit: %s.") % cell
23 | return ""
24 |
--------------------------------------------------------------------------------
/course/lesson-21-strings/string_array/TestsStringArray.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | var desired_combo = ["jab", "jab", "uppercut"]
4 | var robot: Node2D
5 |
6 | func _prepare() -> void:
7 | robot = _scene_root_viewport.get_child(0)
8 |
9 |
10 | func test_use_for_loop() -> String:
11 | if not "for" in _slice.current_text:
12 | return "Your code has no for loop. You need to use a for loop to complete this practice, even if there are other solutions!"
13 | return ""
14 |
15 |
16 | func test_robot_combo_is_correct() -> String:
17 | var robot_combo = robot.get("combo")
18 | if not robot_combo == desired_combo:
19 | return "The combo isn't correct. Did you use the right actions in the right order?"
20 | return ""
21 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/drawing_corners/DrawingCorners.gd:
--------------------------------------------------------------------------------
1 | extends DrawingTurtle
2 |
3 | func _run():
4 | reset()
5 | draw_corner(240)
6 | turn_left(90)
7 | jump(-240, -140)
8 | draw_corner(120)
9 | play_draw_animation()
10 |
11 |
12 | # EXPORT draw_corner
13 | func draw_corner(length):
14 | move_forward(length)
15 | turn_right(90)
16 | move_forward(length)
17 | # /EXPORT draw_corner
18 |
19 |
20 | func _ready() -> void:
21 | if not is_connected("turtle_finished", self, "_complete_run"):
22 | connect("turtle_finished", self, "_complete_run")
23 |
24 |
25 | func _complete_run() -> void:
26 | yield(get_tree().create_timer(0.5), "timeout")
27 | Events.emit_signal("practice_run_completed")
28 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/ExampleRotateFunction.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="Control" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 120 )
9 | size_flags_horizontal = 3
10 |
11 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
12 | anchor_right = 0.0
13 | anchor_bottom = 0.0
14 | margin_left = 7.0
15 | margin_top = 7.0
16 | margin_right = 607.0
17 | margin_bottom = 113.0
18 | rect_min_size = Vector2( 600, 100 )
19 | text = "func rotate(radians):
20 | set_rotation(get_rotation() + radians)"
21 |
--------------------------------------------------------------------------------
/course/lesson-1-what-code-is-like/ThreeCodeExamples.gd:
--------------------------------------------------------------------------------
1 | extends Control
2 |
3 | const COLOR_KEYWORD := Color(1, 0.094118, 0.321569)
4 | const COLOR_QUOTES := Color(1, 0.960784, 0.25098)
5 | const COLOR_COMMENTS := Color(0.290196, 0.294118, 0.388235)
6 |
7 | onready var _python_code := $PythonCodeExample as TextEdit
8 | onready var _js_code := $JavascriptCodeExample as TextEdit
9 |
10 |
11 | func _ready() -> void:
12 | _python_code.add_color_region("#", "\n", COLOR_COMMENTS, true)
13 | _js_code.add_color_region("//", "\n", COLOR_COMMENTS, true)
14 |
15 | for key in ["if", "function"]:
16 | _js_code.add_keyword_color(key, COLOR_KEYWORD)
17 | for key in ["if", "def"]:
18 | _python_code.add_keyword_color(key, COLOR_KEYWORD)
19 |
--------------------------------------------------------------------------------
/course/lesson-10-the-game-loop/visuals/ExampleProcessFunction.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="ExampleProcessFunctionBody" type="PanelContainer"]
6 | margin_right = 288.0
7 | margin_bottom = 178.0
8 | rect_min_size = Vector2( 320, 200 )
9 | __meta__ = {
10 | "_edit_use_anchors_": false
11 | }
12 |
13 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
14 | anchor_right = 0.0
15 | anchor_bottom = 0.0
16 | margin_left = 7.0
17 | margin_top = 7.0
18 | margin_right = 327.0
19 | margin_bottom = 207.0
20 | rect_min_size = Vector2( 320, 200 )
21 | text = "func _process(delta):
22 | rotate(0.05)"
23 |
--------------------------------------------------------------------------------
/course/lesson-18-for-loops/for_move/TestPracticeBoardFor.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | var game_board: Node2D
4 | var robot: Node2D
5 |
6 | func _prepare() -> void:
7 | game_board = _scene_root_viewport.get_child(0)
8 |
9 |
10 | func test_robot_gets_to_bottom_of_board() -> String:
11 | if not is_equal_approx(game_board.cell.y, game_board.board_size.y - 1):
12 | return tr("The robot isn't at the bottom of the game board. Did you increase its cell.y coordinate?")
13 | return ""
14 |
15 |
16 | func test_use_for_loop() -> String:
17 | if not "for" in _slice.current_text:
18 | return tr("Your code has no for loop. You need to use a for loop to complete this practice, even if there are other solutions!")
19 | return ""
20 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/ExampleRotate.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="Control" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 100 )
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
15 | anchor_right = 0.0
16 | anchor_bottom = 0.0
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 607.0
20 | margin_bottom = 107.0
21 | rect_min_size = Vector2( 600, 100 )
22 | text = "rotate(0.5)"
23 | draw_spaces = true
24 |
--------------------------------------------------------------------------------
/addons/gdscript-slice-exporter/collections/SceneProperties.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends Resource
3 | class_name SceneProperties
4 |
5 | export var scene: PackedScene
6 |
7 | export var viewport_size: Vector2 = Vector2(
8 | float(ProjectSettings.get_setting("display/window/size/width")),
9 | float(ProjectSettings.get_setting("display/window/size/height"))
10 | )
11 |
12 |
13 | func get_storage_path() -> String:
14 | return scene.resource_path.get_basename() + ".live-editor"
15 |
16 |
17 | func get_save_name() -> String:
18 | if scene:
19 | var file_name := scene.resource_path.get_file()
20 | return file_name
21 | return ''
22 |
23 |
24 | func _to_string() -> String:
25 | return "(%s.tscn)" % [scene.resource_path.get_file().get_basename()]
26 |
--------------------------------------------------------------------------------
/course/lesson-17-while-loops/while_move/TestPracticeBoardWhile.gd:
--------------------------------------------------------------------------------
1 | extends PracticeTester
2 |
3 | var game_board: Node2D
4 | var robot: Node2D
5 |
6 | func _prepare() -> void:
7 | game_board = _scene_root_viewport.get_child(0)
8 |
9 |
10 | func test_robot_gets_to_bottom_of_board() -> String:
11 | if not is_equal_approx(game_board.cell.y, game_board.board_size.y - 1):
12 | return tr("The robot isn't at the bottom of the game board. Did you increase its cell.y coordinate?")
13 | return ""
14 |
15 |
16 | func test_use_while_loop() -> String:
17 | if not "while" in _slice.current_text:
18 | return tr("Your code has no while loop. You need to use a while loop to complete this practice, even if there are other solutions!")
19 | return ""
20 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_rectangle/DrawingRectangle.gd:
--------------------------------------------------------------------------------
1 | extends DrawingTurtle
2 |
3 |
4 | func _ready() -> void:
5 | if not is_connected("turtle_finished", self, "_complete_run"):
6 | connect("turtle_finished", self, "_complete_run")
7 |
8 |
9 | func _run():
10 | reset()
11 | draw_rectangle()
12 | play_draw_animation()
13 |
14 |
15 | # EXPORT draw_rectangle
16 | func draw_rectangle():
17 | move_forward(200)
18 | turn_right(90)
19 | move_forward(120)
20 | turn_right(90)
21 | move_forward(200)
22 | turn_right(90)
23 | move_forward(120)
24 | # /EXPORT draw_rectangle
25 |
26 |
27 | func _complete_run() -> void:
28 | yield(get_tree().create_timer(0.5), "timeout")
29 | Events.emit_signal("practice_run_completed")
30 |
--------------------------------------------------------------------------------
/course/lesson-7-member-variables/ExampleHealthVariableDefinition.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="ExampleHealthVariableDefinition" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 100 )
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
15 | anchor_right = 0.0
16 | anchor_bottom = 0.0
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 607.0
20 | margin_bottom = 107.0
21 | rect_min_size = Vector2( 600, 100 )
22 | text = "var health = 100"
23 |
--------------------------------------------------------------------------------
/course/lesson-23-append-to-arrays/visuals/ExampleRestaurantOrders.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://ui/components/RunnableCodeExample.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://course/lesson-23-append-to-arrays/visuals/OrderMeals.tscn" type="PackedScene" id=2]
5 |
6 | [node name="PrintForLoop" type="PanelContainer"]
7 | margin_right = 14.0
8 | margin_bottom = 14.0
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="RunnableCodeExample" parent="." instance=ExtResource( 1 )]
15 | margin_left = 7.0
16 | margin_top = 7.0
17 | margin_right = 607.0
18 | margin_bottom = 407.0
19 | rect_min_size = Vector2( 600, 400 )
20 | scene = ExtResource( 2 )
21 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/ExampleFunctionBody.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="ExampleFunctionBody" type="PanelContainer"]
6 | margin_right = 288.0
7 | margin_bottom = 178.0
8 | rect_min_size = Vector2( 320, 200 )
9 | __meta__ = {
10 | "_edit_use_anchors_": false
11 | }
12 |
13 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
14 | anchor_right = 0.0
15 | anchor_bottom = 0.0
16 | margin_left = 7.0
17 | margin_top = 7.0
18 | margin_right = 327.0
19 | margin_bottom = 207.0
20 | rect_min_size = Vector2( 320, 200 )
21 | text = "func name():
22 | instruction_1
23 | instruction_2
24 | instruction_3"
25 |
--------------------------------------------------------------------------------
/course/lesson-5-your-first-function/drawing_squares/DrawingSquares.gd:
--------------------------------------------------------------------------------
1 | extends DrawingTurtle
2 |
3 |
4 | func _ready() -> void:
5 | if not is_connected("turtle_finished", self, "_complete_run"):
6 | connect("turtle_finished", self, "_complete_run")
7 |
8 |
9 | func _run():
10 | reset()
11 | draw_square()
12 | play_draw_animation()
13 |
14 |
15 | # EXPORT draw_square
16 | func draw_square():
17 | move_forward(200)
18 | turn_right(90)
19 | move_forward(200)
20 | turn_right(90)
21 | move_forward(200)
22 | turn_right(90)
23 | move_forward(200)
24 | turn_right(90)
25 | # /EXPORT draw_square
26 |
27 |
28 | func _complete_run() -> void:
29 | yield(get_tree().create_timer(0.5), "timeout")
30 | Events.emit_signal("practice_run_completed")
31 |
--------------------------------------------------------------------------------
/course/lesson-14-multiplying/increase_max_health/IncreaseMaxHealth.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | onready var _animation_tree := find_node("AnimationTree") as AnimationTree
4 | onready var _health_bar := find_node("CustomHealthBar")
5 |
6 |
7 | # EXPORT level
8 | var level = 1
9 | var max_health = 100
10 |
11 | func level_up():
12 | level += 1
13 | max_health *= 1.1
14 | # /EXPORT level
15 | _health_bar.set_max_health(max_health)
16 |
17 | func _run():
18 | reset()
19 | for i in range(2):
20 | level_up()
21 | _animation_tree.travel("level")
22 | yield(_animation_tree, "animation_finished")
23 | Events.emit_signal("practice_run_completed")
24 |
25 | func reset():
26 | level = 1
27 | max_health = 100
28 | _health_bar.set_max_health(max_health)
29 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/drawing_bigger_rectangle/DrawingBiggerRectangle.gd:
--------------------------------------------------------------------------------
1 | extends DrawingTurtle
2 |
3 |
4 | func _ready() -> void:
5 | if not is_connected("turtle_finished", self, "_complete_run"):
6 | connect("turtle_finished", self, "_complete_run")
7 |
8 |
9 | func _run():
10 | reset()
11 | draw_rectangle()
12 | play_draw_animation()
13 |
14 |
15 | # EXPORT draw_rectangle
16 | func draw_rectangle():
17 | move_forward(220)
18 | turn_right(90)
19 | move_forward(260)
20 | turn_right(90)
21 | move_forward(220)
22 | turn_right(90)
23 | move_forward(260)
24 | # /EXPORT draw_rectangle
25 |
26 |
27 | func _complete_run() -> void:
28 | yield(get_tree().create_timer(0.5), "timeout")
29 | Events.emit_signal("practice_run_completed")
30 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/ExampleDrawSquareDefinition1.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="Control" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 120 )
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
15 | anchor_right = 0.0
16 | anchor_bottom = 0.0
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 607.0
20 | margin_bottom = 113.0
21 | rect_min_size = Vector2( 600, 100 )
22 | text = "func draw_square(length):
23 | #..."
24 |
--------------------------------------------------------------------------------
/course/lesson-6-multiple-function-parameters/visuals/ExampleDrawSquareDefinition2.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="Control" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 120 )
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="GDScriptCodeExample2" parent="." instance=ExtResource( 1 )]
15 | anchor_right = 0.0
16 | anchor_bottom = 0.0
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 607.0
20 | margin_bottom = 113.0
21 | rect_min_size = Vector2( 600, 100 )
22 | text = "func draw_square(side_length):
23 | #..."
24 |
--------------------------------------------------------------------------------
/course/lesson-26-looping-over-dictionaries/ExampleGameBoard.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-26-looping-over-dictionaries/GameBoard.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://ui/components/RunnableCodeExample.tscn" type="PackedScene" id=2]
5 |
6 | [node name="Panel" type="PanelContainer"]
7 | margin_right = 1047.0
8 | margin_bottom = 298.0
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="RunnableCodeExample" parent="." instance=ExtResource( 2 )]
15 | margin_left = 7.0
16 | margin_top = 7.0
17 | margin_right = 1040.0
18 | margin_bottom = 307.0
19 | rect_min_size = Vector2( 0, 300 )
20 | scene = ExtResource( 1 )
21 | run_button_label = "run()"
22 |
--------------------------------------------------------------------------------
/addons/ColorPickerPresets/ColorPickerPresets.gd:
--------------------------------------------------------------------------------
1 | tool
2 | extends EditorPlugin
3 |
4 | const PRESETS_FILENAME := 'presets.hex'
5 |
6 |
7 | func _enter_tree() -> void:
8 | var presets := PoolColorArray()
9 | var presets_raw := PoolStringArray()
10 | var presets_file := File.new()
11 | var presets_path: String = get_script().resource_path.get_base_dir().plus_file(PRESETS_FILENAME)
12 |
13 | if presets_file.open(presets_path, File.READ) == OK:
14 | presets_raw = presets_file.get_as_text().split("\n")
15 | presets_file.close()
16 |
17 | for hex in presets_raw:
18 | if hex.is_valid_html_color():
19 | presets.push_back(Color(hex))
20 |
21 | get_editor_interface().get_editor_settings().set_project_metadata(
22 | "color_picker", "presets", presets
23 | )
24 |
--------------------------------------------------------------------------------
/addons/gdscript-course-builder/ui/SearchBar.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-course-builder/ui/SearchBar.gd" type="Script" id=1]
4 |
5 | [node name="SearcnBar" type="HBoxContainer"]
6 | margin_right = 258.0
7 | margin_bottom = 24.0
8 | script = ExtResource( 1 )
9 | __meta__ = {
10 | "_edit_use_anchors_": false
11 | }
12 |
13 | [node name="LineEdit" type="LineEdit" parent="."]
14 | margin_right = 200.0
15 | margin_bottom = 24.0
16 | rect_min_size = Vector2( 200, 0 )
17 | editable = false
18 | placeholder_text = "Search"
19 | caret_blink = true
20 |
21 | [node name="NextButton" type="Button" parent="."]
22 | margin_left = 204.0
23 | margin_right = 258.0
24 | margin_bottom = 24.0
25 | disabled = true
26 | text = "Search"
27 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/visuals/DemoRobotRace.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://course/lesson-11-time-delta/visuals/RobotRace.tscn" type="PackedScene" id=1]
4 | [ext_resource path="res://ui/components/RunnableCodeExample.tscn" type="PackedScene" id=2]
5 |
6 | [node name="Control" type="PanelContainer"]
7 | anchor_right = 1.0
8 | anchor_bottom = 1.0
9 | margin_right = -1220.0
10 | margin_bottom = -560.0
11 | rect_min_size = Vector2( 700, 420 )
12 | __meta__ = {
13 | "_edit_use_anchors_": false
14 | }
15 |
16 | [node name="RunnableCodeExample" parent="." instance=ExtResource( 2 )]
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 693.0
20 | margin_bottom = 513.0
21 | scene = ExtResource( 1 )
22 | run_button_label = "Play"
23 |
--------------------------------------------------------------------------------
/course/lesson-12-using-variables/visuals/ExampleUnclear.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.tscn" type="PackedScene" id=1]
4 |
5 | [node name="Control" type="PanelContainer"]
6 | margin_right = 614.0
7 | margin_bottom = 114.0
8 | rect_min_size = Vector2( 0, 100 )
9 | size_flags_horizontal = 3
10 | __meta__ = {
11 | "_edit_use_anchors_": false
12 | }
13 |
14 | [node name="GDScriptCodeExample" parent="." instance=ExtResource( 1 )]
15 | anchor_right = 0.0
16 | anchor_bottom = 0.0
17 | margin_left = 7.0
18 | margin_top = 7.0
19 | margin_right = 607.0
20 | margin_bottom = 117.0
21 | rect_min_size = Vector2( 600, 110 )
22 | text = "func _process(delta):
23 | rotate(4 * delta)"
24 | min_size = Vector2( 600, 110 )
25 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/visuals/CodeHealthVar.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.gd" type="Script" id=1]
4 |
5 | [node name="GDScriptCodeExample" type="TextEdit"]
6 | anchor_right = 1.0
7 | margin_right = -1620.0
8 | margin_bottom = 60.0
9 | rect_min_size = Vector2( 300, 80 )
10 | size_flags_horizontal = 3
11 | text = "var health = 100"
12 | readonly = true
13 | syntax_highlighting = true
14 | show_line_numbers = true
15 | draw_tabs = true
16 | draw_spaces = true
17 | context_menu_enabled = false
18 | shortcut_keys_enabled = false
19 | smooth_scrolling = true
20 | wrap_enabled = true
21 | caret_block_mode = true
22 | caret_blink = true
23 | script = ExtResource( 1 )
24 | min_size = Vector2( 300, 80 )
25 |
--------------------------------------------------------------------------------
/course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.live-editor/scripts/DefineHealthVar.gd.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/ScriptProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-8-defining-variables/define-health-variable/DefineHealthVar.gd" type="Script" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | nodes_paths = [ NodePath("") ]
9 | script_file = ExtResource( 2 )
10 | original_script = "extends Control
11 |
12 | # EXPORT health
13 | var health = 100
14 | # /EXPORT health
15 |
16 | func _ready():
17 | yield(get_tree().create_timer(0.5), \"timeout\")
18 | Events.emit_signal(\"practice_run_completed\")
19 | "
20 |
--------------------------------------------------------------------------------
/course/lesson-28-specifying-types/CodeTryReplaceCellSize.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.gd" type="Script" id=1]
4 |
5 | [node name="GDScriptCodeExample" type="TextEdit"]
6 | anchor_right = 1.0
7 | margin_right = -1620.0
8 | margin_bottom = 60.0
9 | rect_min_size = Vector2( 300, 80 )
10 | size_flags_horizontal = 3
11 | text = "cell_size = 50"
12 | readonly = true
13 | syntax_highlighting = true
14 | show_line_numbers = true
15 | draw_tabs = true
16 | draw_spaces = true
17 | context_menu_enabled = false
18 | shortcut_keys_enabled = false
19 | smooth_scrolling = true
20 | wrap_enabled = true
21 | caret_block_mode = true
22 | caret_blink = true
23 | script = ExtResource( 1 )
24 | min_size = Vector2( 300, 80 )
25 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/display-energy/DisplayingEnergy.gd:
--------------------------------------------------------------------------------
1 | extends Node
2 |
3 | onready var bar := $VBoxContainer/HBoxContainer/Bar as ProgressBar
4 |
5 | onready var energy_label := $VBoxContainer/HBoxContainer/Bar/EnergyLabel as Label
6 | onready var shadow := $VBoxContainer/HBoxContainer/Bar/EnergyLabel/Shadow as Label
7 |
8 |
9 | func _run():
10 | run()
11 | yield(get_tree().create_timer(0.5), "timeout")
12 | Events.emit_signal("practice_run_completed")
13 |
14 |
15 | # EXPORT run
16 | var energy = 80
17 |
18 | func run():
19 | display_energy(str(energy))
20 | # /EXPORT run
21 | bar.value = energy
22 |
23 |
24 | func display_energy(value):
25 | if not value is String:
26 | return
27 | energy_label.text = "%s / 100" % value
28 | shadow.text = energy_label.text
29 |
--------------------------------------------------------------------------------
/course/lesson-11-time-delta/visuals/DemoRotatingSpriteFrame.gd:
--------------------------------------------------------------------------------
1 | extends Node2D
2 |
3 | const _times := preload("./DemoRotatingTime.gd")._times;
4 | var _index := 0
5 |
6 | onready var _timer := $Timer as Timer
7 | onready var _sprite := $DemoRotateSprite as Node2D
8 | onready var _label_rotation := $LabelRotation as Label
9 | onready var _label_frame := $LabelFrame as Label
10 |
11 | func _ready():
12 | _on_Timer_timeout()
13 |
14 | func _on_Timer_timeout():
15 | var rotation_amount := 0.2;
16 | var frame_speed:float = _times[_index]
17 | _sprite.rotate(rotation_amount)
18 | _timer.start(frame_speed)
19 |
20 | _label_rotation.text = "rotation: %s"%[rotation_amount]
21 | _label_frame.text = "frame speed: %s"%[frame_speed]
22 |
23 | _index = wrapi(_index + 1, 0, _times.size() - 1)
24 |
--------------------------------------------------------------------------------
/course/lesson-13-conditions/using_conditions/UsingConditions.live-editor/scripts/WelcomeToTheApp.gd.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="Resource" load_steps=3 format=2]
2 |
3 | [ext_resource path="res://addons/gdscript-slice-exporter/collections/ScriptProperties.gd" type="Script" id=1]
4 | [ext_resource path="res://course/lesson-1-what-code-is-like/first_practice/WelcomeToTheApp.gd" type="Script" id=2]
5 |
6 | [resource]
7 | script = ExtResource( 1 )
8 | nodes_paths = [ NodePath("WelcomeToTheApp") ]
9 | script_file = ExtResource( 2 )
10 | original_script = "extends Node2D
11 |
12 | # EXPORT welcome_to_app
13 | func _ready() -> void:
14 | print(\"Welcome!\")
15 | # /EXPORT welcome_to_app
16 | yield(get_tree().create_timer(1.0), \"timeout\")
17 | Events.emit_signal(\"practice_run_completed\")
18 | "
19 |
--------------------------------------------------------------------------------
/course/lesson-4-drawing-a-rectangle/visuals/DemoDrawingMoveForward.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=2]
2 |
3 | [ext_resource path="res://game_demos/DrawingTurtle.tscn" type="PackedScene" id=1]
4 |
5 | [sub_resource type="GDScript" id=1]
6 | script/source = "extends Node2D
7 |
8 | var length := 200
9 |
10 | onready var _turtle: DrawingTurtle = $DrawingTurtle
11 |
12 |
13 | func run() -> void:
14 | _turtle.reset()
15 | _turtle.position = Vector2.ZERO
16 | _turtle.move_forward(length)
17 |
18 | _turtle.play_draw_animation()
19 |
20 | var rect := _turtle.get_rect()
21 | _turtle.position = -rect.size / 2.0
22 | "
23 |
24 | [node name="DemoDrawingMoveForward" type="Node2D"]
25 | script = SubResource( 1 )
26 |
27 | [node name="DrawingTurtle" parent="." instance=ExtResource( 1 )]
28 |
--------------------------------------------------------------------------------
/ui/components/popups/ReportFormPopup.gd:
--------------------------------------------------------------------------------
1 | extends ColorRect
2 |
3 | onready var _confirm_button := $PanelContainer/Column/Margin/Column/ConfirmButton as Button
4 | onready var _summary_label := $PanelContainer/Column/Margin/Column/Summary as RichTextLabel
5 |
6 |
7 | func _ready():
8 | _confirm_button.connect("pressed", self, "hide")
9 | _summary_label.connect("meta_clicked", self, "_on_meta_clicked")
10 | connect("visibility_changed", self, "_on_visibility_changed")
11 |
12 |
13 | func _on_meta_clicked(data) -> void:
14 | if typeof(data) == TYPE_STRING:
15 | if data.begins_with("https://"):
16 | OS.shell_open(data)
17 | elif data == "download":
18 | Log.download()
19 |
20 |
21 | func _on_visibility_changed() -> void:
22 | if visible:
23 | _confirm_button.grab_focus()
24 |
--------------------------------------------------------------------------------
/course/lesson-23-append-to-arrays/visuals/CodeAddOrder.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.gd" type="Script" id=1]
4 |
5 | [node name="GDScriptCodeExample" type="TextEdit"]
6 | anchor_right = 1.0
7 | margin_right = -1620.0
8 | margin_bottom = 60.0
9 | rect_min_size = Vector2( 300, 80 )
10 | size_flags_horizontal = 3
11 | text = "add_order(\"cheese sandwich\")"
12 | readonly = true
13 | syntax_highlighting = true
14 | show_line_numbers = true
15 | draw_tabs = true
16 | draw_spaces = true
17 | context_menu_enabled = false
18 | shortcut_keys_enabled = false
19 | smooth_scrolling = true
20 | wrap_enabled = true
21 | caret_block_mode = true
22 | caret_blink = true
23 | script = ExtResource( 1 )
24 | min_size = Vector2( 300, 80 )
25 |
--------------------------------------------------------------------------------
/course/lesson-27-value-types/visuals/CodeAddIntToString.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=2 format=2]
2 |
3 | [ext_resource path="res://course/common/GDScriptCodeExample.gd" type="Script" id=1]
4 |
5 | [node name="GDScriptCodeExample" type="TextEdit"]
6 | anchor_right = 1.0
7 | margin_right = -1620.0
8 | margin_bottom = 60.0
9 | rect_min_size = Vector2( 300, 80 )
10 | size_flags_horizontal = 3
11 | text = "display(\"Health: \" + health)"
12 | readonly = true
13 | syntax_highlighting = true
14 | show_line_numbers = true
15 | draw_tabs = true
16 | draw_spaces = true
17 | context_menu_enabled = false
18 | shortcut_keys_enabled = false
19 | smooth_scrolling = true
20 | wrap_enabled = true
21 | caret_block_mode = true
22 | caret_blink = true
23 | script = ExtResource( 1 )
24 | min_size = Vector2( 300, 80 )
25 |
--------------------------------------------------------------------------------