From 30aad69fffa64cb0d8169d1fd483161ade7d2f70 Mon Sep 17 00:00:00 2001 From: Hazel Rae Aranda Date: Tue, 9 Mar 2021 15:53:23 -0500 Subject: [PATCH] You too --- assets/particles/BrakeSmoke.tscn | 26 ++++ assets/particles/Fire.tscn | 29 ++++ assets/particles/Smoke.tscn | 23 +++ assets/particles/Sparks.tscn | 27 ++++ assets/ships/disky/disky.png | Bin 0 -> 291 bytes assets/ships/disky/disky.png.import | 34 +++++ assets/ships/quills/quills.png | Bin 0 -> 351 bytes assets/ships/quills/quills.png.import | 34 +++++ objects/Ship.gd | 103 +++++++++++++ objects/Ship.tscn | 55 +++++++ objects/actions/StaticShield.gd | 25 +++ objects/actions/StaticShield.tscn | 212 ++++++++++++++++++++++++++ objects/ships/Disky.tscn | 40 +++++ objects/ships/Quills.tscn | 35 +++++ scenes/MainMenu.gd | 1 + scenes/MainMenu.tscn | 11 ++ scenes/TestScene.tscn | 22 +++ 17 files changed, 677 insertions(+) create mode 100644 assets/particles/BrakeSmoke.tscn create mode 100644 assets/particles/Fire.tscn create mode 100644 assets/particles/Smoke.tscn create mode 100644 assets/particles/Sparks.tscn create mode 100644 assets/ships/disky/disky.png create mode 100644 assets/ships/disky/disky.png.import create mode 100644 assets/ships/quills/quills.png create mode 100644 assets/ships/quills/quills.png.import create mode 100644 objects/Ship.gd create mode 100644 objects/Ship.tscn create mode 100644 objects/actions/StaticShield.gd create mode 100644 objects/actions/StaticShield.tscn create mode 100644 objects/ships/Disky.tscn create mode 100644 objects/ships/Quills.tscn create mode 100644 scenes/MainMenu.gd create mode 100644 scenes/MainMenu.tscn create mode 100644 scenes/TestScene.tscn diff --git a/assets/particles/BrakeSmoke.tscn b/assets/particles/BrakeSmoke.tscn new file mode 100644 index 0000000..f103262 --- /dev/null +++ b/assets/particles/BrakeSmoke.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=3 format=2] + +[sub_resource type="Curve" id=5] +_data = [ Vector2( 0, 1 ), 0.0, -1.0, 0, 1, Vector2( 1, 0 ), -1.0, 0.0, 1, 0 ] + +[sub_resource type="Gradient" id=6] +colors = PoolColorArray( 0.761719, 0.701047, 0.493927, 1, 0.242188, 0.230288, 0.198669, 1 ) + +[node name="BrakeSmoke" type="CPUParticles2D"] +position = Vector2( 0, 12 ) +emitting = false +amount = 32 +lifetime = 0.5 +local_coords = false +emission_shape = 4 +emission_points = PoolVector2Array( -3, 0, 3, 0 ) +emission_normals = PoolVector2Array( -1, 0, 1, 0 ) +emission_colors = PoolColorArray( ) +spread = 10.0 +gravity = Vector2( 0, 0 ) +initial_velocity = 16.0 +angle = 360.0 +angle_random = 1.0 +scale_amount = 3.0 +scale_amount_curve = SubResource( 5 ) +color_ramp = SubResource( 6 ) diff --git a/assets/particles/Fire.tscn b/assets/particles/Fire.tscn new file mode 100644 index 0000000..250c001 --- /dev/null +++ b/assets/particles/Fire.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=2] + +[sub_resource type="Curve" id=3] +_data = [ Vector2( 0, 1 ), 0.0, 0.0123287, 0, 0, Vector2( 1, 0 ), -0.102436, 0.0, 0, 0 ] + +[sub_resource type="Gradient" id=4] +offsets = PoolRealArray( 0, 0.678967 ) +colors = PoolColorArray( 1, 0.939697, 0.035156, 1, 0.890625, 0.0834959, 0.0834959, 1 ) + +[node name="Fire" type="CPUParticles2D"] +position = Vector2( 0, 12 ) +emitting = false +amount = 32 +lifetime = 0.25 +fract_delta = false +emission_shape = 4 +emission_points = PoolVector2Array( -4, 0, -2.5, 0, -1, 0, 0, 0, 1, 0, 2.5, 0, 4, 0 ) +emission_normals = PoolVector2Array( -1, 0.5, -1, 0.25, -1, 0.2, -1, 0, -1, -0.2, -1, -0.25, -1, -0.5 ) +emission_colors = PoolColorArray( ) +direction = Vector2( 0, 1 ) +spread = 0.0 +gravity = Vector2( 0, 0 ) +initial_velocity = 32.0 +angle = 360.0 +angle_random = 1.0 +scale_amount = 3.0 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 3 ) +color_ramp = SubResource( 4 ) diff --git a/assets/particles/Smoke.tscn b/assets/particles/Smoke.tscn new file mode 100644 index 0000000..bf93aa5 --- /dev/null +++ b/assets/particles/Smoke.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=3 format=2] + +[sub_resource type="Curve" id=1] +_data = [ Vector2( 0, 1 ), 0.0, -1.0, 0, 1, Vector2( 1, 0 ), -1.0, 0.0, 1, 0 ] + +[sub_resource type="Gradient" id=2] +colors = PoolColorArray( 0.304688, 0.276049, 0.221374, 1, 0.128906, 0.125393, 0.119339, 1 ) + +[node name="Smoke" type="CPUParticles2D"] +position = Vector2( 0, 12 ) +emitting = false +amount = 32 +local_coords = false +emission_shape = 2 +emission_rect_extents = Vector2( 1, 0 ) +direction = Vector2( 0, 1 ) +gravity = Vector2( 0, 0 ) +initial_velocity = 32.0 +angle = 720.0 +angle_random = 1.0 +scale_amount = 3.0 +scale_amount_curve = SubResource( 1 ) +color_ramp = SubResource( 2 ) diff --git a/assets/particles/Sparks.tscn b/assets/particles/Sparks.tscn new file mode 100644 index 0000000..ae1e7cd --- /dev/null +++ b/assets/particles/Sparks.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=3 format=2] + +[sub_resource type="Curve" id=3] +_data = [ Vector2( 0, 1 ), 0.0, -1.0, 0, 1, Vector2( 1, 0 ), -1.0, 0.0, 1, 0 ] + +[sub_resource type="Gradient" id=4] +offsets = PoolRealArray( 0, 0.170068, 0.62585, 1 ) +colors = PoolColorArray( 1, 1, 1, 1, 1, 0.981354, 0.0820312, 1, 0.961719, 0.764515, 0.108945, 1, 0.836719, 0.0947846, 0.0947846, 1 ) + +[node name="Sparks" type="CPUParticles2D"] +position = Vector2( 0, 10 ) +emitting = false +amount = 32 +fract_delta = false +local_coords = false +emission_shape = 2 +emission_rect_extents = Vector2( 2, 0 ) +direction = Vector2( 0, 1 ) +spread = 90.0 +gravity = Vector2( 0, 0 ) +initial_velocity = 32.0 +angle = 360.0 +angle_random = 1.0 +scale_amount = 3.0 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 3 ) +color_ramp = SubResource( 4 ) diff --git a/assets/ships/disky/disky.png b/assets/ships/disky/disky.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1ed6ed028ba63f2d6310262f59a067df5446d9 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm!3-pi)b-i{se}NZ5LY0rq+sHzVUuQQ*dJzn zzfkSwg0y#sXZ`+UHuGsf);!{YSWuZ$*BT?Eo8igVt9SKJ_v*?w_?^7xJkSn>k|4ie2B2zuVA8C$ zWk9t-o-U3d5>w~)Ir1G);9&XLsJG~UeO9=whk{|Q`bUFg5tq8A*5bMA3f4UliF;+I zzQFX3bA^z-Z}R6PqaGe{FV?J|LNDgL^5QvN>)9CbUQNG}LG3Y@^VZ*!WPqkKc)I$z JtaD0e0stpLfz1E_ literal 0 HcmV?d00001 diff --git a/assets/ships/disky/disky.png.import b/assets/ships/disky/disky.png.import new file mode 100644 index 0000000..0f10040 --- /dev/null +++ b/assets/ships/disky/disky.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/disky.png-f242c4e5faf06dc8bf05c7130abd8c5d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ships/disky/disky.png" +dest_files=[ "res://.import/disky.png-f242c4e5faf06dc8bf05c7130abd8c5d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/assets/ships/quills/quills.png b/assets/ships/quills/quills.png new file mode 100644 index 0000000000000000000000000000000000000000..da243969399bdd29d0e63dac25b451e994b20c87 GIT binary patch literal 351 zcmV-l0igbgP);gt~ z+tC$lJhl--)54Hzj2MFG;Q#;s|DU}5|Nr#uKmTX1-A-CG#-DwHq2XqDGI6mGfA-1$ zKMVh2D7<|8JXS+c41j6o(3Qh5z}Wr^Rzpw>fN7qa%7_t2iv713VTND@(RmNyCf^KC z{*NAr$l+3NURbkb xW>yx~j5B@OGz|3^0+C@sc#HAntJb0D0RV#S?W@p;NcjK&002ovPDHLkV1m&$o2UQ) literal 0 HcmV?d00001 diff --git a/assets/ships/quills/quills.png.import b/assets/ships/quills/quills.png.import new file mode 100644 index 0000000..9477288 --- /dev/null +++ b/assets/ships/quills/quills.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/quills.png-b1aaba71cbbfa07459cfd05af3db0494.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ships/quills/quills.png" +dest_files=[ "res://.import/quills.png-b1aaba71cbbfa07459cfd05af3db0494.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/objects/Ship.gd b/objects/Ship.gd new file mode 100644 index 0000000..eb52e1a --- /dev/null +++ b/objects/Ship.gd @@ -0,0 +1,103 @@ +extends KinematicBody2D + +export (String, "player_1", "player_2", "player_3", "player_4") var player_number: String = "player_1" + +export var thrust_power: float +export var max_speed: float +export var brake_power: float +export var velocity_damp: float + +export var turning_power: float +export var max_turning: float +export var turning_damp: float + +export var bounce_damp: float + +export var max_health: float +export var max_energy: float +export var energy_regen: float + +onready var health: float = max_health +onready var energy: float = max_energy + +var heading: float = 0 +var turning: float = 0 +var velocity: Vector2 = Vector2(0, 0) + +var using_energy: bool = false + +func _physics_process(delta): + # Turning + apply_turning(delta) + rotation = stepify(heading, 2*PI/16) + + var tp = false + if Input.is_action_pressed(player_number + "_up"): + tp = apply_thrust(delta) + $Graphics/ThrustParticles.emitting = tp + + # Brakes + var bp = false + if Input.is_action_pressed(player_number + "_down"): + bp = apply_brake(delta) + $Graphics/BrakeParticles.emitting = bp + + # Damping n' Clamping + if !tp: + velocity *= pow(velocity_damp, delta) + velocity = velocity.clamped(max_speed) + + # Move and process collisions + var coll = move_and_collide(velocity * delta) + if coll: + velocity = velocity.bounce(coll.normal) * bounce_damp + if coll.collider.has_method("impact"): + coll.collider.impact(coll.normal*-velocity.length()) + + # Regenerate energy + if !using_energy: + energy = min(energy + energy_regen * delta, max_energy) + using_energy = false + +func _input(event): + if event.is_action_pressed(player_number + "_primary"): + $PrimaryAction.activate() + if event.is_action_released(player_number + "_primary"): + $PrimaryAction.deactivate() + if event.is_action_pressed(player_number + "_secondary"): + $SecondaryAction.activate() + if event.is_action_released(player_number + "_secondary"): + $SecondaryAction.deactivate() + +func apply_turning(delta: float): + var new_turn_force = false + if Input.is_action_pressed(player_number + "_left"): + turning -= turning_power * delta + new_turn_force = true + if Input.is_action_pressed(player_number + "_right"): + turning += turning_power * delta + new_turn_force = true + if !new_turn_force: + turning *= pow(turning_damp, delta) + turning = clamp(turning, -max_turning, max_turning) + heading += turning * delta + +func apply_thrust(delta: float) -> bool: + # Direction vector and relative velocity + var direction = Vector2(0, -1).rotated(heading) + velocity += direction * thrust_power * delta + + return true + +func apply_brake(delta: float) -> bool: + velocity *= pow(1/brake_power, delta) + return true + +func impact(force: Vector2): + velocity += force + +func set_energy(new_energy) -> bool: + if new_energy < energy: + using_energy = true + energy = clamp(new_energy, 0, max_energy) + return !(energy == 0) diff --git a/objects/Ship.tscn b/objects/Ship.tscn new file mode 100644 index 0000000..b0839b4 --- /dev/null +++ b/objects/Ship.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://objects/Ship.gd" type="Script" id=1] + +[sub_resource type="GDScript" id=1] +script/source = "extends Node2D + +onready var children: Array = get_children() + +func activate(): + for child in children: + child.activate() + +func deactivate(): + for child in children: + child.deactivate() +" + +[sub_resource type="GDScript" id=2] +script/source = "extends Node2D + +onready var children: Array = get_children() + +var emitting: bool = false setget set_emitting + +func set_emitting(val: bool): + if val == emitting: + return + emitting = val + for node in children: + node.emitting = val +" + +[node name="Ship" type="KinematicBody2D"] +collision_layer = 3 +collision_mask = 6 +script = ExtResource( 1 ) + +[node name="PrimaryAction" type="Node2D" parent="."] +script = SubResource( 1 ) + +[node name="SecondaryAction" type="Node2D" parent="."] +script = SubResource( 1 ) + +[node name="Graphics" type="Node2D" parent="."] + +[node name="Sprite" type="Sprite" parent="Graphics"] + +[node name="ThrustParticles" type="Node2D" parent="Graphics"] +z_index = -1 +script = SubResource( 2 ) + +[node name="BrakeParticles" type="Node2D" parent="Graphics"] +z_index = -1 +script = SubResource( 2 ) diff --git a/objects/actions/StaticShield.gd b/objects/actions/StaticShield.gd new file mode 100644 index 0000000..aabe62a --- /dev/null +++ b/objects/actions/StaticShield.gd @@ -0,0 +1,25 @@ +extends Area2D + +export var ship_path: NodePath +export var energy_usage: float +export var min_energy: float + +onready var ship: Node = get_node(ship_path) + +var active = false + +func activate(): + if ship.energy > min_energy: + active = true + $Static.visible = true + $Shape.disabled = false + +func deactivate(): + active = false + $Static.visible = false + $Shape.disabled = true + +func _physics_process(delta): + if active: + if !ship.set_energy(ship.energy - energy_usage * delta): + deactivate() diff --git a/objects/actions/StaticShield.tscn b/objects/actions/StaticShield.tscn new file mode 100644 index 0000000..cc89510 --- /dev/null +++ b/objects/actions/StaticShield.tscn @@ -0,0 +1,212 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://icon.png" type="Texture" id=1] +[ext_resource path="res://objects/actions/StaticShield.gd" type="Script" id=2] + +[sub_resource type="Shader" id=1] +code = "shader_type canvas_item; + +uniform vec2 offset; +uniform float scale:hint_range(0.5, 1000.0); +// jitter cell ceneters. less gives more regular pattern +uniform float jitter:hint_range(0.0, 1.0); + +uniform vec4 color: hint_color = vec4(1,1,1,1); +uniform float speed = 1.0; + +// Cellular noise (\\\"Worley noise\\\") in 3D in GLSL. +// Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved. +// This code is released under the conditions of the MIT license. +// See LICENSE file for details. +// https://github.com/stegu/webgl-noise + +// Modulo 289 without a division (only multiplications) +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +// Modulo 7 without a division +vec3 mod7(vec3 x) { + return x - floor(x * (1.0 / 7.0)) * 7.0; +} + +// Permutation polynomial: (34x^2 + x) mod 289 +vec3 permute(vec3 x) { + return mod289((34.0 * x + 1.0) * x); +} + +// Cellular noise, returning F1 and F2 in a vec2. +// 3x3x3 search region for good F2 everywhere, but a lot +// slower than the 2x2x2 version. +// The code below is a bit scary even to its author, +// but it has at least half decent performance on a +// modern GPU. In any case, it beats any software +// implementation of Worley noise hands down. + +vec2 cellular3d(vec3 P) { + float K = 0.142857142857; // 1/7 + float Ko = 0.428571428571; // 1/2-K/2 + float K2 = 0.020408163265306; // 1/(7*7) + float Kz = 0.166666666667; // 1/6 + float Kzo = 0.416666666667; // 1/2-1/6*2 + + vec3 Pi = mod289(floor(P)); + vec3 Pf = fract(P) - 0.5; + + vec3 Pfx = Pf.x + vec3(1.0, 0.0, -1.0); + vec3 Pfy = Pf.y + vec3(1.0, 0.0, -1.0); + vec3 Pfz = Pf.z + vec3(1.0, 0.0, -1.0); + + vec3 p = permute(Pi.x + vec3(-1.0, 0.0, 1.0)); + vec3 p1 = permute(p + Pi.y - 1.0); + vec3 p2 = permute(p + Pi.y); + vec3 p3 = permute(p + Pi.y + 1.0); + + vec3 p11 = permute(p1 + Pi.z - 1.0); + vec3 p12 = permute(p1 + Pi.z); + vec3 p13 = permute(p1 + Pi.z + 1.0); + + vec3 p21 = permute(p2 + Pi.z - 1.0); + vec3 p22 = permute(p2 + Pi.z); + vec3 p23 = permute(p2 + Pi.z + 1.0); + + vec3 p31 = permute(p3 + Pi.z - 1.0); + vec3 p32 = permute(p3 + Pi.z); + vec3 p33 = permute(p3 + Pi.z + 1.0); + + vec3 ox11 = fract(p11*K) - Ko; + vec3 oy11 = mod7(floor(p11*K))*K - Ko; + vec3 oz11 = floor(p11*K2)*Kz - Kzo; // p11 < 289 guaranteed + + vec3 ox12 = fract(p12*K) - Ko; + vec3 oy12 = mod7(floor(p12*K))*K - Ko; + vec3 oz12 = floor(p12*K2)*Kz - Kzo; + + vec3 ox13 = fract(p13*K) - Ko; + vec3 oy13 = mod7(floor(p13*K))*K - Ko; + vec3 oz13 = floor(p13*K2)*Kz - Kzo; + + vec3 ox21 = fract(p21*K) - Ko; + vec3 oy21 = mod7(floor(p21*K))*K - Ko; + vec3 oz21 = floor(p21*K2)*Kz - Kzo; + + vec3 ox22 = fract(p22*K) - Ko; + vec3 oy22 = mod7(floor(p22*K))*K - Ko; + vec3 oz22 = floor(p22*K2)*Kz - Kzo; + + vec3 ox23 = fract(p23*K) - Ko; + vec3 oy23 = mod7(floor(p23*K))*K - Ko; + vec3 oz23 = floor(p23*K2)*Kz - Kzo; + + vec3 ox31 = fract(p31*K) - Ko; + vec3 oy31 = mod7(floor(p31*K))*K - Ko; + vec3 oz31 = floor(p31*K2)*Kz - Kzo; + + vec3 ox32 = fract(p32*K) - Ko; + vec3 oy32 = mod7(floor(p32*K))*K - Ko; + vec3 oz32 = floor(p32*K2)*Kz - Kzo; + + vec3 ox33 = fract(p33*K) - Ko; + vec3 oy33 = mod7(floor(p33*K))*K - Ko; + vec3 oz33 = floor(p33*K2)*Kz - Kzo; + + vec3 dx11 = Pfx + jitter*ox11; + vec3 dy11 = Pfy.x + jitter*oy11; + vec3 dz11 = Pfz.x + jitter*oz11; + + vec3 dx12 = Pfx + jitter*ox12; + vec3 dy12 = Pfy.x + jitter*oy12; + vec3 dz12 = Pfz.y + jitter*oz12; + + vec3 dx13 = Pfx + jitter*ox13; + vec3 dy13 = Pfy.x + jitter*oy13; + vec3 dz13 = Pfz.z + jitter*oz13; + + vec3 dx21 = Pfx + jitter*ox21; + vec3 dy21 = Pfy.y + jitter*oy21; + vec3 dz21 = Pfz.x + jitter*oz21; + + vec3 dx22 = Pfx + jitter*ox22; + vec3 dy22 = Pfy.y + jitter*oy22; + vec3 dz22 = Pfz.y + jitter*oz22; + + vec3 dx23 = Pfx + jitter*ox23; + vec3 dy23 = Pfy.y + jitter*oy23; + vec3 dz23 = Pfz.z + jitter*oz23; + + vec3 dx31 = Pfx + jitter*ox31; + vec3 dy31 = Pfy.z + jitter*oy31; + vec3 dz31 = Pfz.x + jitter*oz31; + + vec3 dx32 = Pfx + jitter*ox32; + vec3 dy32 = Pfy.z + jitter*oy32; + vec3 dz32 = Pfz.y + jitter*oz32; + + vec3 dx33 = Pfx + jitter*ox33; + vec3 dy33 = Pfy.z + jitter*oy33; + vec3 dz33 = Pfz.z + jitter*oz33; + + vec3 d11 = dx11 * dx11 + dy11 * dy11 + dz11 * dz11; + vec3 d12 = dx12 * dx12 + dy12 * dy12 + dz12 * dz12; + vec3 d13 = dx13 * dx13 + dy13 * dy13 + dz13 * dz13; + vec3 d21 = dx21 * dx21 + dy21 * dy21 + dz21 * dz21; + vec3 d22 = dx22 * dx22 + dy22 * dy22 + dz22 * dz22; + vec3 d23 = dx23 * dx23 + dy23 * dy23 + dz23 * dz23; + vec3 d31 = dx31 * dx31 + dy31 * dy31 + dz31 * dz31; + vec3 d32 = dx32 * dx32 + dy32 * dy32 + dz32 * dz32; + vec3 d33 = dx33 * dx33 + dy33 * dy33 + dz33 * dz33; + + // Sort out the two smallest distances (F1, F2) +// F1 only block + vec3 d1 = min(min(d11,d12), d13); + vec3 d2 = min(min(d21,d22), d23); + vec3 d3 = min(min(d31,d32), d33); + vec3 d = min(min(d1,d2), d3); + d.x = min(min(d.x,d.y),d.z); + return vec2(sqrt(d.x)); // F1 duplicated, no F2 computed +// End of F1 only block +} + +void fragment() { + vec2 n = cellular3d(vec3((UV+offset)*scale, TIME*speed)); + + //using F1 for output + //COLOR.rgb = vec3(n.x); + //using F2 for output + //COLOR.rgb = vec3(1.0-n.y); + //using both, keep experimenting with them :) +// COLOR.rgb = vec3(smoothstep(0, .2, n.y-n.x)); + COLOR = mix(color, vec4(0), smoothstep(1.0, 0.5, n.x)); +// COLOR.a *= smoothstep(1.0,0.0,length(UV-vec2(0.5))*1.0); +}" + +[sub_resource type="ShaderMaterial" id=2] +shader = SubResource( 1 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/scale = 4.0 +shader_param/jitter = 1.0 +shader_param/color = Color( 1, 0.964706, 0.45098, 1 ) +shader_param/speed = 3.0 + +[sub_resource type="CircleShape2D" id=3] +radius = 17.0294 + +[node name="StaticShield" type="Area2D"] +script = ExtResource( 2 ) +energy_usage = 5.0 +min_energy = 5.0 + +[node name="Static" type="Polygon2D" parent="."] +visible = false +material = SubResource( 2 ) +position = Vector2( 0, -4 ) +scale = Vector2( 3, 3 ) +z_index = 1 +texture = ExtResource( 1 ) +polygon = PoolVector2Array( -3, 5, -5, 3, -5.66667, 0, -5, -3, -3, -5, 0, -5.66667, 3, -5, 5, -3, 5.66667, 0, 5, 3, 3, 5, 0, 5.66667 ) +uv = PoolVector2Array( 14.274, 55.0982, 4.58411, 45.4083, 1.35414, 30.8735, 4.58411, 16.3386, 14.274, 6.64873, 28.8089, 3.41877, 43.3437, 6.64873, 53.0336, 16.3386, 57.8786, 30.8735, 53.0336, 45.4083, 43.3437, 55.0982, 28.8089, 58.3282 ) + +[node name="Shape" type="CollisionShape2D" parent="."] +position = Vector2( 0, -4 ) +shape = SubResource( 3 ) +disabled = true diff --git a/objects/ships/Disky.tscn b/objects/ships/Disky.tscn new file mode 100644 index 0000000..03b4dc1 --- /dev/null +++ b/objects/ships/Disky.tscn @@ -0,0 +1,40 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://objects/Ship.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/ships/disky/disky.png" type="Texture" id=2] +[ext_resource path="res://assets/particles/Sparks.tscn" type="PackedScene" id=3] +[ext_resource path="res://objects/actions/StaticShield.tscn" type="PackedScene" id=4] + +[sub_resource type="CircleShape2D" id=1] +radius = 5.0 + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 3, 5 ) + +[node name="Disky" instance=ExtResource( 1 )] +thrust_power = 200.0 +max_speed = 80.0 +brake_power = 1.0 +velocity_damp = 0.5 +turning_power = 18.849 +max_turning = 6.0 +turning_damp = 0.01 +bounce_damp = 0.7 +max_energy = 10.0 +energy_regen = 5.0 + +[node name="StaticShield" parent="SecondaryAction" index="0" instance=ExtResource( 4 )] +ship_path = NodePath("../..") + +[node name="Sprite" parent="Graphics" index="0"] +texture = ExtResource( 2 ) + +[node name="Sparks" parent="Graphics/ThrustParticles" index="0" instance=ExtResource( 3 )] + +[node name="HeadShape" type="CollisionShape2D" parent="." index="3"] +position = Vector2( 0, -4 ) +shape = SubResource( 1 ) + +[node name="BodyShape" type="CollisionShape2D" parent="." index="4"] +position = Vector2( 0, 4 ) +shape = SubResource( 2 ) diff --git a/objects/ships/Quills.tscn b/objects/ships/Quills.tscn new file mode 100644 index 0000000..aa82f35 --- /dev/null +++ b/objects/ships/Quills.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://objects/Ship.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/ships/quills/quills.png" type="Texture" id=2] +[ext_resource path="res://assets/particles/Fire.tscn" type="PackedScene" id=3] +[ext_resource path="res://assets/particles/Smoke.tscn" type="PackedScene" id=4] +[ext_resource path="res://assets/particles/BrakeSmoke.tscn" type="PackedScene" id=5] + +[sub_resource type="RectangleShape2D" id=7] +extents = Vector2( 2, 7 ) + +[node name="Quills" instance=ExtResource( 1 )] +thrust_power = 80.0 +max_speed = 80.0 +brake_power = 8.0 +velocity_damp = 0.9 +turning_power = 18.849 +max_turning = 18.849 +bounce_damp = 0.4 + +[node name="Sprite" parent="Graphics" index="0"] +texture = ExtResource( 2 ) + +[node name="Smoke" parent="Graphics/ThrustParticles" index="0" instance=ExtResource( 4 )] + +[node name="Fire" parent="Graphics/ThrustParticles" index="1" instance=ExtResource( 3 )] + +[node name="BrakeSmoke" parent="Graphics/BrakeParticles" index="0" instance=ExtResource( 5 )] + +[node name="BodyCollider" type="CollisionShape2D" parent="." index="3"] +position = Vector2( 0, 3 ) +shape = SubResource( 7 ) + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="." index="4"] +polygon = PoolVector2Array( 5, -4, -5, -4, 0, -12 ) diff --git a/scenes/MainMenu.gd b/scenes/MainMenu.gd new file mode 100644 index 0000000..e07a0bf --- /dev/null +++ b/scenes/MainMenu.gd @@ -0,0 +1 @@ +extends Control diff --git a/scenes/MainMenu.tscn b/scenes/MainMenu.tscn new file mode 100644 index 0000000..24abbd8 --- /dev/null +++ b/scenes/MainMenu.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://scenes/MainMenu.gd" type="Script" id=1] + +[node name="MainMenu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/scenes/TestScene.tscn b/scenes/TestScene.tscn new file mode 100644 index 0000000..0bb816c --- /dev/null +++ b/scenes/TestScene.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://objects/ships/Disky.tscn" type="PackedScene" id=1] +[ext_resource path="res://objects/ships/Quills.tscn" type="PackedScene" id=2] + +[sub_resource type="GDScript" id=1] +script/source = "extends Node2D + +func _process(delta): + if Input.is_action_just_pressed(\"debug_reset\"): + get_tree().change_scene(\"res://scenes/TestScene.tscn\") +" + +[node name="TestScene" type="Node2D"] +script = SubResource( 1 ) + +[node name="Quills" parent="." instance=ExtResource( 2 )] +position = Vector2( 106.783, 173.39 ) +player_number = "player_2" + +[node name="Disky" parent="." instance=ExtResource( 1 )] +position = Vector2( 210.244, 143.66 )