Added ski-invasion

This commit is contained in:
soraefir
2024-01-02 15:40:53 +01:00
commit fe2e6d30d4
289 changed files with 5458 additions and 0 deletions

123
src/player/player.gd Normal file
View File

@@ -0,0 +1,123 @@
class_name Player
extends CharacterBody2D
var angle : float = 0
var breaking : bool = false
@export var energy = 0
@export var mass = 50
var score = 0
var coin = 0
var multiplier = 0;
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
var carve_angle : float = PI/1.8
func _ready():
pass
func reset():
energy = 0
score = 0
coin = 0
mass = 50
angle = 0
carve_angle = PI/1.8
func _physics_process(delta):
var direction = get_global_mouse_position()-position
var new_angle : float = direction.angle()-PI/2
if(new_angle >= PI):
new_angle -= 2*PI
if(new_angle <= -PI):
new_angle += 2*PI
if(abs(new_angle-angle)>PI/8):
new_angle = lerp(angle, new_angle, 0.05)
angle = new_angle
rotation = angle
var delta_height = sin(atan(Global.slope)) * sin(angle+PI/2) * delta
energy += mass * gravity * delta_height * Global.TILE_SCALE
if(energy <= 0): energy = 0
var speed = sqrt(2*energy/mass)
var friction = 0.5* (speed**2) * delta
breaking = Input.is_key_pressed(KEY_SPACE)
if(Input.is_key_pressed(KEY_SPACE)):
friction += max(10* (speed**2) * delta,1.2*1e3)
if(angle > 0):
rotation -= PI/2
else:
rotation += PI/2
energy -= 0.5 * friction**2 / mass
if(energy <= 0):
energy = 0
var f_speed = sqrt(2*energy/mass)
var kmh_speed = f_speed*1000 / 3600
$skin.scale.x = -1 if(angle > 0) else 1
$speed.visible = !breaking && kmh_speed > 50
$speed.play()
$break.visible = breaking && kmh_speed > 15
$break.play()
$break.position.x = -10 if angle>0 else +10
$break.scale.x = -1 if angle>0 else +1
var new_vy = f_speed * sin(angle+PI/2)
var new_vx = f_speed * cos(angle+PI/2)
velocity.y = new_vy
velocity.x = new_vx
$Control/BotRight/PlayerSpeed.text = "Player: "+ str(int(kmh_speed))+"km/h"
$Control/TopLeft/Slope.text = "Slope: "+ str(int(Global.slope*100))+"%"
$Control/TopLeft/AvalancheSpeed.text = "Avalanche: "+ str(int(Global.avalanche.kmh_speed))+"km/h"
$Control/TopRight/Score.text = "Score: "+str(int(score))
$Control/TopRight/Coin.text = "Gold: "+str(int(coin))
move_and_slide()
for i in range(get_slide_collision_count()):
var curcol = get_slide_collision(i)
if(curcol.get_collider().is_in_group("Enemy")):
pass
else:
var wall_friction = max(2* (speed**2) * delta,1e3)
energy -= 0.5 * wall_friction**2 / mass
if(energy<0):
energy = 0
func ski_col_side(col_angle):
var ski_angle_col = rotation-col_angle-PI/2
if(ski_angle_col<0): ski_angle_col += 2*PI
if(ski_angle_col>(PI/2-carve_angle/2) and ski_angle_col<(PI/2+carve_angle/2)):
score += 10
multiplier = 2.0;
pass
elif(ski_angle_col>(3*PI/2-carve_angle/2) and ski_angle_col<(3*PI/2+carve_angle/2)):
score += 10
multiplier = 2.0
pass
else:
var enemy_hit_friction = 1e4
multiplier = 0
score += 1
energy -= 0.5 * enemy_hit_friction**2 / mass
if(energy<0):
energy = 0
func _on_entered(body):
if(body.is_in_group("Enemy")):
ski_col_side(position.angle_to_point(body.position))
coin += 1
body.queue_free()
func _on_area_entered(area):
if(area.is_in_group("Avalanche")):
Global.reset()

40
src/player/player.tres Normal file
View File

