Add Movement library integration with comprehensive test environment: include Movement.csproj reference, create LibraryTest scene with player controller, multiple test areas (bunny hop platforms, surf ramps, vertical tower, speed corridor), advanced lighting setup, input mappings for WASD/gamepad movement controls, and DebugHUD integration

This commit is contained in:
William Stuckey
2025-12-30 20:42:57 -06:00
parent 1b5a3aeeb3
commit 1c12ea3567
178 changed files with 4934 additions and 6 deletions

246
Docs/LIBRARY_INTEGRATION.md Normal file
View File

@@ -0,0 +1,246 @@
# EinSoftworks Library Integration
This document describes how all EinSoftworks utility libraries are integrated into the Voider project.
## Integrated Libraries
All six EinSoftworks libraries are fully integrated and working together:
### ✅ EinSoftworks.Movement
- **Location**: `Libraries/movement`
- **Usage**: `FirstPersonController` for player movement
- **Features**: Bunny hopping, air strafing, crouching, sprinting
- **Integration**: TestPlayer.cs extends FirstPersonController
### ✅ EinSoftworks.Input
- **Location**: `Libraries/input`
- **Usage**: Input management via InputManager singleton
- **Features**: Action-based input, device detection, remapping
- **Integration**: Automatic via InputManager.Instance
### ✅ EinSoftworks.Events
- **Location**: `Libraries/events`
- **Usage**: Event system for decoupled communication
- **Features**: MovementEvents, EventBus, state notifications
- **Integration**: TestGameManager subscribes to movement events
### ✅ EinSoftworks.StateManagement
- **Location**: `Libraries/state-management`
- **Usage**: Movement state machine (idle, walking, airborne, crouching)
- **Features**: State transitions, hierarchical states
- **Integration**: Built into CharacterController
### ✅ EinSoftworks.Camera
- **Location**: `Libraries/camera`
- **Usage**: First-person camera with mouse look
- **Features**: Camera effects, smooth transitions
- **Integration**: CameraMount node in FirstPersonController
### ✅ EinSoftworks.Utilities
- **Location**: `Libraries/utilities`
- **Usage**: Math and physics helper functions
- **Features**: Vector operations, physics calculations
- **Integration**: Used internally by movement system
## Test Scene
**Location**: `Scenes/Testing/LibraryTest.tscn`
The test scene demonstrates all libraries working together in a fully functional first-person movement system.
### Components
1. **TestPlayer** (FirstPersonController)
- Full movement with all advanced mechanics
- Real-time UI updates
- Event publishing
2. **TestGameManager**
- Event subscription management
- Game state coordination
- Player reset functionality
3. **TestUI**
- Live stats display
- FPS counter
- Control instructions
4. **Environment**
- Floor, ramps, platforms
- Testing geometry for all movement types
## Project Configuration
### Voider.csproj
```xml
<ItemGroup>
<ProjectReference Include="..\..\libraries\utilities\Utilities.csproj" />
<ProjectReference Include="..\..\libraries\input\Input.csproj" />
<ProjectReference Include="..\..\libraries\events\Events.csproj" />
<ProjectReference Include="..\..\libraries\state-management\StateManagement.csproj" />
<ProjectReference Include="..\..\libraries\camera\Camera.csproj" />
<ProjectReference Include="..\..\libraries\movement\Movement.csproj" />
</ItemGroup>
```
### project.godot
Input actions configured:
- `move_forward` (W)
- `move_back` (S)
- `move_left` (A)
- `move_right` (D)
- `jump` (Space)
- `crouch` (Ctrl)
- `sprint` (Shift)
- `walk` (Ctrl)
Autoload configured:
- `EventManager` - Global event management
## Usage Examples
### Creating a Player Controller
```csharp
using EinSoftworks.Movement;
public partial class MyPlayer : FirstPersonController
{
public override void _Ready()
{
base._Ready();
Config = new MovementConfig
{
MaxSpeed = 320f,
EnableBunnyHopping = true
};
SubscribeToStateChanges(OnStateChanged);
}
private void OnStateChanged(MovementStateChangedEvent evt)
{
GD.Print($"State: {evt.StateName}");
}
}
```
### Subscribing to Events
```csharp
using EinSoftworks.Movement;
public override void _Ready()
{
MovementEvents.PlayerJumped += OnPlayerJumped;
MovementEvents.SpeedChanged += OnSpeedChanged;
}
private void OnPlayerJumped()
{
PlayJumpSound();
}
public override void _ExitTree()
{
MovementEvents.ClearAllSubscriptions();
}
```
### Using Input Manager
```csharp
using EinSoftworks.Input;
private InputManager _input;
public override void _Ready()
{
_input = InputManager.Instance;
}
public override void _Process(double delta)
{
if (_input.IsActionJustPressed("jump"))
{
Jump();
}
}
```
## Build Status
**Build Successful**
```
Build succeeded.
0 Warning(s)
0 Error(s)
```
All libraries compile and integrate without errors.
## Testing
To test the library integration:
1. Open the Voider project in Godot
2. Run the scene: `Scenes/Testing/LibraryTest.tscn`
3. Test movement mechanics:
- Walk around with WASD
- Jump with Space
- Sprint with Shift
- Crouch with Ctrl
- Try bunny hopping (jump + strafe)
- Test air strafing
4. Observe UI updates in real-time
5. Check console for event notifications
## Performance
Target: 60+ FPS
All libraries are optimized for real-time game performance.
## Future Integration
These libraries can be used throughout the Voider project:
- **Player Systems**: Use Movement + Input for all player characters
- **Camera Systems**: Use Camera library for different camera modes
- **UI Systems**: Use Events for UI updates and notifications
- **AI Systems**: Use StateManagement for enemy AI
- **Game Systems**: Use Events for game state management
## Troubleshooting
### Build Errors
- Ensure all library references are correct in .csproj
- Verify all libraries are in `../../libraries/` relative path
- Run `dotnet restore` if needed
### Runtime Errors
- Check that EventManager autoload is configured
- Verify input actions are defined in project.godot
- Ensure all using statements are present in scripts
### Movement Issues
- Verify collision shapes are properly configured
- Check that InputManager is available
- Ensure CameraNode is set on the controller
## Documentation
Each library has comprehensive documentation in its README:
- `/libraries/movement/README.md`
- `/libraries/input/README.md`
- `/libraries/events/README.md`
- `/libraries/state-management/README.md`
- `/libraries/camera/README.md`
- `/libraries/utilities/README.md`
## Support
For issues or questions about library integration, refer to:
1. Individual library READMEs
2. Test scene implementation (`Scripts/Testing/`)
3. Library planning document (`documentation/planning/UTILITY_PLANNING.md`)

121
LICENSE Normal file
View File

@@ -0,0 +1,121 @@
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

18
Scenes/Player/Player.tscn Normal file
View File

