mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-14 11:53:47 +00:00
Modularized doors and lightbridges
This commit is contained in:
parent
1a24711984
commit
1a5bd1b6d8
27 changed files with 513 additions and 346 deletions
|
|
@ -17,7 +17,7 @@ public partial class ForceField : Door
|
|||
base.Open();
|
||||
if (TurnOffMaterial is null) return;
|
||||
|
||||
_animatedSprite.Material = TurnOffMaterial;
|
||||
//_animatedSprite.Material = TurnOffMaterial;
|
||||
//((ShaderMaterial)_animatedSprite.Material).Shader = TurnOffShader;
|
||||
_ = AnimateShutdownAsync();
|
||||
}
|
||||
|
|
@ -37,17 +37,17 @@ public partial class ForceField : Door
|
|||
base.Close();
|
||||
|
||||
if (ActiveMaterial is null) return;
|
||||
_animatedSprite.Material = ActiveMaterial;
|
||||
//_animatedSprite.Material = ActiveMaterial;
|
||||
//((ShaderMaterial)_animatedSprite.Material).Shader = ActiveShader;
|
||||
}
|
||||
|
||||
private void SetShaderTeleportProgress(float value)
|
||||
{
|
||||
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("teleport_progress", value);
|
||||
//((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("teleport_progress", value);
|
||||
}
|
||||
|
||||
private void SetShaderScanlineDensity(float value)
|
||||
{
|
||||
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("scanline_density", value);
|
||||
//((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("scanline_density", value);
|
||||
}
|
||||
}
|
||||
1
Scripts/Activables/LightBridge.cs.uid
Normal file
1
Scripts/Activables/LightBridge.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dgienjn07p5mt
|
||||
29
Scripts/Components/Actors/DoorSpriteComponent.cs
Normal file
29
Scripts/Components/Actors/DoorSpriteComponent.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class DoorSpriteComponent : AnimatedSprite2D
|
||||
{
|
||||
protected Door _door;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
|
||||
_door = GetParent<Door>();
|
||||
|
||||
_door.DoorOpened += DoorOpened;
|
||||
_door.DoorClosed += DoorClosed;
|
||||
}
|
||||
|
||||
protected virtual void DoorClosed()
|
||||
{
|
||||
this.Play("Closing");
|
||||
}
|
||||
|
||||
protected virtual void DoorOpened()
|
||||
{
|
||||
this.Play("Opening");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
1
Scripts/Components/Actors/DoorSpriteComponent.cs.uid
Normal file
1
Scripts/Components/Actors/DoorSpriteComponent.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://bbuhaam28lwld
|
||||
39
Scripts/Components/Actors/ForceFieldCollisionDisabler.cs
Normal file
39
Scripts/Components/Actors/ForceFieldCollisionDisabler.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class ForceFieldCollisionDisabler : CollisionShape2D
|
||||
{
|
||||
[Export]
|
||||
protected Door _door;
|
||||
|
||||
[Export]
|
||||
public bool Invert { get; private set; } = false;
|
||||
public override void _Ready()
|
||||
{
|
||||
//_door = GetParent<Door>();
|
||||
|
||||
_door.DoorOpened += DoorOpened;
|
||||
_door.DoorClosed += DoorClosed;
|
||||
}
|
||||
|
||||
protected virtual void DoorClosed()
|
||||
{
|
||||
CallDeferred(MethodName.Enable);
|
||||
}
|
||||
|
||||
private void Disable()
|
||||
{
|
||||
this.Disabled = !Invert;
|
||||
}
|
||||
|
||||
protected virtual void DoorOpened()
|
||||
{
|
||||
CallDeferred(MethodName.Disable);
|
||||
}
|
||||
|
||||
private void Enable()
|
||||
{
|
||||
this.Disabled = Invert;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://crpkvxepkcrir
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class ForceFieldMaterialAnimationHandler : Node2D
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://dmi8k8ogkwogi
|
||||
48
Scripts/Components/Actors/ForceFieldSpriteComponent.cs
Normal file
48
Scripts/Components/Actors/ForceFieldSpriteComponent.cs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
using System.Threading.Tasks;
|
||||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class ForceFieldSpriteComponent : DoorSpriteComponent
|
||||
{
|
||||
[Export]
|
||||
public Material TurnOffMaterial { get; private set; }
|
||||
|
||||
[Export]
|
||||
public Material ActiveMaterial { get; private set; }
|
||||
|
||||
protected override void DoorOpened()
|
||||
{
|
||||
base.DoorOpened();
|
||||
if (TurnOffMaterial is null) return;
|
||||
|
||||
this.Material = TurnOffMaterial;
|
||||
_ = AnimateShutdownAsync();
|
||||
}
|
||||
|
||||
protected override void DoorClosed()
|
||||
{
|
||||
base.DoorClosed();
|
||||
if (ActiveMaterial is null) return;
|
||||
this.Material = ActiveMaterial;
|
||||
}
|
||||
|
||||
protected async Task AnimateShutdownAsync()
|
||||
{
|
||||
Tween tween = GetTree().CreateTween();
|
||||
tween.TweenMethod(Callable.From((float value) => SetShaderScanlineDensity(value)), 0f, 50f, 0.5);
|
||||
tween.Parallel().TweenMethod(Callable.From((float value) => SetShaderTeleportProgress(value)), 0f, 1f, 0.5);
|
||||
|
||||
await ToSignal(tween, "finished");
|
||||
}
|
||||
|
||||
private void SetShaderTeleportProgress(float value)
|
||||
{
|
||||
((ShaderMaterial)this.Material).SetShaderParameter("teleport_progress", value);
|
||||
}
|
||||
|
||||
private void SetShaderScanlineDensity(float value)
|
||||
{
|
||||
((ShaderMaterial)this.Material).SetShaderParameter("scanline_density", value);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://cvsrm74jftau8
|
||||
57
Scripts/Components/Actors/LightBridgeSpriteComponent.cs
Normal file
57
Scripts/Components/Actors/LightBridgeSpriteComponent.cs
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
using System.Threading.Tasks;
|
||||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class LightBridgeSpriteComponent : Sprite2D
|
||||
{
|
||||
[Export]
|
||||
public Material TurnOffMaterial { get; private set; }
|
||||
|
||||
[Export]
|
||||
public Material ActiveMaterial { get; private set; }
|
||||
|
||||
protected Door _door;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
|
||||
_door = GetParent<Door>();
|
||||
|
||||
_door.DoorOpened += DoorOpened;
|
||||
_door.DoorClosed += DoorClosed;
|
||||
}
|
||||
|
||||
protected virtual void DoorOpened()
|
||||
{
|
||||
if (TurnOffMaterial is null) return;
|
||||
|
||||
this.Material = TurnOffMaterial;
|
||||
_ = AnimateShutdownAsync();
|
||||
}
|
||||
|
||||
protected virtual void DoorClosed()
|
||||
{
|
||||
if (ActiveMaterial is null) return;
|
||||
this.Material = ActiveMaterial;
|
||||
}
|
||||
|
||||
protected async Task AnimateShutdownAsync()
|
||||
{
|
||||
Tween tween = GetTree().CreateTween();
|
||||
tween.TweenMethod(Callable.From((float value) => SetShaderScanlineDensity(value)), 0f, 50f, 0.5);
|
||||
tween.Parallel().TweenMethod(Callable.From((float value) => SetShaderTeleportProgress(value)), 0f, 1f, 0.5);
|
||||
|
||||
await ToSignal(tween, "finished");
|
||||
}
|
||||
|
||||
private void SetShaderTeleportProgress(float value)
|
||||
{
|
||||
((ShaderMaterial)this.Material).SetShaderParameter("teleport_progress", value);
|
||||
}
|
||||
|
||||
private void SetShaderScanlineDensity(float value)
|
||||
{
|
||||
((ShaderMaterial)this.Material).SetShaderParameter("scanline_density", value);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://cwnfsmogt11mn
|
||||
|
|
@ -15,6 +15,8 @@ public partial class PlayerDamageReceiver : Area2D
|
|||
private ActorResourceProvider _healthProvider;
|
||||
[Export]
|
||||
private ActorResourceProvider _shieldProvider;
|
||||
|
||||
[Export] public StringName AcidGroupName { get; private set; } = "Acid";
|
||||
|
||||
[Signal]
|
||||
public delegate void HealthChangedEventHandler(float newValue, float maxValue);
|
||||
|
|
@ -88,10 +90,23 @@ public partial class PlayerDamageReceiver : Area2D
|
|||
{
|
||||
if (!Enabled) return;
|
||||
if (Invulnerable) return;
|
||||
if (area.IsInGroup(AcidGroupName))
|
||||
{
|
||||
// Handle acid death
|
||||
AcidDeath();
|
||||
return;
|
||||
}
|
||||
if (area is not Bullet bullet || bullet.BulletOwner == BulletGroup) return;
|
||||
this.Hit(bullet.Damage, bullet.DamageType);
|
||||
bullet.RequestCollisionDestruction();
|
||||
}
|
||||
|
||||
private void AcidDeath()
|
||||
{
|
||||
if (!Enabled) return;
|
||||
GD.Print("Acid death");
|
||||
_healthProvider.CurrentResource = 0;
|
||||
}
|
||||
|
||||
public void Hit(float damage, DamageType type = DamageType.Neutral)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ using Cirno.Scripts;
|
|||
|
||||
public partial class Door : Activable
|
||||
{
|
||||
protected AnimatedSprite2D _animatedSprite;
|
||||
protected CollisionShape2D _collisionShape;
|
||||
protected CollisionShape2D _solidShape;
|
||||
// protected AnimatedSprite2D _animatedSprite;
|
||||
//protected CollisionShape2D _collisionShape;
|
||||
//protected CollisionShape2D _solidShape;
|
||||
|
||||
protected AudioStreamPlayer2D _activationSound;
|
||||
protected AudioStreamPlayer2D _deactivationSound;
|
||||
|
|
@ -21,12 +21,15 @@ public partial class Door : Activable
|
|||
|
||||
[Signal]
|
||||
public delegate void DoorClosedEventHandler();
|
||||
|
||||
[Signal]
|
||||
public delegate void DestroyedEventHandler();
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_animatedSprite = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
|
||||
_collisionShape = GetNode<CollisionShape2D>("CollisionShape2D");
|
||||
_solidShape = GetNode<CollisionShape2D>("RigidBody2D/CollisionShape2D");
|
||||
// _animatedSprite = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
|
||||
//_collisionShape = GetNode<CollisionShape2D>("CollisionShape2D");
|
||||
//_solidShape = GetNode<CollisionShape2D>("RigidBody2D/CollisionShape2D");
|
||||
|
||||
_activationSound = GetNodeOrNull<AudioStreamPlayer2D>("ActivationSound");
|
||||
_deactivationSound = GetNodeOrNull<AudioStreamPlayer2D>("DeactivationSound");
|
||||
|
|
@ -41,35 +44,39 @@ public partial class Door : Activable
|
|||
|
||||
public virtual void Open()
|
||||
{
|
||||
_animatedSprite.Play("Opening");
|
||||
// _animatedSprite.Play("Opening");
|
||||
State = DoorState.Open;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, true);
|
||||
_deactivationSound?.Play();
|
||||
EmitSignal(SignalName.DoorOpened);
|
||||
//_collisionShape.Disabled = true;
|
||||
//_solidShape.Disabled = true;
|
||||
}
|
||||
|
||||
public virtual void Close()
|
||||
{
|
||||
_animatedSprite.Play("Closing");
|
||||
// _animatedSprite.Play("Closing");
|
||||
State = DoorState.Closed;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, false);
|
||||
_activationSound?.Play();
|
||||
EmitSignal(SignalName.DoorClosed);
|
||||
//_collisionShape.Disabled = false;
|
||||
//_solidShape.Disabled = false;
|
||||
}
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
_animatedSprite.Play("Destroyed");
|
||||
// _animatedSprite.Play("Destroyed");
|
||||
|
||||
State = DoorState.Destroyed;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, true);
|
||||
EmitSignal(SignalName.Destroyed);
|
||||
}
|
||||
|
||||
private void DeferredDisableCollision(bool state)
|
||||
{
|
||||
_collisionShape.Disabled = state;
|
||||
_solidShape.Disabled = state;
|
||||
//_collisionShape.Disabled = state;
|
||||
//_solidShape.Disabled = state;
|
||||
}
|
||||
|
||||
public override void Activate(ActivationType activationType = ActivationType.Toggle)
|
||||
|
|
@ -136,20 +143,20 @@ public partial class Door : Activable
|
|||
}
|
||||
}
|
||||
|
||||
public void _on_animated_sprite_2d_animation_changed()
|
||||
{
|
||||
switch (_animatedSprite.Animation)
|
||||
{
|
||||
case "Opening":
|
||||
|
||||
break;
|
||||
case "Closing":
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// public void _on_animated_sprite_2d_animation_changed()
|
||||
// {
|
||||
// switch (_animatedSprite.Animation)
|
||||
// {
|
||||
// case "Opening":
|
||||
//
|
||||
// break;
|
||||
// case "Closing":
|
||||
//
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
public enum DoorState
|
||||
|
|
|
|||
6
Scripts/ShaderTools.cs
Normal file
6
Scripts/ShaderTools.cs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
namespace Cirno.Scripts;
|
||||
|
||||
public static class ShaderTools
|
||||
{
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue