Demon Wall Model Changes, Added pulsing to Pipes
This commit is contained in:
@@ -28,53 +28,53 @@ public partial class DemonWall : CharacterBody3D, IEnemy
|
||||
|
||||
public void OnReady()
|
||||
{
|
||||
CurrentHP = new AutoProp<double>(_enemyStatResource.MaximumHP);
|
||||
_attackTimer = new Timer { WaitTime = 5f };
|
||||
_attackTimer.Timeout += AttackTimer_Timeout;
|
||||
AddChild(_attackTimer);
|
||||
_damageCalculator = new DamageCalculator();
|
||||
CurrentHP.Sync += CurrentHP_Sync;
|
||||
CurrentHP = new AutoProp<double>(_enemyStatResource.MaximumHP);
|
||||
_attackTimer = new Timer { WaitTime = 5f };
|
||||
_attackTimer.Timeout += AttackTimer_Timeout;
|
||||
AddChild(_attackTimer);
|
||||
_damageCalculator = new DamageCalculator();
|
||||
CurrentHP.Sync += CurrentHP_Sync;
|
||||
}
|
||||
|
||||
private void CurrentHP_Sync(double newHP)
|
||||
{
|
||||
if (newHP <= 0)
|
||||
Die();
|
||||
if (newHP <= 0)
|
||||
Die();
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
EnemyModelView.Activate();
|
||||
SetPhysicsProcess(true);
|
||||
StartAttackTimer();
|
||||
EnemyModelView.Activate();
|
||||
SetPhysicsProcess(true);
|
||||
StartAttackTimer();
|
||||
}
|
||||
|
||||
private void AttackTimer_Timeout()
|
||||
{
|
||||
TakeAction();
|
||||
TakeAction();
|
||||
}
|
||||
|
||||
public void TakeAction()
|
||||
{
|
||||
EnemyModelView.Attack(_maximumWallMoveAmount);
|
||||
EnemyModelView.Attack(_maximumWallMoveAmount);
|
||||
}
|
||||
|
||||
public void Move(Vector3 velocity) => throw new System.NotImplementedException();
|
||||
|
||||
public void TakeDamage(double damage, ElementType elementType = ElementType.None, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false)
|
||||
{
|
||||
var damageTaken = _damageCalculator.CalculateDamage(
|
||||
damage,
|
||||
elementType,
|
||||
_enemyStatResource.CurrentDefense,
|
||||
_enemyStatResource.ElementalResistance,
|
||||
isCriticalHit,
|
||||
ignoreDefense,
|
||||
ignoreElementalResistance);
|
||||
var damageTaken = _damageCalculator.CalculateDamage(
|
||||
damage,
|
||||
elementType,
|
||||
_enemyStatResource.CurrentDefense,
|
||||
_enemyStatResource.ElementalResistance,
|
||||
isCriticalHit,
|
||||
ignoreDefense,
|
||||
ignoreElementalResistance);
|
||||
|
||||
CurrentHP.OnNext(CurrentHP.Value - damageTaken);
|
||||
GD.Print($"Demon Wall HP Left: {CurrentHP.Value}");
|
||||
EnemyModelView.PlayHitAnimation();
|
||||
CurrentHP.OnNext(CurrentHP.Value - damageTaken);
|
||||
GD.Print($"Demon Wall HP Left: {CurrentHP.Value}");
|
||||
EnemyModelView.PlayHitAnimation();
|
||||
}
|
||||
|
||||
public void Knockback(float impulse, Vector3 direction) => throw new System.NotImplementedException();
|
||||
@@ -89,9 +89,9 @@ public partial class DemonWall : CharacterBody3D, IEnemy
|
||||
|
||||
public async void Die()
|
||||
{
|
||||
CurrentHP.OnCompleted();
|
||||
EnemyModelView.PlayDeathAnimation();
|
||||
await ToSignal(GetTree().CreateTimer(0.8f), "timeout");
|
||||
CallDeferred(MethodName.QueueFree);
|
||||
CurrentHP.OnCompleted();
|
||||
EnemyModelView.PlayDeathAnimation();
|
||||
await ToSignal(GetTree().CreateTimer(0.8f), "timeout");
|
||||
CallDeferred(MethodName.QueueFree);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using System.Linq;
|
||||
@@ -26,79 +26,79 @@ public partial class DemonWallModelView : EnemyModelView3D
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
_opposingWall.Show();
|
||||
var collisionShape = _opposingWall.GetChildren().OfType<CollisionShape3D>().Single();
|
||||
collisionShape.SetDeferred(CollisionShape3D.PropertyName.Disabled, false);
|
||||
SetPhysicsProcess(true);
|
||||
_opposingWall.Show();
|
||||
var collisionShape = _opposingWall.GetChildren().OfType<CollisionShape3D>().Single();
|
||||
collisionShape.SetDeferred(CollisionShape3D.PropertyName.Disabled, false);
|
||||
SetPhysicsProcess(true);
|
||||
}
|
||||
|
||||
public void OnPhysicsProcess(double delta)
|
||||
{
|
||||
var direction = GlobalPosition.DirectionTo(_player.CurrentPosition).Normalized();
|
||||
var rotationAngle = GetRotationAngle(_rotation);
|
||||
RotateToPlayer(Eye, rotationAngle, 1f);
|
||||
var direction = GlobalPosition.DirectionTo(_player.CurrentPosition).Normalized();
|
||||
var rotationAngle = GetRotationAngle(_rotation);
|
||||
RotateToPlayer(Eye, rotationAngle, 1f);
|
||||
}
|
||||
|
||||
public void RotateToPlayer(Node3D rotateObject, float rotationAngle, float timeInSeconds)
|
||||
{
|
||||
var tweener = CreateTween();
|
||||
tweener.TweenMethod(Callable.From((float x) => RotateTowardsPlayer(rotateObject, x)), rotateObject.Rotation.Y, rotationAngle, timeInSeconds);
|
||||
var tweener = CreateTween();
|
||||
tweener.TweenMethod(Callable.From((float x) => RotateTowardsPlayer(rotateObject, x)), rotateObject.Rotation.Y, rotationAngle, timeInSeconds);
|
||||
}
|
||||
|
||||
public async void Attack(double maximumWallMoveAmount)
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
|
||||
var leftArms = new Godot.Collections.Array<DemonWallArm>(LeftArms.GetChildren().Cast<DemonWallArm>());
|
||||
var rightArms = new Godot.Collections.Array<DemonWallArm>(RightArms.GetChildren().Cast<DemonWallArm>());
|
||||
var leftArms = new Godot.Collections.Array<DemonWallArm>(LeftArms.GetChildren().Cast<DemonWallArm>());
|
||||
var rightArms = new Godot.Collections.Array<DemonWallArm>(RightArms.GetChildren().Cast<DemonWallArm>());
|
||||
|
||||
var leftArm = leftArms.PickRandom();
|
||||
var rightArm = rightArms.PickRandom();
|
||||
var leftArm = leftArms.PickRandom();
|
||||
var rightArm = rightArms.PickRandom();
|
||||
|
||||
leftArm.PrimaryAttack();
|
||||
rightArm.PrimaryAttack();
|
||||
leftArm.PrimaryAttack();
|
||||
rightArm.PrimaryAttack();
|
||||
|
||||
var arm1 = GetNode<DemonWallArm>("%Arm1");
|
||||
var arm2 = GetNode<DemonWallArm>("%Arm2");
|
||||
var arm7 = GetNode<DemonWallArm>("%Arm2");
|
||||
var arm1 = GetNode<DemonWallArm>("%Arm1");
|
||||
var arm2 = GetNode<DemonWallArm>("%Arm2");
|
||||
var arm7 = GetNode<DemonWallArm>("%Arm2");
|
||||
|
||||
if (leftArm == arm1)
|
||||
await AimAtPlayer(arm1, 2.1);
|
||||
if (leftArm == arm2)
|
||||
await AimAtPlayer(arm2, 1.5);
|
||||
if (leftArm == GetNode<DemonWallArm>("%Arm3") && _opposingWall.Position.Z > -maximumWallMoveAmount)
|
||||
MoveWall();
|
||||
if (rightArm == arm7)
|
||||
await AimAtPlayer(arm7, 2.5);
|
||||
if (leftArm == arm1)
|
||||
await AimAtPlayer(arm1, 2.1);
|
||||
if (leftArm == arm2)
|
||||
await AimAtPlayer(arm2, 1.5);
|
||||
if (leftArm == GetNode<DemonWallArm>("%Arm3") && _opposingWall.Position.Z > -maximumWallMoveAmount)
|
||||
MoveWall();
|
||||
if (rightArm == arm7)
|
||||
await AimAtPlayer(arm7, 2.5);
|
||||
}
|
||||
|
||||
private async Task AimAtPlayer(DemonWallArm arm, double animationLengthInSeconds)
|
||||
{
|
||||
var rotationAngle = GetRotationAngle(arm.GetNode<Node3D>("%Rotation"));
|
||||
RotateToPlayer(arm.GetNode<Node3D>("%Pivot"), rotationAngle, 0.3f);
|
||||
await ToSignal(GetTree().CreateTimer(animationLengthInSeconds), "timeout");
|
||||
RotateToPlayer(arm.GetNode<Node3D>("%Pivot"), 0, 0.3f);
|
||||
var rotationAngle = GetRotationAngle(arm.GetNode<Node3D>("%Rotation"));
|
||||
RotateToPlayer(arm.GetNode<Node3D>("%Pivot"), rotationAngle, 0.3f);
|
||||
await ToSignal(GetTree().CreateTimer(animationLengthInSeconds), "timeout");
|
||||
RotateToPlayer(arm.GetNode<Node3D>("%Pivot"), 0, 0.3f);
|
||||
}
|
||||
|
||||
private async void MoveWall()
|
||||
{
|
||||
await ToSignal(GetTree().CreateTimer(1.5f), "timeout");
|
||||
var tweener = CreateTween();
|
||||
tweener.TweenMethod(Callable.From((float x) => MoveWallTowardsPlayer(x)), _opposingWall.Position.Z, _opposingWall.Position.Z - 2, 3f);
|
||||
await ToSignal(GetTree().CreateTimer(1.5f), "timeout");
|
||||
var tweener = CreateTween();
|
||||
tweener.TweenMethod(Callable.From((float x) => MoveWallTowardsPlayer(x)), _opposingWall.Position.Z, _opposingWall.Position.Z - 2, 3f);
|
||||
}
|
||||
|
||||
private void MoveWallTowardsPlayer(float moveAmount)
|
||||
{
|
||||
_opposingWall.Position = new Vector3(_opposingWall.Position.X, _opposingWall.Position.Y, moveAmount);
|
||||
_opposingWall.Position = new Vector3(_opposingWall.Position.X, _opposingWall.Position.Y, moveAmount);
|
||||
}
|
||||
|
||||
private float GetRotationAngle(Node3D rotationNode)
|
||||
{
|
||||
var target = new Vector3(_player.CurrentPosition.X, Position.Y, _player.CurrentPosition.Z);
|
||||
rotationNode.LookAt(target, Vector3.Up, true);
|
||||
rotationNode.RotateY(Rotation.Y);
|
||||
return rotationNode.Rotation.Y;
|
||||
var target = new Vector3(_player.CurrentPosition.X, Position.Y, _player.CurrentPosition.Z);
|
||||
rotationNode.LookAt(target, Vector3.Up, true);
|
||||
rotationNode.RotateY(Rotation.Y);
|
||||
return rotationNode.Rotation.Y;
|
||||
}
|
||||
|
||||
private void RotateTowardsPlayer(Node3D rotationNode, float angle) => rotationNode.Rotation = new Vector3(rotationNode.Rotation.X, angle, rotationNode.Rotation.Z);
|
||||
|
||||
File diff suppressed because one or more lines are too long
BIN
Zennysoft.Game.Ma/src/enemy/enemy_types/16. demon wall/PIPE.glb
Normal file
BIN
Zennysoft.Game.Ma/src/enemy/enemy_types/16. demon wall/PIPE.glb
Normal file
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c0fn82t1wj1n8"
|
||||
path="res://.godot/imported/PIPE.glb-7590e7f2105c4683b379eab1c3387fa2.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/PIPE.glb"
|
||||
dest_files=["res://.godot/imported/PIPE.glb-7590e7f2105c4683b379eab1c3387fa2.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b1srfcp1sq3ac"
|
||||
path="res://.godot/imported/PIPE_PIPE2.jpg-668ab49b527fd993ab05c17abeac6017.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "f280b1532a0419eb2c045449bd6c39a2"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/PIPE_PIPE2.jpg"
|
||||
dest_files=["res://.godot/imported/PIPE_PIPE2.jpg-668ab49b527fd993ab05c17abeac6017.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkh83g7ce40i7"
|
||||
path="res://.godot/imported/concrete_0003_ao_1k.jpg-530c7acb835ff34efe84f61c02a9922a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/concrete_0003_ao_1k.jpg"
|
||||
dest_files=["res://.godot/imported/concrete_0003_ao_1k.jpg-530c7acb835ff34efe84f61c02a9922a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 784 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bmdaqk0y2gl2t"
|
||||
path="res://.godot/imported/concrete_0003_height_1k.png-f60f5b034d6c0e67cadb64776839ef83.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/concrete_0003_height_1k.png"
|
||||
dest_files=["res://.godot/imported/concrete_0003_height_1k.png-f60f5b034d6c0e67cadb64776839ef83.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cpvgy5t6shoex"
|
||||
path="res://.godot/imported/concrete_0003_normal_directx_1k.png-b850d518177cb5b9898e69e54975f28a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/concrete_0003_normal_directx_1k.png"
|
||||
dest_files=["res://.godot/imported/concrete_0003_normal_directx_1k.png-b850d518177cb5b9898e69e54975f28a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bx25c4uynoy1r"
|
||||
path="res://.godot/imported/concrete_0003_normal_opengl_1k.png-def589fd13e0639a920cfab0bdd72e91.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/concrete_0003_normal_opengl_1k.png"
|
||||
dest_files=["res://.godot/imported/concrete_0003_normal_opengl_1k.png-def589fd13e0639a920cfab0bdd72e91.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=1
|
||||
roughness/src_normal="res://src/enemy/enemy_types/16. demon wall/concrete_0003_normal_opengl_1k.png"
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brgmdx0p03syp"
|
||||
path="res://.godot/imported/concrete_0003_roughness_1k.jpg-fb7d820aa45576bf2b879bf8f51bdc43.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/enemy/enemy_types/16. demon wall/concrete_0003_roughness_1k.jpg"
|
||||
dest_files=["res://.godot/imported/concrete_0003_roughness_1k.jpg-fb7d820aa45576bf2b879bf8f51bdc43.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
Zennysoft.Game.Ma/src/map/assetts/spacestairs.glb
Normal file
BIN
Zennysoft.Game.Ma/src/map/assetts/spacestairs.glb
Normal file
Binary file not shown.
37
Zennysoft.Game.Ma/src/map/assetts/spacestairs.glb.import
Normal file
37
Zennysoft.Game.Ma/src/map/assetts/spacestairs.glb.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://2bf4hr7abrws"
|
||||
path="res://.godot/imported/spacestairs.glb-8bcea712473b20e5d337a5e25b12eef7.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://src/map/assetts/spacestairs.glb"
|
||||
dest_files=["res://.godot/imported/spacestairs.glb-8bcea712473b20e5d337a5e25b12eef7.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
@@ -1,4 +1,4 @@
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using System.Collections.Immutable;
|
||||
@@ -16,10 +16,10 @@ public partial class SpecialFloor : Node3D, IDungeonFloor
|
||||
|
||||
public void InitializeDungeon()
|
||||
{
|
||||
FloorIsLoaded = true;
|
||||
FloorIsLoaded = true;
|
||||
}
|
||||
|
||||
public bool FloorIsLoaded { get; set; }
|
||||
|
||||
public Transform3D GetPlayerSpawnPoint() => PlayerSpawn.GlobalTransform;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,72 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_disabled, diffuse_burley, specular_schlick_ggx;
|
||||
uniform vec4 albedo : source_color;
|
||||
uniform sampler2D texture_albedo : source_color, filter_linear_mipmap, repeat_enable;
|
||||
uniform ivec2 albedo_texture_size;
|
||||
uniform float point_size : hint_range(0.1, 128.0, 0.1);
|
||||
|
||||
uniform float roughness : hint_range(0.0, 1.0);
|
||||
uniform sampler2D texture_metallic : hint_default_white, filter_linear_mipmap, repeat_enable;
|
||||
uniform vec4 metallic_texture_channel;
|
||||
uniform sampler2D texture_roughness : hint_roughness_r, filter_linear_mipmap, repeat_enable;
|
||||
|
||||
uniform float specular : hint_range(0.0, 1.0, 0.01);
|
||||
uniform float metallic : hint_range(0.0, 1.0, 0.01);
|
||||
|
||||
uniform vec3 uv1_scale;
|
||||
uniform vec3 uv1_offset;
|
||||
uniform vec3 uv2_scale;
|
||||
uniform vec3 uv2_offset;
|
||||
|
||||
// Controls the frequency of the waves
|
||||
uniform float amount : hint_range(0.0, 100.0, 0.01) = 20.0;
|
||||
|
||||
// Controls the overall distortion intensity
|
||||
uniform float move = 1.0;
|
||||
|
||||
// Base height of the sinusoidal bands
|
||||
uniform float bandsize = 0.1;
|
||||
|
||||
// Speed of wave movement
|
||||
uniform float speed = 1.0;
|
||||
|
||||
void vertex() {
|
||||
// Center UV to create symmetrical effect
|
||||
vec2 uv = UV - 0.5;
|
||||
|
||||
// Adds movement with time
|
||||
uv.y += TIME * speed;
|
||||
|
||||
// Calculates animated sinusoidal value
|
||||
float wave = sin(uv.y * amount) + bandsize;
|
||||
|
||||
// Applies distortion along the sphere normal
|
||||
VERTEX += NORMAL * wave * move;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Center UV to keep the same pattern as vertex shader
|
||||
vec2 uv = UV - 0.5;
|
||||
|
||||
// Animates the waves on the Y axis
|
||||
uv.y += TIME * speed;
|
||||
|
||||
// Creates the same sinusoidal function to draw the pattern
|
||||
float wave = sin(uv.y * amount) + bandsize;
|
||||
|
||||
// Sets the band color based on the sinusoidal value
|
||||
ALBEDO = vec3(wave);
|
||||
|
||||
vec2 base_uv = UV;
|
||||
|
||||
vec4 albedo_tex = texture(texture_albedo, base_uv);
|
||||
ALBEDO = albedo.rgb * albedo_tex.rgb;
|
||||
|
||||
float metallic_tex = dot(texture(texture_metallic, base_uv), metallic_texture_channel);
|
||||
METALLIC = metallic_tex * metallic;
|
||||
SPECULAR = specular;
|
||||
|
||||
vec4 roughness_texture_channel = vec4(1.0, 0.0, 0.0, 0.0);
|
||||
float roughness_tex = dot(texture(texture_roughness, base_uv), roughness_texture_channel);
|
||||
ROUGHNESS = roughness_tex * roughness;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://cntrajooialrn
|
||||
69
Zennysoft.Game.Ma/src/map/map shaders/fancy Glass.gdshader
Normal file
69
Zennysoft.Game.Ma/src/map/map shaders/fancy Glass.gdshader
Normal file
@@ -0,0 +1,69 @@
|
||||
shader_type spatial;
|
||||
render_mode diffuse_burley, specular_schlick_ggx, blend_mix, depth_draw_always, cull_disabled;
|
||||
|
||||
group_uniforms albedo;
|
||||
uniform vec4 albedo : source_color = vec4(1.0, 1.0, 1.0, 0.0);
|
||||
uniform sampler2D albedo_texture : source_color, hint_default_white;
|
||||
|
||||
group_uniforms roughness;
|
||||
uniform float roughness : hint_range(0.0, 1.0) = 0.15;
|
||||
uniform sampler2D roughness_texture : hint_roughness_r;
|
||||
|
||||
group_uniforms refraction;
|
||||
uniform float refraction : hint_range(-16,16) = 0.5;
|
||||
uniform sampler2D texture_refraction : filter_linear_mipmap,repeat_enable;
|
||||
uniform vec4 refraction_texture_channel = vec4(1.0, 0.0, 0.0, 0.0);
|
||||
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_linear_mipmap;
|
||||
|
||||
group_uniforms normal;
|
||||
uniform float normal_strength : hint_range(-16.0, 16.0) = 0.0;
|
||||
uniform sampler2D normal_map : hint_normal;
|
||||
|
||||
group_uniforms misc;
|
||||
uniform vec4 edge_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
uniform float surface_contribution = 0.2;
|
||||
uniform float specular_contribution = 0.2;
|
||||
uniform float refraction_contribution = 1.0;
|
||||
|
||||
group_uniforms uv;
|
||||
uniform vec3 uv1_scale = vec3(1.0);
|
||||
uniform vec3 uv1_offset = vec3(0.0);
|
||||
|
||||
float SchlickFresnel(float u) {
|
||||
float m = 1.0 - u;
|
||||
float m2 = m * m;
|
||||
return m2 * m2 * m;
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
UV=UV*uv1_scale.xy+uv1_offset.xy;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
NORMAL_MAP = texture(normal_map, UV).xyz;
|
||||
NORMAL_MAP_DEPTH = normal_strength;
|
||||
|
||||
float VdotN = dot(VIEW, NORMAL);
|
||||
float fresnel = clamp(SchlickFresnel(VdotN), 0.0, 1.0);
|
||||
|
||||
vec4 albedo_mix = texture(albedo_texture, UV) * albedo;
|
||||
float roughness_mix = texture(roughness_texture, UV).r * roughness;
|
||||
|
||||
float a = mix(0.001, 1.0, albedo_mix.a);
|
||||
float a_factor_0 = mix(fresnel * edge_color.a, 1.0, a);
|
||||
float a_factor_1 = 0.5 * sqrt(a);
|
||||
float a_factor_2 = a_factor_0 + a_factor_1;
|
||||
|
||||
ALBEDO = mix(edge_color.rgb * edge_color.a, albedo_mix.rgb * surface_contribution, a);
|
||||
ROUGHNESS = roughness_mix;
|
||||
SPECULAR = 0.5 * inversesqrt(specular_contribution);
|
||||
|
||||
vec3 unpacked_normal = NORMAL_MAP;
|
||||
unpacked_normal.xy = unpacked_normal.xy * 2.0 - 1.0;
|
||||
unpacked_normal.z = sqrt(max(0.0, 1.0 - dot(unpacked_normal.xy, unpacked_normal.xy)));
|
||||
vec3 ref_normal = normalize(mix(NORMAL,TANGENT * unpacked_normal.x + BINORMAL * unpacked_normal.y + NORMAL * unpacked_normal.z,NORMAL_MAP_DEPTH));
|
||||
vec2 ref_ofs = SCREEN_UV - ref_normal.xy * dot(texture(texture_refraction, UV),refraction_texture_channel) * refraction;
|
||||
float ref_amount = 1.0 - albedo_mix.a;
|
||||
EMISSION += (textureLod(screen_texture,ref_ofs,ROUGHNESS * 8.0).rgb * ref_amount * EXPOSURE * mix(vec3(mix(0.02, 0.1, a)), albedo_mix.rgb*refraction_contribution, a))/a_factor_2;
|
||||
ALBEDO *= 1.0 - ref_amount;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://da3lre4umhlr7
|
||||
Reference in New Issue
Block a user