Skip to content

Commit 202b260

Browse files
committed
part 08 difficulty curve
1 parent 0655e42 commit 202b260

File tree

6 files changed

+93
-8
lines changed

6 files changed

+93
-8
lines changed

Main.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ func spawn_circle(_position=null):
3131
var c = Circle.instance()
3232
if !_position:
3333
var x = rand_range(-150, 150)
34-
var y = rand_range(-500, -400)
34+
var y = rand_range(-550, -450)
3535
_position = player.target.position + Vector2(x, y)
3636
add_child(c)
37-
c.init(_position)
37+
c.init(_position, level)
3838

3939
func _on_Jumper_captured(object):
4040
$Camera2D.position = object.position

ProgressionTester.gd

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
extends Node2D
2+
3+
var Circle = preload("res://objects/Circle.tscn")
4+
var font = preload("res://assets/fonts/xolonium_64.tres")
5+
var level
6+
var last_circle_position
7+
var level_markers = []
8+
9+
func _ready():
10+
randomize()
11+
last_circle_position = $Camera2D.position
12+
level = 0
13+
for i in 100:
14+
if i % 5 == 0:
15+
level += 1
16+
level_markers.append(last_circle_position)
17+
spawn_circle()
18+
update()
19+
20+
func _process(delta):
21+
if Input.is_action_pressed("ui_up"):
22+
$Camera2D.position.y -= 15
23+
if Input.is_action_pressed("ui_down"):
24+
$Camera2D.position.y += 15
25+
if Input.is_action_pressed("ui_left"):
26+
$Camera2D.position.x -= 15
27+
if Input.is_action_pressed("ui_right"):
28+
$Camera2D.position.x += 15
29+
30+
func spawn_circle(_position=null):
31+
var c = Circle.instance()
32+
if !_position:
33+
var x = rand_range(-150, 150)
34+
var y = rand_range(-500, -400)
35+
_position = last_circle_position + Vector2(x, y)
36+
add_child(c)
37+
c.init(_position, level)
38+
last_circle_position = _position
39+
40+
func _draw():
41+
var l = 1
42+
for pos in level_markers:
43+
var s = Vector2(pos.x-480, pos.y-200)
44+
var e = Vector2(pos.x-80, pos.y-200)
45+
draw_line(s, e, Color(1, 1, 1), 15)
46+
draw_string(font, s - Vector2(0, 50), str(l), Color(1, 1, 1))
47+
l += 1

objects/Circle.gd

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,24 @@ enum MODES {STATIC, LIMITED}
88
var radius = 100
99
var rotation_speed = PI
1010
var mode = MODES.STATIC
11-
var move_range = 100
12-
var move_speed = 1.0
11+
var move_range = 0
12+
var move_speed = 2.0
1313
var num_orbits = 3
1414
var current_orbits = 0
1515
var orbit_start = null
1616
var jumper = null
1717

18-
func init(_position, _radius=radius, _mode=MODES.LIMITED):
18+
func init(_position, level=1):
19+
var _mode = settings.rand_weighted([10, level-1])
1920
set_mode(_mode)
2021
position = _position
21-
radius = _radius
22+
var move_chance = clamp(level-10, 0, 9) / 10.0
23+
if randf() < move_chance:
24+
move_range = max(25, 100 * rand_range(0.75, 1.25) * move_chance) * pow(-1, randi() % 2)
25+
move_speed = max(2.5 - ceil(level/5) * 0.25, 0.75)
26+
var small_chance = min(0.9, max(0, (level-10) / 20.0))
27+
if randf() < small_chance:
28+
radius = max(50, radius - level * rand_range(0.75, 1.25))
2229
$Sprite.material = $Sprite.material.duplicate()
2330
$SpriteEffect.material = $Sprite.material
2431
$CollisionShape2D.shape = $CollisionShape2D.shape.duplicate()

objects/Jumper.gd

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ var trail_length = 25
1212

1313
func _ready():
1414
$Sprite.material.set_shader_param("color", settings.theme["player_body"])
15-
$Trail/Points.default_color = settings.theme["player_trail"]
16-
15+
var trail_color = settings.theme["player_trail"]
16+
trail.gradient.set_color(1, trail_color)
17+
trail_color.a = 0
18+
trail.gradient.set_color(0, trail_color)
1719

1820
func _unhandled_input(event):
1921
if target and event is InputEventScreenTouch and event.pressed:

settings.gd

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,21 @@ var color_schemes = {
3333
}
3434

3535
var theme = color_schemes["NEON1"]
36+
37+
static func rand_weighted(weights):
38+
var sum = 0
39+
for weight in weights:
40+
sum += weight
41+
var num = rand_range(0, sum)
42+
for i in weights.size():
43+
if num < weights[i]:
44+
return i
45+
num -= weights[i]
46+
47+
48+
49+
50+
51+
52+
53+

tests/ProgressionTester.tscn

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[gd_scene load_steps=2 format=2]
2+
3+
[ext_resource path="res://ProgressionTester.gd" type="Script" id=1]
4+
5+
[node name="ProgressionTester" type="Node2D"]
6+
script = ExtResource( 1 )
7+
8+
[node name="Camera2D" type="Camera2D" parent="."]
9+
position = Vector2( 240, 428.122 )
10+
current = true
11+
zoom = Vector2( 4, 4 )

0 commit comments

Comments
 (0)