├── 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 | 12 | 14 | 16 | 22 | 23 | 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 | --------------------------------------------------------------------------------