@@ -0,0 +1,40 @@
[gd_resource type="SpriteFrames" load_steps=6 format=3 uid="uid://buvd4q0n2gvrl"]
[ext_resource type="Texture2D" uid="uid://dym8shekf5iwk" path="res://res/Tiles/tile_0059.png" id="1_76fyl"]
[ext_resource type="Texture2D" uid="uid://ddw26yfxeee8r" path="res://res/Tiles/tile_0070.png" id="1_nltak"]
[ext_resource type="Texture2D" uid="uid://dy8y52aq3bp6w" path="res://res/Tiles/tile_0059_b.png" id="1_xhbww"]
[ext_resource type="Texture2D" uid="uid://dnpuc4bbohvwp" path="res://res/Tiles/tile_0059_b_f.png" id="2_hcewj"]
[ext_resource type="Texture2D" uid="uid://dktejghq82u8d" path="res://res/Tiles/tile_0059_f.png" id="2_yta5k"]
[resource]
animations = [{
"frames": [{
"duration": 0.5,
"texture": ExtResource("1_xhbww")
}, {
"duration": 0.5,
"texture": ExtResource("2_hcewj")
}],
"loop": true,
"name": &"break",
"speed": 5.0
}, {
"frames": [{
"duration": 0.5,
"texture": ExtResource("1_76fyl")
}, {
"duration": 0.5,
"texture": ExtResource("2_yta5k")
}],
"loop": true,
"name": &"fast",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("1_nltak")
}],
"loop": true,
"name": &"player",
"speed": 5.0
}]

98
src/player/player.tscn Normal file
View File

@@ -0,0 +1,98 @@
[gd_scene load_steps=5 format=3 uid="uid://uswmt78bbe3f"]
[ext_resource type="Script" path="res://src/player/player.gd" id="1_5ri3q"]
[ext_resource type="SpriteFrames" uid="uid://buvd4q0n2gvrl" path="res://src/player/player.tres" id="1_h8qmi"]
[ext_resource type="LabelSettings" uid="uid://dxx71wu5tfouc" path="res://src/other/label_settings.tres" id="3_8tpu5"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_v1cfh"]
size = Vector2(8, 13)
[node name="Player" type="CharacterBody2D" groups=["Player"]]
z_index = 3
collision_layer = 2
collision_mask = 3
wall_min_slide_angle = 1.34565
script = ExtResource("1_5ri3q")
mass = 60
[node name="speed" type="AnimatedSprite2D" parent="."]
position = Vector2(0, -12)
sprite_frames = ExtResource("1_h8qmi")
animation = &"fast"
[node name="break" type="AnimatedSprite2D" parent="."]
position = Vector2(10, 0)
sprite_frames = ExtResource("1_h8qmi")
animation = &"break"
[node name="skin" type="AnimatedSprite2D" parent="."]
sprite_frames = ExtResource("1_h8qmi")
animation = &"player"
[node name="Camera2D" type="Camera2D" parent="."]
zoom = Vector2(2, 2)
[node name="SoftCollider" type="Area2D" parent="." groups=["Player"]]
collision_layer = 0
collision_mask = 12
[node name="CollisionShape" type="CollisionShape2D" parent="SoftCollider" groups=["Player"]]
position = Vector2(0, 1.5)
shape = SubResource("RectangleShape2D_v1cfh")
[node name="WorldCollisionShape" type="CollisionShape2D" parent="." groups=["Player"]]
position = Vector2(0, 1.5)
shape = SubResource("RectangleShape2D_v1cfh")
[node name="Control" type="CanvasLayer" parent="."]
[node name="TopLeft" type="VBoxContainer" parent="Control"]
offset_right = 40.0
offset_bottom = 40.0
[node name="Slope" type="Label" parent="Control/TopLeft"]
layout_mode = 2
text = "10%"
label_settings = ExtResource("3_8tpu5")
[node name="AvalancheSpeed" type="Label" parent="Control/TopLeft"]
layout_mode = 2
text = "0 km/h"
label_settings = ExtResource("3_8tpu5")
[node name="BotRight" type="VBoxContainer" parent="Control"]
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -55.0
offset_top = -40.0
grow_horizontal = 0
grow_vertical = 0
[node name="PlayerSpeed" type="Label" parent="Control/BotRight"]
layout_mode = 2
text = "0 km/h"
label_settings = ExtResource("3_8tpu5")
[node name="TopRight" type="VBoxContainer" parent="Control"]
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -70.0
offset_bottom = 40.0
grow_horizontal = 0
[node name="Score" type="Label" parent="Control/TopRight"]
layout_mode = 2
text = "Score: 0"
label_settings = ExtResource("3_8tpu5")
[node name="Coin" type="Label" parent="Control/TopRight"]
layout_mode = 2
text = "Coin: 0"
label_settings = ExtResource("3_8tpu5")
[connection signal="area_entered" from="SoftCollider" to="." method="_on_area_entered"]
[connection signal="body_entered" from="SoftCollider" to="." method="_on_entered"]