@@ -0,0 +1,18 @@
[gd_scene load_steps=3 format=3 uid="uid://bpyaqm4xwxqk"]
[ext_resource type="Script" path="res://Scripts/Player/Player.cs" id="1_script"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_player"]
radius = 0.4
height = 1.8
[node name="Player" type="CharacterBody3D"]
script = ExtResource("1_script")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_player")
[node name="CameraMount" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
[node name="Camera3D" type="Camera3D" parent="CameraMount"]

View File

@@ -0,0 +1,65 @@
# Enhanced Movement Test Map
## Design Philosophy
This test map is specifically designed to test Source Engine-style movement mechanics:
- Bunny hopping
- Air strafing
- Strafe jumping
- Surfing
- Crouch jumping
- Speed preservation
## Map Sections
### 1. Central Hub (Spawn)
- Large 100x100m floor
- Clear sightlines to all test areas
- Color-coded sections for easy navigation
### 2. Strafe Jump Course (Front-Right)
- Series of platforms requiring air strafing
- Progressive difficulty (gaps get wider)
- Tests momentum preservation and air control
### 3. Vertical Tower (Back-Left)
- Multi-level structure
- Tests jump height and climbing
- Crouch-jump challenges
### 4. Speed Corridor (Right)
- 50m straight corridor
- Distance markers every 10m
- Tests acceleration and max speed
### 5. Surf Ramps (Left)
- Multiple angled surfaces
- Tests surfing mechanics
- Speed gain/loss on slopes
### 6. Bunny Hop Track (Back)
- Flat area with markers
- Tests consecutive jumps
- Speed preservation measurement
### 7. Obstacle Course (Front-Left)
- Mixed challenges
- Stairs, walls, gaps, ramps
- Real-world movement scenarios
## Color Coding
- **Blue (Cyan with glow)**: Jump targets/platforms
- **Orange**: Ramps and slopes
- **Brown**: Stairs and steps
- **Red**: Walls and boundaries
- **Dark Gray**: Main floor
- **Green**: Speed markers (to be added)
## Recommended Additions
1. **Distance markers** - Visual indicators every 5-10m
2. **Height markers** - Show platform heights
3. **Speed zones** - Areas that show your speed
4. **Checkpoints** - For timing runs
5. **Respawn points** - Quick return to sections

View File

@@ -1,6 +1,386 @@
[gd_scene load_steps=2 format=3 uid="uid://c8yv7qm3xwxqj"]
[gd_scene load_steps=30 format=3 uid="uid://c8yv7qm3xwxqj"]
[ext_resource type="Script" path="res://Scripts/Testing/LibraryTest.cs" id="1_library_test"]
[ext_resource type="Script" uid="uid://dc5vhsqbhnpea" path="res://Scripts/Testing/TestGameManager.cs" id="1_test_manager"]
[ext_resource type="Texture2D" uid="uid://d2xg4ujj8ho6p" path="res://addons/kenney_prototype_textures/dark/texture_09.png" id="2_cr4a3"]
[ext_resource type="PackedScene" uid="uid://bpyaqm4xwxqk" path="res://Scenes/Player/Player.tscn" id="2_player"]
[ext_resource type="PackedScene" uid="uid://cx3oppvfp20t" path="res://Scenes/UI/DebugHUD.tscn" id="3_debug_hud"]
[ext_resource type="Texture2D" uid="uid://cpm5xlowyxqjj" path="res://addons/kenney_prototype_textures/orange/texture_05.png" id="3_x2nju"]
[node name="LibraryTest" type="Node"]
script = ExtResource("1_library_test")
[sub_resource type="Environment" id="Environment_1"]
background_mode = 1
background_color = Color(0.15, 0.18, 0.22, 1)
ambient_light_source = 2
ambient_light_color = Color(0.8, 0.85, 1, 1)
ambient_light_energy = 0.4
tonemap_mode = 2
tonemap_exposure = 1.3
ssao_enabled = true
ssao_radius = 1.5
glow_enabled = true
glow_strength = 1.2
glow_bloom = 0.3
[sub_resource type="BoxShape3D" id="BoxShape3D_floor"]
size = Vector3(200, 2, 200)
[sub_resource type="BoxMesh" id="BoxMesh_floor"]
lightmap_size_hint = Vector2i(2018, 1048)
uv2_padding = 9.38
size = Vector3(200, 2, 200)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x2nju"]
albedo_texture = ExtResource("2_cr4a3")
metallic = 0.4
roughness = 0.6
uv1_scale = Vector3(200, 200, 200)
[sub_resource type="BoxShape3D" id="BoxShape3D_platform"]
size = Vector3(6, 1, 6)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ocbyc"]
albedo_texture = ExtResource("3_x2nju")
[sub_resource type="BoxMesh" id="BoxMesh_platform"]
size = Vector3(6, 1, 6)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r1pjp"]
albedo_texture = ExtResource("3_x2nju")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_platform"]
albedo_color = Color(0.1, 0.6, 0.9, 1)
albedo_texture = ExtResource("3_x2nju")
metallic = 0.5
roughness = 0.4
emission_enabled = true
emission = Color(0.05, 0.3, 0.5, 1)
emission_energy_multiplier = 0.5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_i8e4c"]
albedo_texture = ExtResource("3_x2nju")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xwclk"]
albedo_texture = ExtResource("3_x2nju")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_eg5h4"]
albedo_texture = ExtResource("3_x2nju")
[sub_resource type="BoxShape3D" id="BoxShape3D_ramp"]
size = Vector3(12, 1, 25)
[sub_resource type="BoxMesh" id="BoxMesh_ramp"]
size = Vector3(12, 1, 25)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ramp"]
albedo_color = Color(0.9, 0.5, 0.2, 1)
metallic = 0.2
roughness = 0.7
emission_enabled = true
emission = Color(0.3, 0.15, 0.05, 1)
emission_energy_multiplier = 0.2
[sub_resource type="BoxShape3D" id="BoxShape3D_step"]
size = Vector3(8, 0.5, 8)
[sub_resource type="BoxMesh" id="BoxMesh_step"]
size = Vector3(8, 0.5, 8)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_step"]
albedo_color = Color(0.6, 0.4, 0.2, 1)
metallic = 0.1
roughness = 0.9
[sub_resource type="BoxShape3D" id="BoxShape3D_wall"]
size = Vector3(2, 5, 2)
[sub_resource type="BoxMesh" id="BoxMesh_wall"]
size = Vector3(2, 5, 2)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wall"]
albedo_color = Color(0.8, 0.2, 0.2, 1)
metallic = 0.3
roughness = 0.8
emission_enabled = true
emission = Color(0.3, 0.05, 0.05, 1)
emission_energy_multiplier = 0.3
[sub_resource type="CylinderShape3D" id="CylinderShape3D_pillar"]
height = 10.0
radius = 1.5
[sub_resource type="CylinderMesh" id="CylinderMesh_pillar"]
top_radius = 1.5
bottom_radius = 1.5
height = 10.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pillar"]
albedo_color = Color(0.3, 0.8, 0.4, 1)
metallic = 0.6
roughness = 0.3
emission_enabled = true
emission = Color(0.1, 0.3, 0.15, 1)
emission_energy_multiplier = 0.4
[node name="LibraryTest" type="Node3D"]
[node name="GameManager" type="Node" parent="."]
script = ExtResource("1_test_manager")
[node name="Environment" type="Node3D" parent="."]
[node name="WorldEnvironment" type="WorldEnvironment" parent="Environment"]
environment = SubResource("Environment_1")
[node name="DirectionalLight_Main" type="DirectionalLight3D" parent="Environment"]
transform = Transform3D(0.866025, -0.5, 0, 0.25, 0.433013, 0.866025, -0.433013, -0.75, 0.5, 0, 20, 0)
light_color = Color(1, 0.95, 0.85, 1)
light_energy = 1.5
shadow_enabled = true
shadow_bias = 0.03
shadow_blur = 2.0
[node name="DirectionalLight_Fill" type="DirectionalLight3D" parent="Environment"]
transform = Transform3D(-0.5, -0.866025, 0, -0.433013, 0.25, 0.866025, -0.75, 0.433013, -0.5, 0, 15, 0)
light_color = Color(0.6, 0.7, 1, 1)
light_energy = 0.3
[node name="OmniLight_Center" type="OmniLight3D" parent="Environment"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
light_energy = 3.0
shadow_enabled = true
omni_range = 50.0
[node name="OmniLight_North" type="OmniLight3D" parent="Environment"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, -40)
light_color = Color(0.3, 0.5, 1, 1)
light_energy = 4.0
shadow_enabled = true
omni_range = 35.0
[node name="OmniLight_South" type="OmniLight3D" parent="Environment"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 40)
light_color = Color(1, 0.5, 0.3, 1)
light_energy = 4.0
shadow_enabled = true
omni_range = 35.0
[node name="OmniLight_East" type="OmniLight3D" parent="Environment"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40, 8, 0)
light_color = Color(0.5, 1, 0.3, 1)
light_energy = 4.0
shadow_enabled = true
omni_range = 35.0
[node name="OmniLight_West" type="OmniLight3D" parent="Environment"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -40, 8, 0)
light_color = Color(1, 0.3, 0.8, 1)
light_energy = 4.0
shadow_enabled = true
omni_range = 35.0
[node name="Geometry" type="Node3D" parent="."]
[node name="MainFloor" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/MainFloor"]
shape = SubResource("BoxShape3D_floor")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/MainFloor"]
mesh = SubResource("BoxMesh_floor")
surface_material_override/0 = SubResource("StandardMaterial3D_x2nju")
[node name="BunnyHopCourse" type="Node3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -50, 0, 0)
[node name="Platform1" type="StaticBody3D" parent="Geometry/BunnyHopCourse"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/BunnyHopCourse/Platform1"]
shape = SubResource("BoxShape3D_platform")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/BunnyHopCourse/Platform1"]
material_override = SubResource("StandardMaterial3D_ocbyc")
mesh = SubResource("BoxMesh_platform")
surface_material_override/0 = SubResource("StandardMaterial3D_x2nju")
[node name="Platform2" type="StaticBody3D" parent="Geometry/BunnyHopCourse"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -10)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/BunnyHopCourse/Platform2"]
shape = SubResource("BoxShape3D_platform")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/BunnyHopCourse/Platform2"]
material_override = SubResource("StandardMaterial3D_r1pjp")
mesh = SubResource("BoxMesh_platform")
surface_material_override/0 = SubResource("StandardMaterial3D_platform")
[node name="Platform3" type="StaticBody3D" parent="Geometry/BunnyHopCourse"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -20)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/BunnyHopCourse/Platform3"]
shape = SubResource("BoxShape3D_platform")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/BunnyHopCourse/Platform3"]
material_override = SubResource("StandardMaterial3D_i8e4c")
mesh = SubResource("BoxMesh_platform")
surface_material_override/0 = SubResource("StandardMaterial3D_platform")
[node name="Platform4" type="StaticBody3D" parent="Geometry/BunnyHopCourse"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -32)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/BunnyHopCourse/Platform4"]
shape = SubResource("BoxShape3D_platform")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/BunnyHopCourse/Platform4"]
material_override = SubResource("StandardMaterial3D_xwclk")
mesh = SubResource("BoxMesh_platform")
surface_material_override/0 = SubResource("StandardMaterial3D_platform")
[node name="Platform5" type="StaticBody3D" parent="Geometry/BunnyHopCourse"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -46)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/BunnyHopCourse/Platform5"]
shape = SubResource("BoxShape3D_platform")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/BunnyHopCourse/Platform5"]
material_override = SubResource("StandardMaterial3D_eg5h4")
mesh = SubResource("BoxMesh_platform")
surface_material_override/0 = SubResource("StandardMaterial3D_platform")
[node name="SurfRamps" type="Node3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 50, 0, 0)
[node name="Ramp1" type="StaticBody3D" parent="Geometry/SurfRamps"]
transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/SurfRamps/Ramp1"]
shape = SubResource("BoxShape3D_ramp")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/SurfRamps/Ramp1"]
mesh = SubResource("BoxMesh_ramp")
surface_material_override/0 = SubResource("StandardMaterial3D_ramp")
[node name="Ramp2" type="StaticBody3D" parent="Geometry/SurfRamps"]
transform = Transform3D(-1, 0, 0, 0, 0.866025, 0.5, 0, 0.5, -0.866025, 0, 5, -30)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/SurfRamps/Ramp2"]
shape = SubResource("BoxShape3D_ramp")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/SurfRamps/Ramp2"]
mesh = SubResource("BoxMesh_ramp")
surface_material_override/0 = SubResource("StandardMaterial3D_ramp")
[node name="VerticalTower" type="Node3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60)
[node name="Level1" type="StaticBody3D" parent="Geometry/VerticalTower"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/VerticalTower/Level1"]
shape = SubResource("BoxShape3D_step")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/VerticalTower/Level1"]
mesh = SubResource("BoxMesh_step")
surface_material_override/0 = SubResource("StandardMaterial3D_step")
[node name="Level2" type="StaticBody3D" parent="Geometry/VerticalTower"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/VerticalTower/Level2"]
shape = SubResource("BoxShape3D_step")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/VerticalTower/Level2"]
mesh = SubResource("BoxMesh_step")
surface_material_override/0 = SubResource("StandardMaterial3D_step")
[node name="Level3" type="StaticBody3D" parent="Geometry/VerticalTower"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/VerticalTower/Level3"]
shape = SubResource("BoxShape3D_step")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/VerticalTower/Level3"]
mesh = SubResource("BoxMesh_step")
surface_material_override/0 = SubResource("StandardMaterial3D_step")
[node name="Level4" type="StaticBody3D" parent="Geometry/VerticalTower"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/VerticalTower/Level4"]
shape = SubResource("BoxShape3D_step")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/VerticalTower/Level4"]
mesh = SubResource("BoxMesh_step")
surface_material_override/0 = SubResource("StandardMaterial3D_step")
[node name="SpeedCorridor" type="Node3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 60)
[node name="WallLeft" type="StaticBody3D" parent="Geometry/SpeedCorridor"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 2.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/SpeedCorridor/WallLeft"]
shape = SubResource("BoxShape3D_wall")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/SpeedCorridor/WallLeft"]
mesh = SubResource("BoxMesh_wall")
surface_material_override/0 = SubResource("StandardMaterial3D_wall")
[node name="WallRight" type="StaticBody3D" parent="Geometry/SpeedCorridor"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 2.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/SpeedCorridor/WallRight"]
shape = SubResource("BoxShape3D_wall")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/SpeedCorridor/WallRight"]
mesh = SubResource("BoxMesh_wall")
surface_material_override/0 = SubResource("StandardMaterial3D_wall")
[node name="Pillars" type="Node3D" parent="Geometry"]
[node name="Pillar1" type="StaticBody3D" parent="Geometry/Pillars"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 5, -30)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/Pillars/Pillar1"]
shape = SubResource("CylinderShape3D_pillar")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/Pillars/Pillar1"]
mesh = SubResource("CylinderMesh_pillar")
surface_material_override/0 = SubResource("StandardMaterial3D_pillar")
[node name="Pillar2" type="StaticBody3D" parent="Geometry/Pillars"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 5, -30)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/Pillars/Pillar2"]
shape = SubResource("CylinderShape3D_pillar")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/Pillars/Pillar2"]
mesh = SubResource("CylinderMesh_pillar")
surface_material_override/0 = SubResource("StandardMaterial3D_pillar")
[node name="Pillar3" type="StaticBody3D" parent="Geometry/Pillars"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 5, 30)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/Pillars/Pillar3"]
shape = SubResource("CylinderShape3D_pillar")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/Pillars/Pillar3"]
mesh = SubResource("CylinderMesh_pillar")
surface_material_override/0 = SubResource("StandardMaterial3D_pillar")
[node name="Pillar4" type="StaticBody3D" parent="Geometry/Pillars"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 5, 30)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/Pillars/Pillar4"]
shape = SubResource("CylinderShape3D_pillar")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/Pillars/Pillar4"]
mesh = SubResource("CylinderMesh_pillar")
surface_material_override/0 = SubResource("StandardMaterial3D_pillar")
[node name="Player" parent="." instance=ExtResource("2_player")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
[node name="UI" type="CanvasLayer" parent="."]
[node name="DebugHUD" parent="UI" instance=ExtResource("3_debug_hud")]

156
Scenes/Testing/README.md Normal file
View File

@@ -0,0 +1,156 @@
# Library Integration Test Scene
This test scene demonstrates all EinSoftworks utility libraries working together in a single integrated environment.
## Libraries Tested
-**EinSoftworks.Movement** - First-person character controller with bunny hopping and air strafing
-**EinSoftworks.Input** - Input management and action handling
-**EinSoftworks.Events** - Event system for state changes and notifications
-**EinSoftworks.StateManagement** - Movement state machine (idle, walking, airborne, crouching)
-**EinSoftworks.Camera** - First-person camera with mouse look
-**EinSoftworks.Utilities** - Math and physics helpers
## Reusable Scene Files
### TestPlayer.tscn
A reusable first-person player character scene that can be instantiated in any level.
**Features:**
- Full movement system with advanced mechanics (bunny hopping, air strafing, crouching)
- Integrated camera with smooth crouch transitions
- Gamepad and keyboard/mouse support
- Optional UI integration (works standalone or with TestUI)
**Usage:**
```gdscript
# Instance the player scene
var player = preload("res://Scenes/Testing/TestPlayer.tscn").instantiate()
add_child(player)
player.position = Vector3(0, 2, 0)
# Optionally connect UI labels
player.SpeedVal = $UI/TestUI/StatsPanel/VBoxContainerValues/SpeedVal
player.StateVal = $UI/TestUI/StatsPanel/VBoxContainerValues/StateVal
# etc...
```
### TestUI.tscn
A reusable debug UI overlay showing real-time movement statistics.
**Features:**
- Stats panel with speed, state, position, and velocity
- Clean, non-intrusive bottom-left placement
- Automatically updates when connected to TestPlayer
**Usage:**
```gdscript
# Instance the UI scene
var ui_layer = CanvasLayer.new()
add_child(ui_layer)
var test_ui = preload("res://Scenes/Testing/TestUI.tscn").instantiate()
ui_layer.add_child(test_ui)
```
## Scene Components
### LibraryTest.tscn
The main integration test scene demonstrating all libraries working together.
**Components:**
- TestPlayer instance with full movement capabilities
- TestUI instance showing real-time stats
- TestGameManager for event handling and player reset
- Test environment (floor, ramp, platforms, walls)
### TestGameManager
- Manages game state and event subscriptions
- Listens to movement events
- Provides player reset functionality (Home key)
### Environment
- Large floor for movement testing
- Ramp for testing slope movement and surfing
- Multiple platforms for jump testing
- Wall boundaries
## Controls
| Key | Action |
|-----|--------|
| W/A/S/D | Move forward/left/back/right |
| Space | Jump |
| Shift | Sprint |
| Ctrl | Crouch |
| Mouse | Look around |
| ESC | Toggle mouse capture |
| Home | Reset player position |
## Testing Features
### Movement Mechanics
1. **Basic Movement**: Walk around using WASD
2. **Sprinting**: Hold Shift while moving for increased speed
3. **Crouching**: Hold Ctrl to crouch (reduces speed and height)
4. **Jumping**: Press Space to jump
5. **Bunny Hopping**: Jump repeatedly while strafing to gain speed
6. **Air Strafing**: Strafe left/right while in air and turn mouse to gain speed
7. **Surfing**: Run up the ramp and maintain speed on the slope
### State Management
Watch the State label change as you:
- Stand still (Idle)
- Move (Walking)
- Jump (Airborne)
- Crouch (Crouching)
### Event System
Check the console output for event notifications:
- Movement state changes
- Jump events
- Speed change events
## Expected Behavior
1. **Smooth Movement**: Character should accelerate and decelerate smoothly
2. **Air Control**: Should be able to change direction slightly while airborne
3. **Speed Preservation**: Speed should be maintained between jumps (bunny hopping)
4. **State Transitions**: States should change smoothly without glitches
5. **UI Updates**: All UI elements should update in real-time
6. **Event Flow**: Console should show event notifications
## Performance
Target: 60+ FPS on modern hardware
The FPS counter in the top-right shows current performance.
## Troubleshooting
### Mouse Not Captured
- Press ESC to toggle mouse capture mode
- Mouse must be captured for camera look to work
### Character Not Moving
- Verify input actions are defined in project.godot
- Check console for any error messages
- Ensure all libraries are properly referenced
### No UI Updates
- Check that UI labels are properly connected to TestPlayer
- Verify TestUI script is attached to the UI Control node
### Events Not Firing
- Check console output for event messages
- Verify EventManager autoload is configured
- Ensure event subscriptions in TestGameManager._Ready()
## Development Notes
This scene serves as both a test environment and a reference implementation for integrating all EinSoftworks libraries. You can use this as a template for your own game scenes.
The scene demonstrates:
- Proper library initialization
- Event subscription/unsubscription patterns
- UI integration with game systems
- State management integration
- Input handling best practices

View File

@@ -0,0 +1,255 @@
# Library Test Map Guide
This test map is designed to comprehensively test all movement mechanics from the EinSoftworks.Movement library.
## Map Layout
### Spawn Area (Center)
- **Location**: (0, 2, 0)
- **Purpose**: Starting point with clear view of all test areas
- **Features**: Large open floor for basic movement testing
### Test Areas
#### 1. Stairs (Right Side - Position: 10, 0, -10)
- **Purpose**: Test vertical movement and step climbing
- **Features**: 4 steps, each 0.5m high
- **Tests**:
- Walking up stairs smoothly
- Step height handling
- Momentum preservation on steps
- Crouch movement on stairs
#### 2. Jump Gap (Left Side - Position: -20, 0, 0)
- **Purpose**: Test jump distance and height
- **Features**: Two platforms with 12m gap between them
- **Tests**:
- Basic jump distance (should NOT be able to cross without sprint)
- Sprint + jump distance (should be able to cross)
- Landing mechanics
- Edge detection
#### 3. Speed Test Corridor (Right Side - Position: 20, 0, 0)
- **Purpose**: Test acceleration and max speed
- **Features**: 20m long corridor with walls
- **Tests**:
- Acceleration from standstill
- Time to reach max speed
- Sprint speed comparison
- Friction/deceleration when stopping
#### 4. Gentle Ramp (Right Front - Position: 15, 2, 0)
- **Purpose**: Test slope movement
- **Features**: ~30° incline ramp
- **Tests**:
- Walking up slopes
- Sliding down slopes
- Speed preservation on slopes
- Basic surfing mechanics
#### 5. Steep Ramp (Left Back - Position: -15, 3, 10)
- **Purpose**: Test steep slope handling and surfing
- **Features**: 45° incline ramp
- **Tests**:
- Steep slope climbing
- Advanced surfing
- Speed gain on steep surfaces
- Slope angle limits
#### 6. Original Platforms (Left Back - Positions: -10, 2, -10 and -10, 4, -20)
- **Purpose**: Test vertical jumping and platforming
- **Features**: Two platforms at different heights
- **Tests**:
- Single jump height (2m)
- Double platform jumping
- Precision landing
- Air control
## Movement Testing Checklist
### Basic Movement
- [ ] Walk forward/back/left/right smoothly
- [ ] Diagonal movement works correctly
- [ ] Stopping is responsive (friction works)
- [ ] Movement speed feels appropriate
### Sprint
- [ ] Sprint increases speed noticeably
- [ ] Sprint + jump covers more distance
- [ ] Can sprint in all directions
- [ ] Sprint speed cap is working
### Jumping
- [ ] Jump height is consistent (~1.5-2m)
- [ ] Can jump while moving
- [ ] Landing doesn't cause stutter
- [ ] Jump cooldown works (if enabled)
### Crouching
- [ ] Crouch reduces height
- [ ] Crouch reduces speed
- [ ] Can move while crouched
- [ ] Can't stand up when blocked
### Air Control
- [ ] Can change direction slightly in air
- [ ] Air strafing works
- [ ] Momentum is preserved
- [ ] Gravity feels natural
### Stairs
- [ ] Can walk up stairs smoothly
- [ ] No stuttering on steps
- [ ] Can jump up stairs
- [ ] Can crouch on stairs
### Slopes
- [ ] Can walk up gentle slopes
- [ ] Slides down steep slopes appropriately
- [ ] Surfing mechanics work
- [ ] Speed changes on slopes feel right
### Bunny Hopping (if enabled)
- [ ] Can chain jumps
- [ ] Speed increases with successful hops
- [ ] Direction control while hopping
- [ ] Speed cap is enforced
## Recommended Movement Values
Based on testing, here are suggested value ranges:
### Speed Settings (m/s)
```csharp
MaxSpeed = 5f; // Base walking speed
MaxSprintSpeed = 8f; // Sprint speed (1.6x walk)
MaxWalkSpeed = 3f; // Slow walk
MaxCrouchSpeed = 2f; // Crouch speed (0.4x walk)
```
### Acceleration & Friction
```csharp
Acceleration = 8f; // How fast you reach max speed
AirAcceleration = 2f; // Air control strength
Friction = 6f; // How fast you stop
StopSpeed = 1f; // Speed threshold for friction
```
### Jump & Gravity
```csharp
JumpVelocity = 5f; // Initial jump speed (gives ~1.5m height)
Gravity = 15f; // Downward acceleration
```
## Testing Procedures
### 1. Basic Movement Test (2 minutes)
1. Spawn in center
2. Walk in all 8 directions
3. Test stopping from full speed
4. Try diagonal movement
5. **Expected**: Smooth, responsive movement
### 2. Sprint Test (1 minute)
1. Sprint forward in Speed Test Corridor
2. Time how long to reach max speed
3. Try sprint jumping
4. **Expected**: Noticeable speed increase, ~1-2 seconds to max speed
### 3. Jump Test (3 minutes)
1. Jump in place 5 times
2. Jump while moving forward
3. Try to cross Jump Gap without sprint (should fail)
4. Sprint + jump across Jump Gap (should succeed)
5. **Expected**: Consistent jump height, gap requires sprint
### 4. Stairs Test (2 minutes)
1. Walk up stairs normally
2. Sprint up stairs
3. Jump up stairs
4. Crouch on stairs
5. **Expected**: Smooth climbing, no stuttering
### 5. Slope Test (3 minutes)
1. Walk up Gentle Ramp
2. Run down Gentle Ramp
3. Try to walk up Steep Ramp
4. Surf down Steep Ramp
5. **Expected**: Can climb gentle, slides on steep, surfing works
### 6. Advanced Test (5 minutes)
1. Try bunny hopping across main floor
2. Test air strafing while jumping
3. Try crouch jumping for extra height
4. Test edge cases (corners, tight spaces)
5. **Expected**: Advanced mechanics work as designed
## Tuning Guide
### Movement Feels Too Slow
- Increase `MaxSpeed` and `MaxSprintSpeed`
- Increase `Acceleration`
- Decrease `Friction`
### Movement Feels Too Fast
- Decrease `MaxSpeed` and `MaxSprintSpeed`
- Decrease `Acceleration`
- Increase `Friction`
### Can't Climb Stairs
- Decrease `StepHeight` in config
- Increase `Acceleration`
- Check collision shape height
### Jumps Too High/Low
- Adjust `JumpVelocity` (higher = higher jumps)
- Adjust `Gravity` (higher = falls faster)
- Test with: height = (JumpVelocity²) / (2 * Gravity)
### Slides Too Much
- Increase `Friction`
- Decrease `StopSpeed`
- Check surface friction values
### Air Control Issues
- Adjust `AirAcceleration` (higher = more control)
- Adjust `AirSpeedCap` (limits air speed gain)
- Check `AirControl` value
## Debug Commands
While testing, these debug outputs are helpful:
```csharp
EnableDebugOutput = true; // Shows speed and state in console
```
Watch for:
- Speed values (should match expected ranges)
- State transitions (idle → walking → airborne)
- OnFloor status (true when grounded)
## Known Issues to Test For
1. **Stuck on edges**: Can player get stuck on platform edges?
2. **Stair stuttering**: Does movement stutter when climbing stairs?
3. **Slope sliding**: Does player slide uncontrollably on slopes?
4. **Air control**: Can player change direction reasonably in air?
5. **Speed capping**: Does bunny hopping break speed limits?
6. **Crouch stuck**: Can player get stuck in crouch state?
## Performance Targets
- **FPS**: Maintain 60 FPS with debug output enabled
- **Input Latency**: Movement should feel instant (<1 frame delay)
- **State Transitions**: Should be smooth and immediate
- **Physics**: No jittering or stuttering during normal movement
## Next Steps
After testing this map:
1. Document any issues found
2. Adjust movement values in `TestPlayer.cs`
3. Test specific mechanics that felt off
4. Create additional test scenarios if needed
5. Consider adding visual markers (distance indicators, height markers)

65
Scenes/UI/DebugHUD.tscn Normal file
View File

@@ -0,0 +1,65 @@
[gd_scene load_steps=2 format=3 uid="uid://cx3oppvfp20t"]
[ext_resource type="Script" path="res://Scripts/UI/DebugHUD.cs" id="1_script"]
[node name="DebugHUD" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_script")
[node name="StatsPanel" type="PanelContainer" parent="."]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 5.0
offset_top = -125.0
offset_right = 205.0
offset_bottom = -5.0
grow_vertical = 0
[node name="VBoxContainerLabels" type="VBoxContainer" parent="StatsPanel"]
layout_mode = 2
size_flags_horizontal = 0
alignment = 1
[node name="SpeedLabel" type="Label" parent="StatsPanel/VBoxContainerLabels"]
layout_mode = 2
text = " Speed:"
[node name="StateLabel" type="Label" parent="StatsPanel/VBoxContainerLabels"]
layout_mode = 2
text = " State:"
[node name="PositionLabel" type="Label" parent="StatsPanel/VBoxContainerLabels"]
layout_mode = 2
text = " Position:"
[node name="VelocityLabel" type="Label" parent="StatsPanel/VBoxContainerLabels"]
layout_mode = 2
text = " Velocity:"
[node name="VBoxContainerValues" type="VBoxContainer" parent="StatsPanel"]
layout_mode = 2
size_flags_horizontal = 8
alignment = 1
[node name="SpeedVal" type="Label" parent="StatsPanel/VBoxContainerValues"]
layout_mode = 2
text = "0.0 u/s"
[node name="StateVal" type="Label" parent="StatsPanel/VBoxContainerValues"]
layout_mode = 2
text = "Idle"
[node name="PositionVal" type="Label" parent="StatsPanel/VBoxContainerValues"]
layout_mode = 2
text = "(0, 0, 0)"
[node name="VelocityVal" type="Label" parent="StatsPanel/VBoxContainerValues"]
layout_mode = 2
text = "(0, 0, 0)"

216
Scripts/Player/Player.cs Normal file
View File

@@ -0,0 +1,216 @@
using EinSoftworks.Events;
using EinSoftworks.Input;
using EinSoftworks.Movement;
using Godot;
namespace Voider.Player;
public partial class Player : FirstPersonController
{
[Export]
public Label SpeedVal { get; set; }
[Export]
public Label StateVal { get; set; }
[Export]
public Label PositionVal { get; set; }
[Export]
public Label VelocityVal { get; set; }
private float _lastSpeed = 0f;
public override void _Ready()
{
// InputManager is initialized by the library
InputManager = InputManager.Instance;
// Assign CameraNode from scene before calling base._Ready()
if (CameraNode == null)
{
CameraNode = GetNode<Node3D>("CameraMount");
}
// Set FOV and camera settings before base._Ready()
BaseFov = 75f;
MouseSensitivity = 0.35f;
ControllerSensitivity = 3.0f;
MinPitch = -89f;
MaxPitch = 89f;
EnableDebugOutput = true;
base._Ready();
// Try to find UI labels if they're not already assigned
// This allows the scene to work standalone or with external UI
if (SpeedVal == null || StateVal == null || PositionVal == null || VelocityVal == null)
{
// Try to find DebugHUD in the scene tree
var ui = GetNodeOrNull<Control>("/root/LibraryTest/UI/DebugHUD");
if (ui == null)
{
ui = GetNodeOrNull<Control>("/root/Main/UI/DebugHUD");
}
if (ui != null)
{
SpeedVal = ui.GetNodeOrNull<Label>("StatsPanel/VBoxContainerValues/SpeedVal");
StateVal = ui.GetNodeOrNull<Label>("StatsPanel/VBoxContainerValues/StateVal");
PositionVal = ui.GetNodeOrNull<Label>("StatsPanel/VBoxContainerValues/PositionVal");
VelocityVal = ui.GetNodeOrNull<Label>("StatsPanel/VBoxContainerValues/VelocityVal");
}
}
Config = new MovementConfig
{
// Base speeds (HL2-style)
MaxSpeed = 5f,
MaxSprintSpeed = 8f,
MaxWalkSpeed = 3f,
MaxCrouchSpeed = 2f,
Acceleration = 8f,
AirAcceleration = 1.5f,
AirSpeedCap = 8f,
AirControl = 0.3f,
Friction = 6f,
StopSpeed = 1f,
JumpVelocity = 5f,
Gravity = 15f,
// Bunny hopping with momentum preservation
EnableBunnyHopping = true,
EnableAutoHop = false,
BunnyHopSpeedMultiplier = 1.05f,
// Crouching
EnableCrouching = true,
CrouchHeight = 0.5f,
// Titanfall 2-style sliding
EnableSliding = true,
SlideSpeed = 10f,
SlideAcceleration = 15f,
SlideFriction = 3f,
SlideMinSpeed = 5f,
SlideJumpBoost = 1.2f,
SlideDuration = 1.2f,
EnableSurfing = true,
};
MouseSensitivity = 0.35f;
EnableDebugOutput = false;
GD.Print($"InputManager assigned: {InputManager != null}");
GD.Print($"CameraNode assigned: {CameraNode != null}");
GD.Print($"Config assigned: {Config != null}");
SubscribeToStateChanges(OnMovementStateChanged);
MovementEvents.PlayerJumped += OnPlayerJumped;
MovementEvents.SpeedChanged += OnSpeedChanged;
GD.Print("TestPlayer initialized with all libraries!");
GD.Print("- Movement: Enabled");
GD.Print("- Input: Enabled");
GD.Print("- Events: Enabled");
GD.Print("- StateManagement: Enabled");
GD.Print("- Camera: Enabled");
}
public override void _Process(double delta)
{
base._Process(delta);
UpdateUI();
}
private void UpdateUI()
{
if (SpeedVal != null)
{
SpeedVal.Text = $"{CurrentSpeed:F1} u/s ";
}
if (StateVal != null)
{
string state = "Unknown";
// Check crouch first since IsOnFloor() is unreliable when crouched
if (IsCrouching)
{
state = "Crouching";
}
else if (IsOnFloor())
{
if (WishDirection.LengthSquared() > 0.01f)
state = "Walking";
else
state = "Idle";
}
else
{
state = "Airborne";
}
StateVal.Text = $"{state} ";
}
if (PositionVal != null)
{
PositionVal.Text =
$"({GlobalPosition.X:F1}, {GlobalPosition.Y:F1}, {GlobalPosition.Z:F1}) ";
}
if (VelocityVal != null)
{
VelocityVal.Text = $"({Velocity.X:F1}, {Velocity.Y:F1}, {Velocity.Z:F1}) ";
}
}
private void OnMovementStateChanged(MovementStateChangedEvent evt)
{
GD.Print($"[Movement] State changed to: {evt.StateName} (Speed: {evt.Speed:F1})");
MovementEvents.RaiseStateChanged(evt.StateName);
}
private void OnPlayerJumped()
{
GD.Print($"[Event] Player jumped at speed: {CurrentSpeed:F1}");
}
private void OnSpeedChanged(float speed)
{
if (Mathf.Abs(speed - _lastSpeed) > 50f)
{
GD.Print($"[Event] Speed changed significantly: {_lastSpeed:F1} -> {speed:F1}");
_lastSpeed = speed;
}
}
public override void _Input(InputEvent @event)
{
base._Input(@event);
if (@event.IsActionPressed("ui_cancel"))
{
if (Godot.Input.MouseMode == Godot.Input.MouseModeEnum.Captured)
{
Godot.Input.MouseMode = Godot.Input.MouseModeEnum.Visible;
}
else
{
Godot.Input.MouseMode = Godot.Input.MouseModeEnum.Captured;
}
}
}
public override void _ExitTree()
{
MovementEvents.PlayerJumped -= OnPlayerJumped;
MovementEvents.SpeedChanged -= OnSpeedChanged;
base._ExitTree();
}
}

View File

@@ -0,0 +1 @@
uid://ckqlkvlsfck0d

View File

@@ -264,7 +264,9 @@ public partial class LibraryTest : Node
// Subscribe to camera events
_fpCamera.EventBus.Subscribe(evt =>
{
GD.Print($" → Camera event: {evt.OldMode} → {evt.NewMode} (Transition: {evt.TransitionTime}s)");
GD.Print(
$" → Camera event: {evt.OldMode} → {evt.NewMode} (Transition: {evt.TransitionTime}s)"
);
});
_fpCamera.CameraModeChanged += (oldMode, newMode) =>

View File

@@ -0,0 +1,74 @@
using EinSoftworks.Events;
using EinSoftworks.Input;
using EinSoftworks.Movement;
using Godot;
using Voider.Player;
namespace Voider.Testing;
public partial class TestGameManager : Node
{
[Export]
public Label InfoLabel { get; set; }
[Export]
public Player.Player Player { get; set; }
private InputManager _inputManager;
private float _gameTime = 0f;
public override void _Ready()
{
// InputManager is initialized by the library itself
_inputManager = InputManager.Instance;
MovementEvents.StateChanged += OnStateChanged;
MovementEvents.PlayerJumped += OnPlayerJumped;
if (InfoLabel != null)
{
InfoLabel.Text =
"Library Integration Test\nPress ESC to toggle mouse capture\nWASD to move, Space to jump, Shift to sprint, Ctrl to crouch";
}
GD.Print("=== Library Integration Test Started ===");
GD.Print("All EinSoftworks libraries loaded successfully!");
}
public override void _Process(double delta)
{
_gameTime += (float)delta;
if (_inputManager != null && _inputManager.IsActionJustPressed("ui_home"))
{
ResetPlayer();
}
}
private void OnStateChanged(string state)
{
GD.Print($"[GameManager] Movement state: {state}");
}
private void OnPlayerJumped()
{
GD.Print($"[GameManager] Player jumped at time: {_gameTime:F2}s");
}
private void ResetPlayer()
{
if (Player != null)
{
Player.GlobalPosition = new Vector3(0, 2, 0);
Player.Velocity = Vector3.Zero;
GD.Print("Player reset to spawn position");
}
}
public override void _ExitTree()
{
MovementEvents.StateChanged -= OnStateChanged;
MovementEvents.PlayerJumped -= OnPlayerJumped;
MovementEvents.ClearAllSubscriptions();
}
}

View File

@@ -0,0 +1 @@
uid://dc5vhsqbhnpea

16
Scripts/UI/DebugHUD.cs Normal file
View File

@@ -0,0 +1,16 @@
using Godot;
namespace Voider.UI;
public partial class DebugHUD : Control
{
[Export] public Label SpeedVal { get; set; }
[Export] public Label StateVal { get; set; }
[Export] public Label PositionVal { get; set; }
[Export] public Label VelocityVal { get; set; }
public override void _Ready()
{
Engine.MaxFps = 120;
}
}

View File

@@ -0,0 +1 @@
uid://caa7p7sqjhaw0

View File

@@ -12,5 +12,6 @@
<ProjectReference Include="..\..\libraries\events\Events.csproj" />
<ProjectReference Include="..\..\libraries\state-management\StateManagement.csproj" />
<ProjectReference Include="..\..\libraries\camera\Camera.csproj" />
<ProjectReference Include="..\..\libraries\movement\Movement.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,23 @@
Prototype Textures 1.0
Created/distributed by Kenney (www.kenney.nl)
Creation date: 08-04-2020
------------------------------
License: (Creative Commons Zero, CC0)
http://creativecommons.org/publicdomain/zero/1.0/
This content is free to use in personal, educational and commercial projects.
Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
------------------------------
Donate: http://support.kenney.nl
Request: http://request.kenney.nl
Patreon: http://patreon.com/kenney/
Follow on Twitter for updates:
http://twitter.com/KenneyNL

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://vs6yd07oo2fj"
path="res://.godot/imported/texture_01.png-60e3b3d3143b179c069dbcbff77ff160.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-60e3b3d3143b179c069dbcbff77ff160.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj0202al5l8i8"
path="res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2ioqsahn0ik6"
path="res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_03.png"
dest_files=["res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clqbl3gum43dh"
path="res://.godot/imported/texture_04.png-af505c12b2a7903458bb29299e718506.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_04.png"
dest_files=["res://.godot/imported/texture_04.png-af505c12b2a7903458bb29299e718506.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2ent0kcndetv"
path="res://.godot/imported/texture_05.png-ed8122ecdc41ff5aeccab84e8db1e4f0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_05.png"
dest_files=["res://.godot/imported/texture_05.png-ed8122ecdc41ff5aeccab84e8db1e4f0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1flp3bv1hjp4"
path="res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_06.png"
dest_files=["res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dnoc8ponyv5gg"
path="res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_07.png"
dest_files=["res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bd4xmmwji8npx"
path="res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_08.png"
dest_files=["res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d2xg4ujj8ho6p"
path.s3tc="res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_09.png"
dest_files=["res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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: 6.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d0tdnv6gb1s1m"
path="res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_10.png"
dest_files=["res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dtma0d54e8ln2"
path="res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_11.png"
dest_files=["res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://boqkhxq2yhvgg"
path="res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_12.png"
dest_files=["res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cjuk6qbytkl0p"
path="res://.godot/imported/texture_13.png-51cb3f38ea774c85cb3ad561d20c5b53.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_13.png"
dest_files=["res://.godot/imported/texture_13.png-51cb3f38ea774c85cb3ad561d20c5b53.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bnatcibtuclfq"
path="res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://8qx6ufxvrks3"
path="res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ec2o0tithw71"
path="res://.godot/imported/texture_03.png-3fec31a20982e9bd2e5e1aa731ea99cf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_03.png"
dest_files=["res://.godot/imported/texture_03.png-3fec31a20982e9bd2e5e1aa731ea99cf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7al08w1fyqii"
path="res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_04.png"
dest_files=["res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhm4qx2uw2qqp"
path="res://.godot/imported/texture_05.png-8448519b39c1d98d64cf807b48969765.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_05.png"
dest_files=["res://.godot/imported/texture_05.png-8448519b39c1d98d64cf807b48969765.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oqdp7y0nctaw"
path="res://.godot/imported/texture_06.png-01c48f82ab8bc613ec4efc2c2c669b12.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_06.png"
dest_files=["res://.godot/imported/texture_06.png-01c48f82ab8bc613ec4efc2c2c669b12.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhdrd52s1u2tb"
path="res://.godot/imported/texture_07.png-eec10b758cacbb71a02166a7f8cee6c0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_07.png"
dest_files=["res://.godot/imported/texture_07.png-eec10b758cacbb71a02166a7f8cee6c0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lxyffr0s1xpg"
path="res://.godot/imported/texture_08.png-d1888869b0d1d3a0ab2d517cbac7820a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_08.png"
dest_files=["res://.godot/imported/texture_08.png-d1888869b0d1d3a0ab2d517cbac7820a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0wfram6n0pol"
path="res://.godot/imported/texture_09.png-a21adfe1a090b0dd8f0d376d9ee5f68e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_09.png"
dest_files=["res://.godot/imported/texture_09.png-a21adfe1a090b0dd8f0d376d9ee5f68e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dmtig3y6rcgtq"
path="res://.godot/imported/texture_10.png-3f72abba172432380bd86a508e997833.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_10.png"
dest_files=["res://.godot/imported/texture_10.png-3f72abba172432380bd86a508e997833.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvj28yioslhil"
path="res://.godot/imported/texture_11.png-ad76ef70f9eb459fb1e8d9ba9cc092c4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_11.png"
dest_files=["res://.godot/imported/texture_11.png-ad76ef70f9eb459fb1e8d9ba9cc092c4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dirscv501u212"
path="res://.godot/imported/texture_12.png-d4577347200436d9060aa21fce76cd93.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_12.png"
dest_files=["res://.godot/imported/texture_12.png-d4577347200436d9060aa21fce76cd93.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://p0e5hrsjr72p"
path="res://.godot/imported/texture_13.png-f5b9867fd39cd83793f3a92217d9eac6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_13.png"
dest_files=["res://.godot/imported/texture_13.png-f5b9867fd39cd83793f3a92217d9eac6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clyvg7yeweaba"
path="res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ba3ry8rb2hlvx"
path="res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ccfkpdy0b4vlg"
path="res://.godot/imported/texture_03.png-6e55012c4e1c3f4d809747f3852d75ad.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_03.png"
dest_files=["res://.godot/imported/texture_03.png-6e55012c4e1c3f4d809747f3852d75ad.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cq4dok2ahbmfs"
path="res://.godot/imported/texture_04.png-201edfe05d5c4f7f54049864048cfaf1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_04.png"
dest_files=["res://.godot/imported/texture_04.png-201edfe05d5c4f7f54049864048cfaf1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6fj2jbf4qjfy"
path="res://.godot/imported/texture_05.png-07ce2eafef84a176bcf77bc59cb1f6ec.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_05.png"
dest_files=["res://.godot/imported/texture_05.png-07ce2eafef84a176bcf77bc59cb1f6ec.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://gib62vrtq038"
path="res://.godot/imported/texture_06.png-88331a9f246e47943dc01d0128a4ca4e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_06.png"
dest_files=["res://.godot/imported/texture_06.png-88331a9f246e47943dc01d0128a4ca4e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://tccdojl7g8lr"
path="res://.godot/imported/texture_07.png-ab5f4a6ad655d06104ea7939a06ec496.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_07.png"
dest_files=["res://.godot/imported/texture_07.png-ab5f4a6ad655d06104ea7939a06ec496.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bgmjhbqxtyxgc"
path="res://.godot/imported/texture_08.png-7b5c5c16cd076d2bbc9eeb33a454861b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_08.png"
dest_files=["res://.godot/imported/texture_08.png-7b5c5c16cd076d2bbc9eeb33a454861b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cibeaywjyawh2"
path="res://.godot/imported/texture_09.png-53f655f3d7e1722128f99e8aff9071f9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_09.png"
dest_files=["res://.godot/imported/texture_09.png-53f655f3d7e1722128f99e8aff9071f9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2fq0mbsd8ni4"
path="res://.godot/imported/texture_10.png-499479b9aaf089d55adf67874bc0ff66.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_10.png"
dest_files=["res://.godot/imported/texture_10.png-499479b9aaf089d55adf67874bc0ff66.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cptsu33sidiyu"
path="res://.godot/imported/texture_11.png-4e4ade9ab136614b6cf0b0e879f1d510.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_11.png"
dest_files=["res://.godot/imported/texture_11.png-4e4ade9ab136614b6cf0b0e879f1d510.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c4y5if608sp80"
path="res://.godot/imported/texture_12.png-8fe800bbb69d01cae0c0d84c062244bf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_12.png"
dest_files=["res://.godot/imported/texture_12.png-8fe800bbb69d01cae0c0d84c062244bf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://db0pd2xu03pnv"
path="res://.godot/imported/texture_13.png-a43b6ac63b0fe1c4a3f66335474e59b6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_13.png"
dest_files=["res://.godot/imported/texture_13.png-a43b6ac63b0fe1c4a3f66335474e59b6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cbvtrqjtllbe8"
path="res://.godot/imported/texture_01.png-2bf7db98e09b5b5073e8e8ca66419718.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/orange/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-2bf7db98e09b5b5073e8e8ca66419718.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b43k5f8a7v14a"
path="res://.godot/imported/texture_02.png-4eab4e19c2171e5b0668b65373b74c6d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/kenney_prototype_textures/orange/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-4eab4e19c2171e5b0668b65373b74c6d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Some files were not shown because too many files have changed in this diff Show More