mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-10 13:05:54 +00:00
Tutorial
This commit is contained in:
parent
8c3ed1f7c7
commit
b07a8fe60d
33 changed files with 594 additions and 58 deletions
|
|
@ -4,6 +4,8 @@ namespace Cirno.Scripts;
|
|||
|
||||
public partial class AlarmManager : Node2D
|
||||
{
|
||||
public static AlarmManager Instance { get; private set; }
|
||||
|
||||
public bool IsAlarmOn { get; private set; } = false;
|
||||
|
||||
public Vector2 LastAlarmPosition { get; private set; } = new Vector2();
|
||||
|
|
@ -14,6 +16,11 @@ public partial class AlarmManager : Node2D
|
|||
[Signal]
|
||||
public delegate void AlarmDisabledEventHandler();
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public void SoundAlarm(Vector2 location)
|
||||
{
|
||||
if (IsAlarmOn) return;
|
||||
|
|
|
|||
52
Scripts/Components/AlarmTrigger.cs
Normal file
52
Scripts/Components/AlarmTrigger.cs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components;
|
||||
|
||||
public partial class AlarmTrigger : Node2D
|
||||
{
|
||||
private AlarmManager _alarmManager;
|
||||
|
||||
[Export]
|
||||
public AlarmTriggerType TriggerType { get; private set; }
|
||||
|
||||
[Export]
|
||||
public Node2D Target { get; private set; }
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_alarmManager = this.GetAlarmManager(); //AlarmManager.Instance;
|
||||
if (TriggerType is AlarmTriggerType.OnEnabled)
|
||||
{
|
||||
_alarmManager.AlarmEnabled += AlarmManagerOnAlarmEnabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
_alarmManager.AlarmDisabled += AlarmManagerOnAlarmDisabled;
|
||||
}
|
||||
}
|
||||
|
||||
private void AlarmManagerOnAlarmDisabled()
|
||||
{
|
||||
Activate();
|
||||
}
|
||||
|
||||
private void AlarmManagerOnAlarmEnabled(Vector2 location)
|
||||
{
|
||||
Activate();
|
||||
}
|
||||
|
||||
private void Activate()
|
||||
{
|
||||
if (Target is IActivable activatable)
|
||||
{
|
||||
activatable.Activate();
|
||||
}
|
||||
}
|
||||
|
||||
public enum AlarmTriggerType
|
||||
{
|
||||
OnEnabled,
|
||||
OnDisabled
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,6 +45,13 @@ public partial class Door : Activable
|
|||
//_solidShape.Disabled = false;
|
||||
}
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
_animatedSprite.Play("Destroyed");
|
||||
State = DoorState.Destroyed;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, true);
|
||||
}
|
||||
|
||||
private void DeferredDisableCollision(bool state)
|
||||
{
|
||||
_collisionShape.Disabled = state;
|
||||
|
|
@ -56,30 +63,44 @@ public partial class Door : Activable
|
|||
switch (activationType)
|
||||
{
|
||||
case ActivationType.Toggle:
|
||||
switch (State)
|
||||
{
|
||||
case DoorState.Closed:
|
||||
Open();
|
||||
break;
|
||||
case DoorState.Open:
|
||||
Close();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
ToggleDoor();
|
||||
break;
|
||||
case ActivationType.Enable:
|
||||
Open();
|
||||
break;
|
||||
case ActivationType.Disable:
|
||||
Close();
|
||||
break;
|
||||
case ActivationType.Disable:
|
||||
Open();
|
||||
break;
|
||||
case ActivationType.Use:
|
||||
ToggleDoor();
|
||||
break;
|
||||
case ActivationType.Destroy:
|
||||
Destroy();
|
||||
break;
|
||||
case ActivationType.Open:
|
||||
Open();
|
||||
break;
|
||||
case ActivationType.Close:
|
||||
Close();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(activationType), activationType, null);
|
||||
ToggleDoor();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleDoor()
|
||||
{
|
||||
switch (State)
|
||||
{
|
||||
case DoorState.Closed:
|
||||
Open();
|
||||
break;
|
||||
case DoorState.Open:
|
||||
Close();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -93,6 +114,9 @@ public partial class Door : Activable
|
|||
case DoorState.Open:
|
||||
Open();
|
||||
break;
|
||||
case DoorState.Destroyed:
|
||||
Destroy();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
|
@ -117,5 +141,6 @@ public partial class Door : Activable
|
|||
public enum DoorState
|
||||
{
|
||||
Closed,
|
||||
Open
|
||||
Open,
|
||||
Destroyed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -195,11 +195,17 @@ public partial class GameManager : Node2D
|
|||
CameraTargetObject(_player);
|
||||
}
|
||||
|
||||
public void CameraTargetObject(Node2D target)
|
||||
public void CameraTargetObject(Node2D target, Vector2? offset = null)
|
||||
{
|
||||
if (_cameraTarget is null) return;
|
||||
_cameraTarget.Reparent(target, true);
|
||||
_cameraTarget.GlobalPosition = target.GlobalPosition;
|
||||
|
||||
if (offset.HasValue)
|
||||
{
|
||||
_cameraTarget.Position += offset.Value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void SpawnWeapons()
|
||||
|
|
|
|||
|
|
@ -11,5 +11,7 @@ public enum ActivationType
|
|||
Enable,
|
||||
Disable,
|
||||
Use,
|
||||
Destroy
|
||||
Destroy,
|
||||
Open,
|
||||
Close
|
||||
}
|
||||
21
Scripts/Resources/Events/CameraTargetEvent.cs
Normal file
21
Scripts/Resources/Events/CameraTargetEvent.cs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Resources.Events;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class CameraTargetEvent : CameraTargetPlayerEvent
|
||||
{
|
||||
[Export]
|
||||
public NodePath Target { get; private set; }
|
||||
|
||||
[Export]
|
||||
public Vector2 Offset { get; private set; }
|
||||
|
||||
public override void Start(Node2D parent)
|
||||
{
|
||||
GameManager.Instance.CameraTargetObject(parent.GetNode<Node2D>(Target), Offset);
|
||||
_isComplete = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
30
Scripts/Resources/Events/CameraTargetPlayerEvent.cs
Normal file
30
Scripts/Resources/Events/CameraTargetPlayerEvent.cs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Resources.Events;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class CameraTargetPlayerEvent : EventResource
|
||||
{
|
||||
protected bool _isComplete = false;
|
||||
|
||||
public override void Init(Node2D parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Start(Node2D parent)
|
||||
{
|
||||
GameManager.Instance.CameraTargetPlayer();
|
||||
_isComplete = true;
|
||||
}
|
||||
|
||||
public override void UpdateEvent(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override bool IsComplete()
|
||||
{
|
||||
return _isComplete;
|
||||
}
|
||||
}
|
||||
38
Scripts/Resources/Events/WaitEvent.cs
Normal file
38
Scripts/Resources/Events/WaitEvent.cs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
using System.Threading.Tasks;
|
||||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Resources.Events;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class WaitEvent : EventResource
|
||||
{
|
||||
[Export(PropertyHint.None, "suffix:s")]
|
||||
public float WaitTime { get; set; }
|
||||
protected bool _isComplete = false;
|
||||
|
||||
public override void Init(Node2D parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Start(Node2D parent)
|
||||
{
|
||||
_ = Wait();
|
||||
}
|
||||
|
||||
private async Task Wait()
|
||||
{
|
||||
await Task.Delay((int)(WaitTime)*1000);
|
||||
_isComplete = true;
|
||||
}
|
||||
|
||||
public override void UpdateEvent(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override bool IsComplete()
|
||||
{
|
||||
return _isComplete;
|
||||
}
|
||||
}
|
||||
10
Scripts/Resources/Events/tsconfig.json
Normal file
10
Scripts/Resources/Events/tsconfig.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2016",
|
||||
"module": "commonjs",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"skipLibCheck": true
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue