Files
Nockin_On_Hells_Door/script/Player.cs
2024-10-20 14:52:24 +02:00

209 lines
3.6 KiB
C#

using Godot;
using System;
using System.IO;
using System.Text.RegularExpressions;
public partial class Player : CharacterBody2D
{
[Export] float Speed;
[Export] float sugar_speed;
[Export] AnimationPlayer anim;
[Export] Camera2D cam;
[Export] TextureProgressBar bar;
[ExportGroup("controls")]
[Export] Control menu;
[Export] float minute_part_second = 1;
[Export] Label time;
[Export] Sprite2D over;
[Export] CanvasLayer gameover;
[Export] AudioStreamPlayer audio;
float minute;
int heure = 18;
[ExportGroup("gameover")]
[Export] Texture2D caniche;
[Export] Texture2D shotgun;
[Export] Texture2D caramel;
[Export] Texture2D glissemie;
[Export] Texture2D voiture;
[Export] Texture2D win;
[Export] AudioStream aud_caniche;
[Export] AudioStream aud_shotgun;
[Export] AudioStream aud_caramel;
[Export] AudioStream aud_glissemie;
[Export] AudioStream aud_voiture;
[Export] AudioStream aud_win;
public float PixelSize = 1.0f;
float sugar { get; set;}= 50;
const float MAX_SUGAR = 100;
bool end = false;
public override void _Ready()
{
this.AddToGroup("player");
}
public override void _PhysicsProcess(double delta)
{
Vector2 velocity = Velocity;
if (end == false)
{
sugar -= (float)delta / sugar_speed;
}
bar.Value = sugar;
if(sugar <= 5)
{
sugar = 50;
end = true;
OverGlissemie();
}
else if (sugar >= 90)
{
sugar = 50;
end = true;
OverCaramel();
}
minute += minute_part_second * (float) delta;
if (minute >= 60)
{
minute = 0;
heure +=1;
}
UpdateTime();
if (heure >= 22)
{
heure = 0;
OverWin();
}
Vector2 direction = Input.GetVector("left", "right", "up", "down");
direction = direction.Normalized();
if (direction != Vector2.Zero)
{
velocity = direction * Speed * (float)delta;
}
else
{
velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
velocity.Y = Mathf.MoveToward(Velocity.Y, 0, Speed);
velocity = velocity.Round();
}
if(Input.IsActionPressed("quit"))
{
Input.MouseMode = Input.MouseModeEnum.Visible;
GetTree().Paused= true;
anim.Play("paused");
}
else if(velocity.X > 0)
{
anim.Play("right");
}
else if (velocity.X < 0)
{
anim.Play("left");
}
else if (velocity.Y > 0)
{
anim.Play("down");
}
else if (velocity.Y < 0)
{
anim.Play("up");
}
else
{
anim.Play("idle");
}
Velocity = velocity;
MoveAndSlide();
Position = Position.Round();
}
void UpdateTime()
{
time.Text = string.Format("{0:D2}:{1:D2}", heure, (int)Math.Floor(minute));
}
void OverCaniche()
{
GetTree().Paused = true;
audio.Stream = aud_caniche;
audio.Play();
over.Texture = caniche;
gameover.Visible = true;
end = true;
}
async void OverShotgun()
{
await ToSignal(GetTree().CreateTimer(0.8), "timeout");
audio.Stream = aud_shotgun;
audio.Play();
GetTree().Paused = true;
over.Texture = shotgun;
gameover.Visible = true;
end = true;
}
void OverCaramel()
{
audio.Stream = aud_caramel;
audio.Play();
GetTree().Paused = true;
over.Texture = caramel;
gameover.Visible = true;
end = true;
}
void OverGlissemie()
{
audio.Stream = aud_glissemie;
audio.Play();
GetTree().Paused = true;
over.Texture = glissemie;
gameover.Visible = true;
end = true;
}
void OverVoiture()
{
audio.Stream = aud_voiture;
audio.Play();
GetTree().Paused = true;
over.Texture = voiture;
gameover.Visible = true;
end = true;
}
void OverWin()
{
audio.Stream = aud_win;
audio.Play();
GetTree().Paused = true;
over.Texture = win;
gameover.Visible = true;
end = true;
}
}