<!DOCTYPE html> <html class="theme-dark" lang="en"> <head> <base href="https://static.luevano.xyz/"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Test page -- Luévano's Site</title> <meta name="description" content="Test page."/> <link rel="alternate" type="application/rss+xml" href="https://blog.luevano.xyz/rss.xml" title="Luévano's Blog RSS"> <link rel="alternate" type="application/rss+xml" href="https://art.luevano.xyz/rss.xml" title="Luévano's Art RSS"> <link rel="icon" href="images/icons/favicon.ico"> <!-- general style --> <link rel="stylesheet" type="text/css" href="css/style.css"> <link rel="stylesheet" type="text/css" href="fork-awesome/css/fork-awesome.min.css"> <link rel="stylesheet" type="text/css" href="font-awesome/css/all.min.css"> <!-- highlight support for code blocks --> <script type="text/javascript" src="hl/highlight.min.js"></script> <!-- Specific to GDScript --> <script type="text/javascript" src="hl/languages/gdscript.min.js"></script> <script type="text/javascript"> hljs.initHighlightingOnLoad(); // hljs.initLineNumbersOnLoad(); </script> <!-- theme related --> <script type="text/javascript" src="scripts/theme.js"></script> <link id="theme-css" rel="stylesheet" type="text/css" href="css/theme.css"> <link id="code-theme-css" rel="stylesheet" type="text/css" href="hl/styles/nord.min.css"> </head> <body> <header> <nav> <ul> <li> <a href="https://luevano.xyz/"><i class="fas fa-home" alt="Home"></i><span>Home</span></a> </li> <li> <a href="https://blog.luevano.xyz/"><i class="fas fa-book-open" alt="Blog"></i><span>Blog</span></a> </li> <li> <a href="https://art.luevano.xyz/"><i class="fas fa-paint-brush" alt="Art"></i><span>Art</span></a> </li> <li><i class="fab fa-git" alt="Git"></i><span>Git</span> <ul> <li><a href="https://git.luevano.xyz/" target="_blank"><i class="fab fa-git-alt" alt="Git-alt"></i></a></li> <li><a href="https://github.com/luevano" target="_blank"><i class="fab fa-github" alt="Github"></i></a></li> <li><a href="https://gitlab.com/dluevano" target="_blank"><i class="fab fa-gitlab" alt="Gitlab"></i></a></li> </ul> </li> <li><i class="fas fa-box-open" alt="Stuff"></i><span>Stuff</span> <ul> <li><a href="https://gb.luevano.xyz/"><i class="fas fa-gamepad" alt="Gameboy"></i><span>Gameboy</span></a></li> </ul> </li> </ul> </nav> <button class="theme-switcher" onclick="toggleTheme()"><i class="fas fa-moon"></i><i class="fas fa-sun"></i></button> </header> <main> <h1> Test page </h1> <div class="art-grid"> <img class="wide" src="images/gifs/contact_info_1.gif"> <img src="images/gifs/dollar_sign_spin_1.gif"> <img class="tall" src="images/gifs/head_talking_1_trans.gif"> <img class="wide tall" src="images/gifs/stars_1.gif"> <img src="images/gifs/under_construction_1.gif"> <img src="images/gifs/under_construction_2.gif"> </div> <pre><code class="language-gdscript">class_name Player extends KinematicBody2D signal died export(float, 1.0, 1000.0, 1.0) var SPEED: float = 180.0 export(float, 0.01, 100.0, 0.01) var ROT_SPEED: float = 10.0 export(float, 1.0, 1000.0, 1.0) var JUMP_VELOCITY: float = 380.0 export(float, 1.0, 100.0, 1.0) var DEATH_JUMP_VELOCITY: float = 250.0 onready var sprite: AnimatedSprite = $Sprite onready var jump_sound: AudioStreamPlayer = $JumpSound onready var hit_sound: AudioStreamPlayer = $HitSound onready var dead_sound: AudioStreamPlayer = $DeadSound var gravity: float = 10 * ProjectSettings.get_setting("physics/2d/default_gravity") var velocity: Vector2 = Vector2.ZERO var last_collision: KinematicCollision2D var dead: bool = false func _physics_process(delta: float) -> void: velocity.x = SPEED velocity.y += gravity * delta if Input.is_action_just_pressed("jump") and not dead: velocity.y = -JUMP_VELOCITY jump_sound.play() if velocity.y < 0.0: sprite.play() if rotation > -PI/8: rotate(-0.05 * ROT_SPEED) else: _stop_sprite() if rotation < PI/2: rotate(0.01 * ROT_SPEED) # maybe can be done with move_and_collide, but this works velocity = move_and_slide(velocity) last_collision = get_last_slide_collision() if not dead and last_collision: _emit_player_died() func _stop_sprite() -> void: if sprite.playing: sprite.stop() if sprite.frame != 0: sprite.frame = 0 # when dying because of boundary func _on_CeilingDetector_body_entered(body: Node2D) -> void: _emit_player_died() func _emit_player_died() -> void: # bit 2 corresponds to pipe (starts from 0) set_collision_mask_bit(2, false) dead = true SPEED = 0.0 emit_signal("died") # play the sounds after, because yield will take a bit of time, # this way the camera stops when the player "dies" velocity.y = -DEATH_JUMP_VELOCITY velocity = move_and_slide(velocity) hit_sound.play() yield(hit_sound, "finished") dead_sound.play() </code></pre> </main> <footer> <span> <i class="fas fa-address-card" alt="Contact"></i> <a href="https://luevano.xyz/contact.html">Contact</a> </span> <span> <i class="fas fa-donate" alt="Donate"></i> <a href="https://luevano.xyz/donate.html">Donate</a> </span> <br> <span class="copyright"> Copyright <i class="far fa-copyright" alt="Copyright"></i> 2021 David Luévano Alvarado </span> </footer> </body> </html>