init commit
@@ -0,0 +1,7 @@
|
||||
list=[{
|
||||
"base": &"Node3D",
|
||||
"class": &"Terrain3DObjects",
|
||||
"icon": "",
|
||||
"language": &"GDScript",
|
||||
"path": "res://addons/terrain_3d/utils/terrain_3d_objects.gd"
|
||||
}]
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
|
||||
@@ -0,0 +1,22 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Test")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Test")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Test")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
6a69ce49b8ae7fbc67f796ccadb5ee060e7dfb54a6435785aa94d01f9fb4dc29
|
||||
@@ -0,0 +1,20 @@
|
||||
is_global = true
|
||||
build_property.GodotDisabledSourceGenerators =
|
||||
build_property.GodotProjectDir = /home/derek/Desktop/Polyphia-main/
|
||||
build_property.GodotProjectDirBase64 =
|
||||
build_property.GodotSourceGenerators =
|
||||
build_property.IsGodotToolsProject =
|
||||
build_property.TargetFramework = net6.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Test
|
||||
build_property.ProjectDir = /home/derek/Desktop/Polyphia-main/
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.EffectiveAnalysisLevelStyle = 6.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/home/derek/Desktop/Polyphia-main/Test.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/home/derek/Desktop/Polyphia-main/Test.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/home/derek/Desktop/Polyphia-main/Test.csproj",
|
||||
"projectName": "Test",
|
||||
"projectPath": "/home/derek/Desktop/Polyphia-main/Test.csproj",
|
||||
"packagesPath": "/home/derek/.nuget/packages/",
|
||||
"outputPath": "/home/derek/Desktop/Polyphia-main/.godot/mono/temp/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/home/derek/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net6.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/share/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net6.0": {
|
||||
"targetAlias": "net6.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.200"
|
||||
},
|
||||
"frameworks": {
|
||||
"net6.0": {
|
||||
"targetAlias": "net6.0",
|
||||
"dependencies": {
|
||||
"Godot.SourceGenerators": {
|
||||
"target": "Package",
|
||||
"version": "[4.3.0, )"
|
||||
},
|
||||
"GodotSharp": {
|
||||
"target": "Package",
|
||||
"version": "[4.3.0, )"
|
||||
},
|
||||
"GodotSharpEditor": {
|
||||
"target": "Package",
|
||||
"version": "[4.3.0, )"
|
||||
},
|
||||
"MsgPack.Cli": {
|
||||
"target": "Package",
|
||||
"version": "[1.0.1, )"
|
||||
},
|
||||
"Newtonsoft.Json": {
|
||||
"target": "Package",
|
||||
"version": "[13.0.3, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"downloadDependencies": [
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App.Ref",
|
||||
"version": "[6.0.36, 6.0.36]"
|
||||
}
|
||||
],
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/9.0.203/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/derek/.nuget/packages/</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/derek/.nuget/packages/</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.2</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="/home/derek/.nuget/packages/" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)godot.sourcegenerators/4.3.0/build/Godot.SourceGenerators.props" Condition="Exists('$(NuGetPackageRoot)godot.sourcegenerators/4.3.0/build/Godot.SourceGenerators.props')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "s2J7AxmpjrE=",
|
||||
"success": true,
|
||||
"projectFilePath": "/home/derek/Desktop/Polyphia-main/Test.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/home/derek/.nuget/packages/godot.sourcegenerators/4.3.0/godot.sourcegenerators.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/godotsharp/4.3.0/godotsharp.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/godotsharpeditor/4.3.0/godotsharpeditor.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/msgpack.cli/1.0.1/msgpack.cli.1.0.1.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.codedom/4.4.0/system.codedom.4.4.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.globalization/4.3.0/system.globalization.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.io/4.3.0/system.io.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.numerics.vectors/4.3.0/system.numerics.vectors.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.reflection/4.3.0/system.reflection.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.reflection.emit.ilgeneration/4.3.0/system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.runtime/4.3.0/system.runtime.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg.sha512",
|
||||
"/home/derek/.nuget/packages/microsoft.aspnetcore.app.ref/6.0.36/microsoft.aspnetcore.app.ref.6.0.36.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
Abilities
|
||||
Vitality = 25% more health
|
||||
Stamina = 25% more stamina w/ 25% faster recharge
|
||||
Strength = 25% more backpack weight allowance
|
||||
|
||||
To add a pickup item
|
||||
Add the item to the pickups folder
|
||||
Add the item to the ItemSpawner List
|
||||
Set the ID in the item metadata to match its spot in the list
|
||||
RPC cannot reside inside of Tool Scripts due to them not being the same replication across all peers
|
||||
|
||||
More weight slows player some
|
||||
Backpacks [more weight slows though]
|
||||
|
||||
Oddball style game
|
||||
Map that shows the relitive area of the top player
|
||||
|
||||
spawn with classes
|
||||
2 mags
|
||||
no attachments
|
||||
unlock guns with experience
|
||||
|
||||
final hit headshots = 20 credits
|
||||
final hit bodyshots = 10 credits
|
||||
|
||||
classes require credits to spawn with better stuff
|
||||
credits are transferrable between servers and sessions
|
||||
one dynamicly roaming entity of the night ( Impossible to kill, when near heart starts pumping and vinegrette ) - Focuses on odd baller
|
||||
goes after people possible to get away
|
||||
If oddball is stationary for a long time start to shrink map ring
|
||||
----Dynamic weather ( rain, fog, thunder, lightning )
|
||||
----floods that cause roaring rivers to fill that cannot be swam
|
||||
Master leaderboard in the main menu of top players per rank
|
||||
Ranked lobby ( Disabled until player base )
|
||||
small towns around a main centralized area( ie city or temple )
|
||||
large servers
|
||||
random spawned skin boxes that require credits to open
|
||||
purchaseable skins
|
||||
bullet penatration on certain materials
|
||||
bullet reflection on certain materials
|
||||
|
||||
FIX:
|
||||
Finish adding recoil to gun
|
||||
Finish Take Damage Function
|
||||
Link kills to database and award credits
|
||||
Build Leaderboard in SQL and add UserName, SessionNetworkID, TotalKills, TotalDeaths, OddballTime
|
||||
When looking at an object and deselecting the select tool the texture stays
|
||||
When player dies, need to respawn player
|
||||
When a backpack is picked up or dropped the entire Inventory UI is going to have to reset and there is no easy way to do that yet
|
||||
When connecting to a remote host all of the network spawning and timing including RPC go out of whack
|
||||
Move all health related stuff to the server
|
||||
Dropping items doesnt appear for everyone
|
||||
@@ -0,0 +1,34 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://bjmc27ndhma8q"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Pickup.cs" id="1_0i5j3"]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_njxef"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_6ne7j"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_tycpf"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_1v1sx"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:rotation")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
|
||||
[node name="Pickup Item" type="RigidBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.4119, 9.14194, -12.0754)
|
||||
physics_material_override = SubResource("PhysicsMaterial_njxef")
|
||||
freeze_mode = 1
|
||||
script = ExtResource("1_0i5j3")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0)
|
||||
shape = SubResource("SphereShape3D_6ne7j")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0)
|
||||
mesh = SubResource("SphereMesh_tycpf")
|
||||
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_1v1sx")
|
||||
@@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cwjc5dlxvrb6e"
|
||||
valid=false
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Prefab/Players/TestRig.glb"
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
@@ -0,0 +1,119 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://bdiyyfiwtdsoy"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Inventory.cs" id="1_7ku6o"]
|
||||
[ext_resource type="PackedScene" uid="uid://dma8pi16kq0w2" path="res://Prefab/UI/split_item_frame.tscn" id="2_qttk4"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ouugc"]
|
||||
bg_color = Color(0.14902, 0.14902, 0.14902, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ho80h"]
|
||||
draw_center = false
|
||||
border_width_left = 1
|
||||
border_width_top = 1
|
||||
border_width_right = 1
|
||||
border_width_bottom = 1
|
||||
border_color = Color(0.878431, 0.0862745, 0.105882, 1)
|
||||
corner_radius_top_left = 2
|
||||
corner_radius_top_right = 2
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wgu6p"]
|
||||
bg_color = Color(0.6, 0.6, 0.6, 0)
|
||||
border_width_left = 1
|
||||
border_width_top = 1
|
||||
border_width_right = 1
|
||||
border_width_bottom = 1
|
||||
border_color = Color(0.87451, 0.0862745, 0.105882, 1)
|
||||
|
||||
[node name="Inventory" type="Panel"]
|
||||
visible = false
|
||||
anchors_preset = 11
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -700.0
|
||||
offset_bottom = -4.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_ouugc")
|
||||
script = ExtResource("1_7ku6o")
|
||||
SplitFrame = ExtResource("2_qttk4")
|
||||
|
||||
[node name="InventoryGrid" type="ScrollContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 13
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -325.0
|
||||
offset_top = 295.0
|
||||
offset_right = 325.0
|
||||
offset_bottom = -21.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_ho80h")
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="Control" type="Control" parent="InventoryGrid"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="WeightBar" type="ProgressBar" parent="."]
|
||||
layout_mode = 1
|
||||
offset_left = 175.0
|
||||
offset_top = 250.0
|
||||
offset_right = 675.0
|
||||
offset_bottom = 270.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="Label" type="Label" parent="WeightBar"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -30.5
|
||||
offset_top = -11.5
|
||||
offset_right = 30.5
|
||||
offset_bottom = 11.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "0 / 100"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="WeightLabel" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
offset_left = 50.0
|
||||
offset_top = 248.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 271.0
|
||||
text = "Weight"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Backpack" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
offset_left = 475.0
|
||||
offset_top = 25.0
|
||||
offset_right = 675.0
|
||||
offset_bottom = 225.0
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_wgu6p")
|
||||
|
||||
[node name="Button" type="MenuButton" parent="Backpack"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -100.0
|
||||
offset_right = 100.0
|
||||
offset_bottom = 200.0
|
||||
grow_horizontal = 2
|
||||
button_mask = 2
|
||||
text = "Backpack"
|
||||
|
||||
[node name="Stats" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
offset_left = 25.0
|
||||
offset_top = 25.0
|
||||
offset_right = 450.0
|
||||
offset_bottom = 225.0
|
||||
@@ -0,0 +1,10 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://u05rhajgvdf0"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Tools/Sniper.cs" id="1_fyler"]
|
||||
|
||||
[node name="SingleFireGun" type="Label"]
|
||||
text = "2. Sniper Rifle"
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="Script" type="Node3D" parent="."]
|
||||
script = ExtResource("1_fyler")
|
||||
@@ -0,0 +1,60 @@
|
||||
[gd_scene format=3 uid="uid://beh0wq5p0c1rk"]
|
||||
|
||||
[node name="SelectToolFrame" type="Panel"]
|
||||
visible = false
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 20.0
|
||||
offset_top = -88.0
|
||||
offset_right = 160.0
|
||||
offset_bottom = 5.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ItemName" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 23.0
|
||||
grow_horizontal = 2
|
||||
text = "Item Name"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ItemSlot" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_top = 23.0
|
||||
offset_bottom = 46.0
|
||||
grow_horizontal = 2
|
||||
text = "Slot Size : 4x4"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ItemWeight" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_top = 46.0
|
||||
offset_right = 1.0
|
||||
offset_bottom = 69.0
|
||||
grow_horizontal = 2
|
||||
text = "Item Weight : 50"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Capacity" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_top = 70.0
|
||||
offset_right = 1.0
|
||||
offset_bottom = 93.0
|
||||
grow_horizontal = 2
|
||||
text = "Capacity : 50 / 40"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
@@ -0,0 +1,74 @@
|
||||
[gd_scene format=3 uid="uid://dma8pi16kq0w2"]
|
||||
|
||||
[node name="split_item_frame" type="Panel"]
|
||||
anchors_preset = 6
|
||||
anchor_left = 1.0
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -1530.0
|
||||
offset_top = -150.0
|
||||
offset_right = -1030.0
|
||||
offset_bottom = 50.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Title" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_right = -250.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
scale = Vector2(2, 2)
|
||||
text = "Split Item"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="SplitQuantity" type="LineEdit" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -33.531
|
||||
offset_top = -120.0
|
||||
offset_right = 46.469
|
||||
offset_bottom = -80.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
placeholder_text = "50"
|
||||
alignment = 1
|
||||
virtual_keyboard_type = 2
|
||||
|
||||
[node name="Split" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -210.0
|
||||
offset_top = -60.0
|
||||
offset_right = -30.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Split
|
||||
"
|
||||
|
||||
[node name="Cancel" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 40.0
|
||||
offset_top = -60.0
|
||||
offset_right = 220.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Cancel"
|
||||
@@ -0,0 +1,28 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://ck3xxdbmcedjx"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Bullet.cs" id="1_03ucf"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_ny6id"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_lhbkk"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 1
|
||||
|
||||
[node name="Bullet" type="RigidBody3D"]
|
||||
continuous_cd = true
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_03ucf")
|
||||
|
||||
[node name="Collider" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
shape = SubResource("SphereShape3D_ny6id")
|
||||
|
||||
[node name="Mesh" type="CSGSphere3D" parent="."]
|
||||
radius = 0.25
|
||||
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_lhbkk")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
@@ -0,0 +1,15 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cqmet58p8q5w"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/Game/DayCycle.cs" id="1_gishy"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_v57te"]
|
||||
properties/0/path = NodePath(".:rotation")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 2
|
||||
|
||||
[node name="Sun" type="DirectionalLight3D"]
|
||||
transform = Transform3D(0.965926, -0.258819, 0, 0.00587192, 0.0219143, 0.999743, -0.258752, -0.965677, 0.0226874, 0, 101.532, 0)
|
||||
script = ExtResource("1_gishy")
|
||||
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_v57te")
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Any CPU</Platform>
|
||||
<PublishDir>F:\Users\Derek\Desktop</PublishDir>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishReadyToRun>false</PublishReadyToRun>
|
||||
<PublishTrimmed>true</PublishTrimmed>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<History>False|2023-12-29T22:53:10.0828367Z;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,509 @@
|
||||
[gd_scene load_steps=19 format=3 uid="uid://dkhdees4pr5ld"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scripts/MainMenu/GameHandler.cs" id="1_20t5a"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvqenrawdv0ds" path="res://Scenes/Map0.tscn" id="3_owk3f"]
|
||||
[ext_resource type="PackedScene" uid="uid://cqmet58p8q5w" path="res://Prefab/sun.tscn" id="4_lus38"]
|
||||
[ext_resource type="Script" path="res://Scripts/Singleton/ItemStats.cs" id="5_30ijp"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdiyyfiwtdsoy" path="res://Prefab/Players/inventory.tscn" id="5_hwm58"]
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Tools/SelectTool.cs" id="6_0ov64"]
|
||||
[ext_resource type="PackedScene" uid="uid://beh0wq5p0c1rk" path="res://Prefab/UI/select_tool_frame.tscn" id="7_g4b7o"]
|
||||
[ext_resource type="Script" path="res://Scripts/MainMenu/Settings.cs" id="12_e3apo"]
|
||||
[ext_resource type="Script" path="res://Scripts/Game/Alert.cs" id="12_lomrb"]
|
||||
[ext_resource type="Script" path="res://Scripts/MainMenu/MainMenu.cs" id="13_6j6ft"]
|
||||
[ext_resource type="Script" path="res://Scripts/MainMenu/SessionHandler.cs" id="13_heag8"]
|
||||
[ext_resource type="Script" path="res://Scripts/MainMenu/PreGame.cs" id="14_l3mgt"]
|
||||
[ext_resource type="PackedScene" uid="uid://ckc4r27138xrb" path="res://Prefab/Players/main_player.tscn" id="15_rldub"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7b25o"]
|
||||
bg_color = Color(0.203922, 0.627451, 0.317647, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fu3ib"]
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0, 0.701961, 0.8, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(0.701961, 0, 0.439216, 1)
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_qlsfg"]
|
||||
sky_top_color = Color(0.231373, 0.447059, 0.745098, 1)
|
||||
|
||||
[sub_resource type="Sky" id="Sky_atwgd"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_qlsfg")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_2pet3"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_atwgd")
|
||||
ambient_light_source = 3
|
||||
ambient_light_color = Color(0.431373, 0.431373, 0.431373, 1)
|
||||
reflected_light_source = 2
|
||||
tonemap_mode = 3
|
||||
|
||||
[node name="GameRoot" type="Node"]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.097, 400, 0.121)
|
||||
|
||||
[node name="Game" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0408783, -0.554741, -0.199669)
|
||||
script = ExtResource("1_20t5a")
|
||||
MapList = Array[PackedScene]([ExtResource("3_owk3f")])
|
||||
Player = ExtResource("15_rldub")
|
||||
Sun = ExtResource("4_lus38")
|
||||
|
||||
[node name="PickupItems" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.347809, 0, 0.331299)
|
||||
script = ExtResource("5_30ijp")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="GameUI" type="Control" parent="UI"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Game" type="Control" parent="UI/GameUI"]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="HealthBar" type="ProgressBar" parent="UI/GameUI/Game"]
|
||||
custom_minimum_size = Vector2(0, 4)
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -4.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_7b25o")
|
||||
value = 50.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="StaminaBar" type="ProgressBar" parent="UI/GameUI/Game"]
|
||||
custom_minimum_size = Vector2(0, 4)
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 4.0
|
||||
grow_horizontal = 2
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_7b25o")
|
||||
value = 50.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="ToolBar" type="VBoxContainer" parent="UI/GameUI/Game"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -210.0
|
||||
offset_top = -310.0
|
||||
offset_right = -10.0
|
||||
offset_bottom = -10.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
alignment = 2
|
||||
|
||||
[node name="SelectTool" type="Label" parent="UI/GameUI/Game/ToolBar"]
|
||||
layout_mode = 2
|
||||
text = "1. Select Tool"
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="Script" type="Node3D" parent="UI/GameUI/Game/ToolBar/SelectTool"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.104448, 0.0912284, 0.0584183)
|
||||
script = ExtResource("6_0ov64")
|
||||
SelectToolFrame = ExtResource("7_g4b7o")
|
||||
HoverMaterial = SubResource("StandardMaterial3D_fu3ib")
|
||||
|
||||
[node name="Alerts" type="Control" parent="UI"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 0
|
||||
offset_left = 25.0
|
||||
offset_right = 25.0
|
||||
script = ExtResource("12_lomrb")
|
||||
|
||||
[node name="MainMenu" type="Control" parent="UI"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("13_6j6ft")
|
||||
|
||||
[node name="ButtonList" type="Control" parent="UI/MainMenu"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -320.0
|
||||
offset_top = -280.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI/MainMenu/ButtonList"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
alignment = 2
|
||||
|
||||
[node name="Settings" type="Button" parent="UI/MainMenu/ButtonList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Settings
|
||||
"
|
||||
|
||||
[node name="JoinGame" type="Button" parent="UI/MainMenu/ButtonList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Join Game"
|
||||
|
||||
[node name="StartServer" type="Button" parent="UI/MainMenu/ButtonList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Start Server"
|
||||
|
||||
[node name="LoginFrame" type="Control" parent="UI/MainMenu"]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Frame" type="Panel" parent="UI/MainMenu/LoginFrame" node_paths=PackedStringArray("UsernameBox", "PasswordBox")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -450.0
|
||||
offset_top = -430.0
|
||||
offset_right = 450.0
|
||||
offset_bottom = -130.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
script = ExtResource("13_heag8")
|
||||
UsernameBox = NodePath("VBoxContainer/UserName/LineEdit")
|
||||
PasswordBox = NodePath("VBoxContainer/Password/LineEdit")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI/MainMenu/LoginFrame/Frame"]
|
||||
layout_mode = 0
|
||||
offset_left = 50.0
|
||||
offset_top = 50.0
|
||||
offset_right = 850.0
|
||||
offset_bottom = 254.0
|
||||
|
||||
[node name="UserName" type="Panel" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 100)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer/UserName"]
|
||||
layout_mode = 0
|
||||
offset_right = 400.0
|
||||
offset_bottom = 100.0
|
||||
text = "UserName"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer/UserName"]
|
||||
layout_mode = 0
|
||||
offset_left = 400.0
|
||||
offset_top = 25.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 75.0
|
||||
|
||||
[node name="Password" type="Panel" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 100)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer/Password"]
|
||||
layout_mode = 0
|
||||
offset_right = 400.0
|
||||
offset_bottom = 100.0
|
||||
text = "Password"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="UI/MainMenu/LoginFrame/Frame/VBoxContainer/Password"]
|
||||
layout_mode = 0
|
||||
offset_left = 400.0
|
||||
offset_top = 25.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 75.0
|
||||
secret = true
|
||||
|
||||
[node name="LoginButton" type="Button" parent="UI/MainMenu/LoginFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -210.0
|
||||
offset_top = -80.0
|
||||
offset_right = -10.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Login"
|
||||
|
||||
[node name="RegisterButton" type="Button" parent="UI/MainMenu/LoginFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 10.0
|
||||
offset_top = -80.0
|
||||
offset_right = 210.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Register"
|
||||
|
||||
[node name="Host" type="TextEdit" parent="UI/MainMenu"]
|
||||
custom_minimum_size = Vector2(300, 30)
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -640.0
|
||||
offset_top = -88.0
|
||||
offset_right = -340.0
|
||||
offset_bottom = -58.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
tooltip_text = "Host Address"
|
||||
text = "127.0.0.1"
|
||||
placeholder_text = "HOST"
|
||||
middle_mouse_paste_enabled = false
|
||||
scroll_past_end_of_file = true
|
||||
|
||||
[node name="SettingsFrame" type="Control" parent="UI"]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Settings" type="TabContainer" parent="UI/SettingsFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -500.0
|
||||
offset_top = -730.0
|
||||
offset_right = 500.0
|
||||
offset_bottom = -130.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
current_tab = 0
|
||||
script = ExtResource("12_e3apo")
|
||||
|
||||
[node name="Game" type="Panel" parent="UI/SettingsFrame/Settings"]
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 0
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="UI/SettingsFrame/Settings/Game"]
|
||||
layout_mode = 2
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Vbox" type="VBoxContainer" parent="UI/SettingsFrame/Settings/Game/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Display" type="Panel" parent="UI/SettingsFrame/Settings"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 1
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="UI/SettingsFrame/Settings/Display"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Vbox" type="VBoxContainer" parent="UI/SettingsFrame/Settings/Display/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Audio" type="Panel" parent="UI/SettingsFrame/Settings"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 2
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="UI/SettingsFrame/Settings/Audio"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Vbox" type="VBoxContainer" parent="UI/SettingsFrame/Settings/Audio/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Input" type="Panel" parent="UI/SettingsFrame/Settings"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 3
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="UI/SettingsFrame/Settings/Input"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Vbox" type="VBoxContainer" parent="UI/SettingsFrame/Settings/Input/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="About" type="Panel" parent="UI/SettingsFrame/Settings"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 4
|
||||
|
||||
[node name="SaveButton" type="Button" parent="UI/SettingsFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -210.0
|
||||
offset_top = -80.0
|
||||
offset_right = -10.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Save Settings"
|
||||
|
||||
[node name="CancelButton" type="Button" parent="UI/SettingsFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 10.0
|
||||
offset_top = -80.0
|
||||
offset_right = 210.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Cancel"
|
||||
|
||||
[node name="PreGame" type="Control" parent="UI"]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("14_l3mgt")
|
||||
Backpack = ExtResource("5_hwm58")
|
||||
|
||||
[node name="SelectedAbility" type="Label" parent="UI/PreGame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 10.0
|
||||
offset_top = 1050.0
|
||||
offset_right = -1742.0
|
||||
offset_bottom = -7.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "Current Ability : None"
|
||||
|
||||
[node name="ButtonList" type="Control" parent="UI/PreGame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -320.0
|
||||
offset_top = -280.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI/PreGame/ButtonList"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
alignment = 2
|
||||
|
||||
[node name="Ability" type="Button" parent="UI/PreGame/ButtonList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Ability
|
||||
"
|
||||
|
||||
[node name="Spawn" type="Button" parent="UI/PreGame/ButtonList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Spawn"
|
||||
|
||||
[node name="Lighting" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_2pet3")
|
||||
|
||||
[node name="GameSpawner" type="MultiplayerSpawner" parent="."]
|
||||
_spawnable_scenes = PackedStringArray("res://Prefab/Players/main_player.tscn", "res://Prefab/bullet.tscn", "res://Scenes/Map0.tscn", "res://Prefab/sun.tscn")
|
||||
spawn_path = NodePath("../Game")
|
||||
spawn_limit = 5000
|
||||
|
||||
[node name="ItemSpawner" type="MultiplayerSpawner" parent="."]
|
||||
_spawnable_scenes = PackedStringArray("res://Prefab/Pickups/pickup_item.tscn")
|
||||
spawn_path = NodePath("../PickupItems")
|
||||
spawn_limit = 5000
|
||||
|
||||
[connection signal="button_down" from="UI/MainMenu/ButtonList/VBoxContainer/Settings" to="UI/MainMenu" method="_on_settings_button_down"]
|
||||
[connection signal="pressed" from="UI/MainMenu/ButtonList/VBoxContainer/JoinGame" to="UI/MainMenu" method="_on_join_game_pressed"]
|
||||
[connection signal="pressed" from="UI/MainMenu/ButtonList/VBoxContainer/StartServer" to="UI/MainMenu" method="_on_start_server_pressed"]
|
||||
[connection signal="button_down" from="UI/MainMenu/LoginFrame/LoginButton" to="UI/MainMenu/LoginFrame/Frame" method="onLogin"]
|
||||
[connection signal="button_down" from="UI/MainMenu/LoginFrame/RegisterButton" to="UI/MainMenu/LoginFrame/Frame" method="onRegister"]
|
||||
[connection signal="button_down" from="UI/SettingsFrame/SaveButton" to="UI/SettingsFrame/Settings" method="OnSaveButtonDown"]
|
||||
[connection signal="button_down" from="UI/SettingsFrame/CancelButton" to="UI/SettingsFrame/Settings" method="OnCancelButtonDown"]
|
||||
[connection signal="pressed" from="UI/PreGame/ButtonList/VBoxContainer/Ability" to="UI/PreGame" method="_on_ability_pressed"]
|
||||
[connection signal="pressed" from="UI/PreGame/ButtonList/VBoxContainer/Spawn" to="UI/PreGame" method="_on_player_spawn_pressed"]
|
||||
@@ -0,0 +1,93 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public partial class Alert : Control {
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
Queue<string> AlertQueue = new Queue<string>();
|
||||
|
||||
public override void _Ready() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.Alert = this;
|
||||
}
|
||||
|
||||
// This needs to notify the user
|
||||
public void PerformAlert(string NotificationText ) {
|
||||
if ( _Options.isServer ) {
|
||||
GD.Print( NotificationText );
|
||||
} else {
|
||||
AlertQueue.Enqueue( NotificationText );
|
||||
}
|
||||
}
|
||||
|
||||
Panel working = null;
|
||||
float CurrentStep;
|
||||
float PauseCounter;
|
||||
int task = 0;
|
||||
public override void _Process( double delta ) {
|
||||
switch( task ) {
|
||||
|
||||
// Create the label
|
||||
case 0: {
|
||||
if (AlertQueue.Count > 0 ) {
|
||||
working = new Panel();
|
||||
working.Size = new Vector2( 300, 50 );
|
||||
AddChild( working );
|
||||
working.Position = new Vector2( 0, -50 );
|
||||
|
||||
Label text = new Label();
|
||||
text.Text = AlertQueue.Dequeue();
|
||||
text.Size = new Vector2( 300, 50 );
|
||||
text.HorizontalAlignment = HorizontalAlignment.Center;
|
||||
text.VerticalAlignment = VerticalAlignment.Center;
|
||||
working.AddChild( text );
|
||||
CurrentStep = 0;
|
||||
PauseCounter = 0;
|
||||
task = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Bring down the label
|
||||
case 1: {
|
||||
if ( CurrentStep < _Options.AlertTime / 2 ) {
|
||||
CurrentStep += Convert.ToSingle( delta );
|
||||
float alertTime = _Options.AlertTime / 2;
|
||||
working.Position = new Vector2( 0, Mathf.Lerp( -50, 25, CurrentStep / alertTime ) );
|
||||
} else {
|
||||
task = 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Pause the label
|
||||
case 2: {
|
||||
PauseCounter += Convert.ToSingle( delta );
|
||||
if (PauseCounter >= _Options.AlertPauseTime) {
|
||||
task = 3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Bring Up the label
|
||||
case 3: {
|
||||
if ( CurrentStep > 0 ) {
|
||||
CurrentStep -= Convert.ToSingle( delta );
|
||||
float alertTime = _Options.AlertTime / 2;
|
||||
working.Position = new Vector2( 0, Mathf.Lerp( -50, 25, CurrentStep / alertTime ) );
|
||||
} else {
|
||||
working.Free();
|
||||
working = null;
|
||||
task = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using Godot;
|
||||
|
||||
public partial class Bullet : RigidBody3D {
|
||||
Reference _Reference;
|
||||
Options _Options;
|
||||
|
||||
public int Creator = -1;
|
||||
public float Damage = 1;
|
||||
|
||||
public override void _Ready() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
}
|
||||
|
||||
public void _on_body_entered( Node body ) {
|
||||
if (Multiplayer.GetUniqueId() == 1){
|
||||
if ( body is Humanoid ) {
|
||||
Humanoid player = (Humanoid)body;
|
||||
_Reference.GameHandler.TakeDamage(Damage, Creator, Convert.ToInt32( player.Name.ToString().Split(new char[]{','})[0] ));
|
||||
_Reference.Alert.PerformAlert("Bullet his player with ID: " + body.GetMultiplayerAuthority());
|
||||
}
|
||||
|
||||
}
|
||||
this.QueueFree();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class DayCycle : DirectionalLight3D {
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
public override void _Process(double delta) {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
if ( _Options.isServer ){
|
||||
Rotation = Rotation + new Vector3(Convert.ToSingle(delta),0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,349 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public partial class Humanoid : CharacterBody3D {
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
[Export]
|
||||
public AnimationTree Animator;
|
||||
[Export]
|
||||
public AnimQuickState CurrentAnimation;
|
||||
[Export]
|
||||
public Vector2 InputDirection;
|
||||
|
||||
UIMode CurrentUIMode = UIMode.Game;
|
||||
(UIMode, Control)[] UIFrames;
|
||||
public ProgressBar HealthBar;
|
||||
ProgressBar StaminaBar;
|
||||
public ITool EquippedTool;
|
||||
Node Backpack;
|
||||
|
||||
public string PlayerName = "";
|
||||
public float Health = 100;
|
||||
public float MaxHealth = 100;
|
||||
public float Stamina = 100;
|
||||
public float MaxStamina = 100;
|
||||
public float StaminaDrain = 5;
|
||||
public float StaminaCharge = 5;
|
||||
public float JumpStamina = 10;
|
||||
public bool Running = false;
|
||||
|
||||
public float JumpVelocity = 5.5f;
|
||||
public float RotationSpeed = 1f;
|
||||
public float FallDistanceForDamage = 15;
|
||||
public float FallDamageScale = 5f;
|
||||
public Ability Ability;
|
||||
public float Gravity = ProjectSettings.GetSetting( "physics/3d/default_gravity" ).AsSingle();
|
||||
public bool mouseLock = true;
|
||||
public float Speed {
|
||||
get {
|
||||
if( Running ) {
|
||||
return 9f;
|
||||
}
|
||||
return 5f;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _EnterTree() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
|
||||
string[] Data = Name.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string PID = Data[0];
|
||||
string AID = Data[1];
|
||||
PlayerName = Data[2];
|
||||
|
||||
this.SetMultiplayerAuthority( Convert.ToInt32(PID), true );
|
||||
if( IsMultiplayerAuthority() ) {
|
||||
_Reference.Humanoid = this;
|
||||
_Options.isAlive = true;
|
||||
_Reference.Humanoid = this;
|
||||
_Reference.Camera = GetChild<Camera3D>( 0 );
|
||||
_Reference.Camera.GetChild<AudioListener3D>(0).MakeCurrent();
|
||||
_Reference.Camera.Current = true;
|
||||
UIFrames = new (UIMode, Control) [] {
|
||||
( UIMode.Game, GetNode<Control>( "/root/GameRoot/UI/GameUI/Game" ) ),
|
||||
( UIMode.Inventory, GetNode<Control>( "/root/GameRoot/UI/GameUI/Inventory" ) ),
|
||||
( UIMode.Pause, GetNode<Control>( "/root/GameRoot/UI/SettingsFrame" ) )
|
||||
};
|
||||
HealthBar = GetNode<ProgressBar>( "/root/GameRoot/UI/GameUI/Game/HealthBar" );
|
||||
StaminaBar = GetNode<ProgressBar>( "/root/GameRoot/UI/GameUI/Game/StaminaBar" );
|
||||
|
||||
Input.MouseMode = Input.MouseModeEnum.ConfinedHidden;
|
||||
|
||||
SetUIMode( CurrentUIMode );
|
||||
HealthBar.MaxValue = MaxHealth;
|
||||
HealthBar.Value = Health;
|
||||
StaminaBar.MaxValue = MaxStamina;
|
||||
StaminaBar.Value = Stamina;
|
||||
EquipTool( 0 );
|
||||
|
||||
List<Vector3> spawnPoints = new List<Vector3>();
|
||||
foreach (Node3D cur in _Reference.PlayerSpawnPoints.GetChildren()){
|
||||
spawnPoints.Add(cur.GlobalPosition);
|
||||
}
|
||||
|
||||
int chosenSpawn = new Random(DateTime.Now.Millisecond).Next(0, spawnPoints.Count);
|
||||
this.SetDeferred("global_position", spawnPoints[chosenSpawn]);
|
||||
|
||||
Ability _Ability = (Ability)Convert.ToInt32(AID);
|
||||
if (_Ability == Ability.Vitality){
|
||||
MaxHealth *= 1.25f;
|
||||
Health = MaxHealth;
|
||||
} else if ( _Ability == Ability.Stamina ){
|
||||
MaxStamina *= 1.25f;
|
||||
StaminaCharge *= 1.25f;
|
||||
Stamina = MaxStamina;
|
||||
} else if ( _Ability == Ability.Strength ){
|
||||
_Reference.Inventory.UpdateMaxWeight(500);
|
||||
}
|
||||
GetNode<Node3D>("PlayerModel").Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
public enum AnimQuickState{
|
||||
Idle,
|
||||
Walk,
|
||||
Run,
|
||||
Jump
|
||||
}
|
||||
|
||||
Vector3 GetMovement( float deltaTime ) {
|
||||
|
||||
// Copy current velocity off the CharacterBody3d
|
||||
Vector3 velocity = Velocity;
|
||||
|
||||
if( CurrentUIMode == UIMode.Game ) {
|
||||
// Add the gravity.
|
||||
if ( IsOnFloor() ) {
|
||||
if ( Input.GetActionStrength( "Jump" ) == 1 && Stamina >= JumpStamina ) {
|
||||
CurrentAnimation = AnimQuickState.Jump;
|
||||
Stamina -= JumpStamina;
|
||||
velocity.Y = JumpVelocity;
|
||||
}
|
||||
} else {
|
||||
CurrentAnimation = AnimQuickState.Idle;
|
||||
velocity.Y -= Gravity * deltaTime;
|
||||
}
|
||||
|
||||
if (Running && Stamina <= 0){
|
||||
Running = false;
|
||||
}
|
||||
|
||||
// Get the input direction and handle the movement/deceleration.
|
||||
Vector2 inputDir = Input.GetVector("Left", "Right", "Forward", "Backward");
|
||||
Vector3 direction = (Transform.Basis * new Vector3(inputDir.X, 0, inputDir.Y)).Normalized();
|
||||
if( direction != Vector3.Zero ) { // If there was input
|
||||
velocity.X = direction.X * Speed;
|
||||
velocity.Z = direction.Z * Speed;
|
||||
if (Running){
|
||||
Stamina -= deltaTime * StaminaDrain;
|
||||
StaminaBar.Value = Stamina;
|
||||
StaminaBar.MaxValue = MaxStamina;
|
||||
CurrentAnimation = AnimQuickState.Run;
|
||||
InputDirection = inputDir;
|
||||
}else{
|
||||
if (Stamina < MaxStamina){
|
||||
Stamina += deltaTime * StaminaCharge / 2;
|
||||
StaminaBar.Value = Stamina;
|
||||
StaminaBar.MaxValue = MaxStamina;
|
||||
}
|
||||
CurrentAnimation = AnimQuickState.Walk;
|
||||
InputDirection = inputDir;
|
||||
}
|
||||
} else { // If there was no input
|
||||
velocity.X = Mathf.MoveToward( Velocity.X, 0, Speed );
|
||||
velocity.Z = Mathf.MoveToward( Velocity.Z, 0, Speed );
|
||||
if (Stamina < MaxStamina){
|
||||
Stamina += deltaTime * StaminaCharge;
|
||||
StaminaBar.Value = Stamina;
|
||||
StaminaBar.MaxValue = MaxStamina;
|
||||
}
|
||||
CurrentAnimation = AnimQuickState.Idle;
|
||||
}
|
||||
} else {
|
||||
velocity = new Vector3 (
|
||||
Mathf.MoveToward( Velocity.X, 0, Speed /6 ),
|
||||
velocity.Y - (Gravity * deltaTime),
|
||||
Mathf.MoveToward( Velocity.Z, 0, Speed /6 )
|
||||
);
|
||||
if (Stamina < MaxStamina){
|
||||
Stamina += deltaTime * StaminaCharge;
|
||||
StaminaBar.Value = Stamina;
|
||||
StaminaBar.MaxValue = MaxStamina;
|
||||
}
|
||||
CurrentAnimation = AnimQuickState.Idle;
|
||||
}
|
||||
|
||||
return velocity;
|
||||
}
|
||||
|
||||
public void EquipTool(int BackpackIndex ) {
|
||||
if( Backpack == null ) {
|
||||
Backpack = GetNode<Node>( "/root/GameRoot/UI/GameUI/Game/ToolBar" );
|
||||
}
|
||||
var Children = Backpack.GetChildren();
|
||||
if( Children.Count > BackpackIndex ) {
|
||||
foreach( Label cur in Children ) {
|
||||
cur.Modulate = new Color( 1, 1, 1 );
|
||||
}
|
||||
if (EquippedTool != null ) {
|
||||
EquippedTool.UnEquipped();
|
||||
}
|
||||
// If same button is pressed put tool away
|
||||
Label UILabel = Backpack.GetChild<Label>( BackpackIndex );
|
||||
UILabel.Modulate = new Color(1,0,1);
|
||||
EquippedTool = ( ITool )UILabel.GetChild(0);
|
||||
EquippedTool.Equiped();
|
||||
}
|
||||
}
|
||||
|
||||
enum UIMode {
|
||||
Game,
|
||||
Inventory,
|
||||
Pause
|
||||
}
|
||||
|
||||
void SetUIMode(UIMode mode) {
|
||||
if (CurrentUIMode == UIMode.Inventory ) {
|
||||
foreach( var cur in UIFrames ) {
|
||||
if( cur.Item1 == UIMode.Inventory ) {
|
||||
Inventory inv = (Inventory)cur.Item2;
|
||||
if( inv._splitFrame != null ) {
|
||||
inv._splitFrame.Free();
|
||||
inv._splitFrame = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CurrentUIMode = mode;
|
||||
foreach (var cur in UIFrames) {
|
||||
if (cur.Item1 == mode) {
|
||||
cur.Item2.Visible = true;
|
||||
} else {
|
||||
cur.Item2.Visible = false;
|
||||
}
|
||||
}
|
||||
if (mode == UIMode.Game) {
|
||||
Input.MouseMode = Input.MouseModeEnum.Captured;
|
||||
mouseLock = true;
|
||||
} else {
|
||||
Input.MouseMode = Input.MouseModeEnum.Visible;
|
||||
mouseLock = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Input( InputEvent _event ) {
|
||||
if( IsMultiplayerAuthority() ) {
|
||||
if( _event is InputEventKey eventKey ) {
|
||||
int KeyCode = (int)eventKey.PhysicalKeycode;
|
||||
if( eventKey.Keycode == Key.Escape ) {
|
||||
if( eventKey.Pressed ) {
|
||||
if( CurrentUIMode != UIMode.Pause ) {
|
||||
SetUIMode( UIMode.Pause );
|
||||
} else {
|
||||
SetUIMode( UIMode.Game );
|
||||
}
|
||||
}
|
||||
} else if( eventKey.Keycode == Key.Tab ) {
|
||||
if( eventKey.Pressed ) {
|
||||
if( CurrentUIMode != UIMode.Inventory ) {
|
||||
SetUIMode( UIMode.Inventory );
|
||||
} else {
|
||||
SetUIMode( UIMode.Game );
|
||||
}
|
||||
}
|
||||
}
|
||||
if( CurrentUIMode == UIMode.Game ) {
|
||||
if( eventKey.Keycode == Key.Shift ) {
|
||||
if( eventKey.Pressed && Stamina > 0 ) {
|
||||
Running = true;
|
||||
} else {
|
||||
Running = false;
|
||||
}
|
||||
} else if( eventKey.Pressed && KeyCode >= 49 && KeyCode <= 57 ) {
|
||||
EquipTool( KeyCode - 49 );
|
||||
} else if( eventKey.Pressed ) {
|
||||
if( EquippedTool != null ) {
|
||||
EquippedTool.KeyPress( eventKey.Keycode );
|
||||
}
|
||||
} else if( !eventKey.Pressed ) {
|
||||
if( EquippedTool != null ) {
|
||||
EquippedTool.KeyRelease( eventKey.Keycode );
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ( _event is InputEventMouseMotion ) {
|
||||
if( mouseLock ) {
|
||||
InputEventMouseMotion inputEventMouseMotion = (InputEventMouseMotion)_event;
|
||||
Vector2 LookChange = inputEventMouseMotion.Relative;
|
||||
|
||||
// Horizontal Rotation
|
||||
RotateY( LookChange.X * RotationSpeed * -0.002f );
|
||||
// Vertical Rotation
|
||||
_Reference.Camera.RotateX( LookChange.Y * RotationSpeed * -0.002f );
|
||||
if( _Reference.Camera.RotationDegrees.X < -90 ) {
|
||||
_Reference.Camera.RotationDegrees = new Vector3( -90, _Reference.Camera.RotationDegrees.Y, _Reference.Camera.RotationDegrees.Z );
|
||||
} else if( _Reference.Camera.RotationDegrees.X > 90 ) {
|
||||
_Reference.Camera.RotationDegrees = new Vector3( 90, _Reference.Camera.RotationDegrees.Y, _Reference.Camera.RotationDegrees.Z );
|
||||
}
|
||||
}
|
||||
} else if ( _event is InputEventMouseButton _mouseevent ) {
|
||||
if( mouseLock ) {
|
||||
if( _mouseevent.ButtonIndex == MouseButton.Left ) {
|
||||
if( EquippedTool != null && _mouseevent.Pressed ) {
|
||||
EquippedTool.LeftMouseDown();
|
||||
} else if( EquippedTool != null && !_mouseevent.Pressed ) {
|
||||
EquippedTool.LeftMouseUp();
|
||||
}
|
||||
} else if( _mouseevent.ButtonIndex == MouseButton.Right ) {
|
||||
if( EquippedTool != null && _mouseevent.Pressed ) {
|
||||
EquippedTool.RightMouseDown();
|
||||
} else if( EquippedTool != null && !_mouseevent.Pressed ) {
|
||||
EquippedTool.RightMouseUp();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetAnimation(){
|
||||
AnimationNodeStateMachinePlayback stateMachine = (AnimationNodeStateMachinePlayback)Animator.Get("parameters/playback");
|
||||
stateMachine.Travel( CurrentAnimation.ToString() );
|
||||
Animator.Set("parameters/Walk/BlendSpace2D/blend_position", InputDirection);
|
||||
Animator.Set("parameters/Run/BlendSpace2D/blend_position", InputDirection);
|
||||
}
|
||||
|
||||
float LastY = -1;
|
||||
public override void _PhysicsProcess( double _dT ) {
|
||||
SetAnimation();
|
||||
if( IsMultiplayerAuthority() ) {
|
||||
float deltaTime = Convert.ToSingle( _dT );
|
||||
|
||||
// Fall Damage
|
||||
if( IsOnFloor() ) {
|
||||
if( LastY != -1 ) {
|
||||
float FallDistance = LastY - GlobalPosition.Y;
|
||||
if( FallDistance > FallDistanceForDamage ) {
|
||||
_Reference.GameHandler.TakeDamage( (FallDistance - FallDistanceForDamage) * FallDamageScale, 0, Multiplayer.GetUniqueId() );
|
||||
}
|
||||
LastY = -1;
|
||||
}
|
||||
} else {
|
||||
if( LastY == -1 ) {
|
||||
LastY = GlobalPosition.Y;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the Velocity back onto the CharacterBody3d
|
||||
Velocity = GetMovement( deltaTime );
|
||||
// Apply Motion
|
||||
MoveAndSlide();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,550 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
// Remove all the global positions from this file
|
||||
|
||||
public partial class Inventory : Panel {
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
[Export] PackedScene SplitFrame;
|
||||
|
||||
Vector2I InventorySize = new Vector2I(4, 15);
|
||||
int MaxWeight;
|
||||
|
||||
List<(InventoryItem, Panel)> _Inventory;
|
||||
Vector2 _GridSize;
|
||||
ProgressBar _WeightBar;
|
||||
HeldItem _itemBeingHeld;
|
||||
HeldItem __h;
|
||||
HeldItem _lastRightClickedItem {
|
||||
get {
|
||||
return __h;
|
||||
}
|
||||
set {
|
||||
if (_splitFrame != null) {
|
||||
_splitFrame.Free();
|
||||
_splitFrame = null;
|
||||
}
|
||||
__h = value;
|
||||
}
|
||||
}
|
||||
public Control _splitFrame;
|
||||
|
||||
public override void _EnterTree() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.Inventory = this;
|
||||
|
||||
_Inventory = new List<(InventoryItem, Panel)>();
|
||||
MaxWeight = 400;
|
||||
|
||||
Control GridBackdrop = GetChild(0).GetChild<Control>( 0 );
|
||||
_WeightBar = GetChild<ProgressBar>( 1 );
|
||||
|
||||
// Scale Scrollbar
|
||||
Vector2 FrameSize = GetChild<Control>(0).Size;
|
||||
GridBackdrop.CustomMinimumSize = new Vector2( GetChild<Control>(0).Size.X - 8 , InventorySize.Y * FrameSize.X / InventorySize.X );
|
||||
GridBackdrop.Size = GridBackdrop.CustomMinimumSize;
|
||||
|
||||
_GridSize = new Vector2( GridBackdrop.Size.X / InventorySize.X, GridBackdrop.Size.Y / InventorySize.Y );
|
||||
_WeightBar.MaxValue = MaxWeight;
|
||||
|
||||
// Horizontal Grid Bars
|
||||
for (int y=0; y< InventorySize.Y - 1; y++) {
|
||||
HSeparator cur = new HSeparator{
|
||||
Position = new Vector2(0, _GridSize.Y * (y + 1) - 2),
|
||||
Size = new Vector2(GridBackdrop.Size.X, 4)
|
||||
};
|
||||
GetChild(0).GetChild(0).AddChild( cur );
|
||||
}
|
||||
|
||||
// Vertical Grid Bars
|
||||
for (int x=0; x< InventorySize.X - 1; x++) {
|
||||
VSeparator cur = new VSeparator{
|
||||
Position = new Vector2(_GridSize.X * (x + 1) - 2, 0),
|
||||
Size = new Vector2(4, GridBackdrop.Size.Y)
|
||||
};
|
||||
GetChild(0).GetChild(0).AddChild( cur );
|
||||
}
|
||||
GetWeight();
|
||||
}
|
||||
|
||||
public void UpdateMaxWeight(int maxWeight){
|
||||
MaxWeight = maxWeight;
|
||||
_WeightBar.MaxValue = MaxWeight;
|
||||
GetWeight();
|
||||
}
|
||||
|
||||
//------------------------------//
|
||||
// Public Functions //
|
||||
//------------------------------//
|
||||
|
||||
public int GetWeight() {
|
||||
int _w = 0;
|
||||
foreach( (InventoryItem, Control) cur in _Inventory ) {
|
||||
_w += cur.Item1.Weight;
|
||||
}
|
||||
_WeightBar.Value = _w;
|
||||
_WeightBar.GetChild<Label>( 0 ).Text = _w.ToString() + " / " + MaxWeight.ToString();
|
||||
return _w;
|
||||
}
|
||||
|
||||
public void UpdateItem( InventoryItem item ) {
|
||||
foreach( (InventoryItem, Panel) cur in _Inventory ) {
|
||||
if( item.Guid == cur.Item1.Guid ) {
|
||||
cur.Item1.Quantity = item.Quantity;
|
||||
cur.Item2.GetChild<MenuButton>( 0 ).Text = item.Name + "\n" +
|
||||
item.Quantity + " / " + item.MaxQuantity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool AddInventory( InventoryItem Item ) {
|
||||
Item.Rotated = false;
|
||||
if( GetWeight() + Item.Weight > MaxWeight ) {
|
||||
_Reference.Alert.PerformAlert( "Max weight!" );
|
||||
return false;
|
||||
}
|
||||
|
||||
for( int rotation = 0; rotation <= 1; rotation++ ) {
|
||||
|
||||
// Try both rotations of the block
|
||||
Vector2I tempSize = Item.GridSize;
|
||||
if( rotation == 1 ) {
|
||||
Item.Rotated = true;
|
||||
tempSize = new Vector2I( Item.GridSize.Y, Item.GridSize.X );
|
||||
}
|
||||
|
||||
// Go through the inventory grid minus overflow from the size of the item were trying to place
|
||||
for( int yindex = 0; yindex <= (InventorySize.Y - tempSize.Y); yindex++ ) {
|
||||
for( int xindex = 0; xindex <= (InventorySize.X - tempSize.X); xindex++ ) {
|
||||
if( CheckBlock( tempSize, new Vector2I( xindex, yindex ), null ) ) {
|
||||
// We found our space
|
||||
|
||||
Panel ItemBackDrop = new Panel();
|
||||
GetChild( 0 ).GetChild( 0 ).AddChild( ItemBackDrop );
|
||||
ItemBackDrop.Size = new Vector2( _GridSize.X * tempSize.X - 10, _GridSize.Y * tempSize.Y - 10 );
|
||||
ItemBackDrop.Position = new Vector2( xindex * _GridSize.X + 5, yindex * _GridSize.Y + 5 );
|
||||
ItemBackDrop.GuiInput += frameInput;
|
||||
|
||||
MenuButton dropDown = new MenuButton();
|
||||
|
||||
if( Item.isQuantityItem ) {
|
||||
dropDown.Text = Item.Name + "\n" +
|
||||
Item.Quantity + " / " + Item.MaxQuantity;
|
||||
} else {
|
||||
dropDown.Text = Item.Name;
|
||||
}
|
||||
|
||||
dropDown.SetAnchorsPreset( LayoutPreset.FullRect );
|
||||
ItemBackDrop.AddChild( dropDown );
|
||||
dropDown.ButtonMask = MouseButtonMask.Right;
|
||||
dropDown.GuiInput += frameInput;
|
||||
dropDown.GetPopup().IndexPressed += DropdownPressed;
|
||||
foreach( string cur in Enum.GetNames( typeof( InventoryOptions ) ) ) {
|
||||
if( cur == "Split" && !Item.isQuantityItem ) {
|
||||
continue;
|
||||
}
|
||||
dropDown.GetPopup().AddItem( cur );
|
||||
}
|
||||
|
||||
Item.GridPosition = new Vector2I( xindex, yindex );
|
||||
_Inventory.Add( (Item, ItemBackDrop) );
|
||||
|
||||
GetWeight();
|
||||
|
||||
// Add Tool if its a tool
|
||||
if (!string.IsNullOrEmpty(Item.ToolPath)){
|
||||
PackedScene toolCopy = GD.Load<PackedScene>(Item.ToolPath);
|
||||
Label tool = toolCopy.Instantiate<Label>();
|
||||
// Place tool into toolbar in the correct spot and shift everything down to zero if need be
|
||||
Node[] toolbarChildren = _Reference.ToolBar.GetChildren().ToArray();
|
||||
for( int i=0; i<toolbarChildren.Count(); i++ ){
|
||||
Label cur = (Label)toolbarChildren[i];
|
||||
if ( cur.Text.Substring(1, 2) == ". " ){
|
||||
cur.Text = (i+1).ToString() + ". " + cur.Text.Substring(3);
|
||||
}
|
||||
}
|
||||
Debug.WriteLine( tool.Text.Substring(1, 2) );
|
||||
if ( tool.Text.Substring(1, 2) == ". " ){
|
||||
tool.Text = (toolbarChildren.Count()+1).ToString() + ". " + tool.Text.Substring(3);
|
||||
} else {
|
||||
tool.Text = (toolbarChildren.Count()+1).ToString() + ". " + tool.Text;
|
||||
}
|
||||
_Reference.ToolBar.AddChild( tool );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_Reference.Alert.PerformAlert( "No Space" );
|
||||
// No space was found
|
||||
return false;
|
||||
}
|
||||
|
||||
public void DropInventory( InventoryItem item, Panel frame ) {
|
||||
string[] PickupItems = _Reference.ItemSpawner._SpawnableScenes;
|
||||
PackedScene ps = GD.Load<PackedScene>(PickupItems[item.ItemID]);
|
||||
Pickup prefab = ps.Instantiate<Pickup>();
|
||||
prefab.GlobalTransform = _Reference.Humanoid.GlobalTransform;
|
||||
prefab.Quantity = item.Quantity;
|
||||
_Reference.ItemSpawnPath.AddChild( prefab );
|
||||
RemoveInventory( item, frame );
|
||||
}
|
||||
|
||||
public void RemoveInventory( InventoryItem item, Panel frame ) {
|
||||
foreach(Label cur in _Reference.ToolBar.GetChildren()){
|
||||
if ( cur.GetChild(0) is ITool ){
|
||||
ITool x = (ITool)cur.GetChild(0);
|
||||
if ( x.ToolID == item.ItemID ){
|
||||
if(_Reference.Humanoid.EquippedTool == x){
|
||||
_Reference.Humanoid.EquipTool(0);
|
||||
}
|
||||
cur.QueueFree();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_Inventory.Remove( (item, frame) ) ;
|
||||
frame.Free();
|
||||
GetWeight();
|
||||
}
|
||||
|
||||
//------------------------------//
|
||||
// Mouse Functions //
|
||||
//------------------------------//
|
||||
|
||||
void MouseDown( Vector2 mousePos ) {
|
||||
(InventoryItem, Panel)? clicked = GetItemFromScreen( mousePos );
|
||||
if( clicked.HasValue ) {
|
||||
_itemBeingHeld = new HeldItem {
|
||||
MouseStart = mousePos,
|
||||
MouseOffset = clicked.Value.Item2.Position - mousePos,
|
||||
Frame = clicked.Value.Item2,
|
||||
Item = clicked.Value.Item1
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void MouseMove( Vector2 mousePos ) {
|
||||
if( _itemBeingHeld != null ) {
|
||||
Vector2I TempSize = _itemBeingHeld.Item.GridSize;
|
||||
if( _itemBeingHeld.Item.Rotated ) {
|
||||
TempSize = new Vector2I( _itemBeingHeld.Item.GridSize.Y, _itemBeingHeld.Item.GridSize.X );
|
||||
}
|
||||
Vector2 newFramePos = mousePos + _itemBeingHeld.MouseOffset;
|
||||
if( newFramePos.X < 0 ) {
|
||||
newFramePos.X = 0;
|
||||
}
|
||||
if( newFramePos.Y < 0 ) {
|
||||
newFramePos.Y = 0;
|
||||
}
|
||||
if( newFramePos.X > _GridSize.X * InventorySize.X - (_GridSize.X * TempSize.X) ) {
|
||||
newFramePos.X = _GridSize.X * InventorySize.X - (_GridSize.X * TempSize.X);
|
||||
}
|
||||
if( newFramePos.Y > _GridSize.Y * InventorySize.Y - (_GridSize.Y * TempSize.Y) ) {
|
||||
newFramePos.Y = _GridSize.Y * InventorySize.Y - (_GridSize.Y * TempSize.Y);
|
||||
}
|
||||
_itemBeingHeld.Frame.Position = newFramePos;
|
||||
}
|
||||
}
|
||||
|
||||
void MouseUp( Vector2 mousePos ) {
|
||||
if( _itemBeingHeld != null ) {
|
||||
Vector2I TempSize = _itemBeingHeld.Item.GridSize;
|
||||
if( _itemBeingHeld.Item.Rotated ) {
|
||||
TempSize = new Vector2I( _itemBeingHeld.Item.GridSize.Y, _itemBeingHeld.Item.GridSize.X );
|
||||
}
|
||||
Vector2 FinalGrid = new Vector2(
|
||||
Mathf.Round((mousePos.X + _itemBeingHeld.MouseOffset.X) / _GridSize.X),
|
||||
Mathf.Round((mousePos.Y + _itemBeingHeld.MouseOffset.Y) / _GridSize.Y)
|
||||
);
|
||||
if( FinalGrid.X < 0 ) { FinalGrid.X = 0; }
|
||||
if( FinalGrid.Y < 0 ) { FinalGrid.Y = 0; }
|
||||
if( FinalGrid.X > (InventorySize.X - TempSize.X) ) { FinalGrid.X = InventorySize.X - TempSize.X; }
|
||||
if( FinalGrid.Y > (InventorySize.Y - TempSize.Y) ) { FinalGrid.Y = InventorySize.Y - TempSize.Y; }
|
||||
if( CheckBlock( TempSize, new Vector2I( Convert.ToInt32( FinalGrid.X ), Convert.ToInt32( FinalGrid.Y )), _itemBeingHeld.Item ) ) { // Check fitment
|
||||
_itemBeingHeld.Item.GridPosition = new Vector2I( Convert.ToInt32( FinalGrid.X ), Convert.ToInt32( FinalGrid.Y ) );
|
||||
_itemBeingHeld.Frame.Position = _GridSize * FinalGrid + new Vector2( 5, 5 );
|
||||
} else {
|
||||
(InventoryItem, Panel)? itemAtSpot = GetItemFromScreen( mousePos );
|
||||
if( itemAtSpot.Value.Item1.isQuantityItem && itemAtSpot.Value.Item1.ItemID == _itemBeingHeld.Item.ItemID ) {
|
||||
// Try Combine
|
||||
int MaxQuantity = _itemBeingHeld.Item.MaxQuantity;
|
||||
int Total = itemAtSpot.Value.Item1.Quantity + _itemBeingHeld.Item.Quantity;
|
||||
if( Total > MaxQuantity ) {
|
||||
int remainder = Total - MaxQuantity;
|
||||
itemAtSpot.Value.Item1.Quantity = MaxQuantity;
|
||||
_itemBeingHeld.Item.Quantity = remainder;
|
||||
_itemBeingHeld.Frame.Position = new Vector2(
|
||||
_itemBeingHeld.Item.GridPosition.X * _GridSize.X + 5,
|
||||
_itemBeingHeld.Item.GridPosition.Y * _GridSize.Y + 5
|
||||
);
|
||||
} else {
|
||||
itemAtSpot.Value.Item1.Quantity = Total;
|
||||
MenuButton button = itemAtSpot.Value.Item2.GetChild<MenuButton>(0);
|
||||
button.Text = itemAtSpot.Value.Item1.Name + "\n" +
|
||||
itemAtSpot.Value.Item1.Quantity + " / " + itemAtSpot.Value.Item1.MaxQuantity;
|
||||
RemoveInventory( _itemBeingHeld.Item, _itemBeingHeld.Frame );
|
||||
}
|
||||
} else {
|
||||
_itemBeingHeld.Frame.Position = new Vector2(
|
||||
_itemBeingHeld.Item.GridPosition.X * _GridSize.X + 5,
|
||||
_itemBeingHeld.Item.GridPosition.Y * _GridSize.Y + 5
|
||||
);
|
||||
}
|
||||
}
|
||||
_itemBeingHeld = null;
|
||||
}
|
||||
}
|
||||
|
||||
void RightMouseDown( Vector2 mousePos ) {
|
||||
(InventoryItem, Panel)? clicked = GetItemFromScreen( mousePos );
|
||||
if( clicked.HasValue ) {
|
||||
_lastRightClickedItem = new HeldItem {
|
||||
Frame = clicked.Value.Item2,
|
||||
Item = clicked.Value.Item1,
|
||||
MouseStart = mousePos,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------//
|
||||
// Screen Space Math //
|
||||
//------------------------------//
|
||||
|
||||
(InventoryItem, Panel)? GetItemFromScreen( Vector2 screenPos ) {
|
||||
Vector2 ClickedGrid = new Vector2( Mathf.Floor(screenPos.X / _GridSize.X), Mathf.Floor(screenPos.Y / _GridSize.Y) );
|
||||
foreach( (InventoryItem, Panel) cur in _Inventory ) {
|
||||
Vector2I TempSize = cur.Item1.GridSize;
|
||||
if( cur.Item1.Rotated ) {
|
||||
TempSize = new Vector2I( cur.Item1.GridSize.Y, cur.Item1.GridSize.X );
|
||||
}
|
||||
if( ClickedGrid.X >= cur.Item1.GridPosition.X && ClickedGrid.X <= (cur.Item1.GridPosition.X + TempSize.X - 1) &&
|
||||
ClickedGrid.Y >= cur.Item1.GridPosition.Y && ClickedGrid.Y <= (cur.Item1.GridPosition.Y + TempSize.Y - 1) ) {
|
||||
return cur;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Vector2 TranslateGlobalToFramePosition( Vector2 globalPos ) {
|
||||
ScrollContainer InventoryFrame = GetChild<ScrollContainer>( 0 );
|
||||
Vector2 FrameGlobalPos = InventoryFrame.GlobalPosition;
|
||||
Vector2 ScrollAmount = new Vector2( InventoryFrame.ScrollHorizontal, InventoryFrame.ScrollVertical );
|
||||
Vector2 localPos = globalPos - FrameGlobalPos + ScrollAmount;
|
||||
return localPos;
|
||||
}
|
||||
|
||||
bool CheckBlock( Vector2I BlockSize, Vector2I BlockGridPostion, InventoryItem Ignore ) {
|
||||
for( int y = 0; y < BlockSize.Y; y++ ) {
|
||||
for( int x = 0; x < BlockSize.X; x++ ) {
|
||||
foreach( (InventoryItem, Control) cur in _Inventory ) {
|
||||
// Check Ignore
|
||||
if( Ignore != null && cur.Item1.Guid == Ignore.Guid ) {
|
||||
continue;
|
||||
}
|
||||
// Properly rotate block
|
||||
Vector2I tempSize;
|
||||
if( !cur.Item1.Rotated ) {
|
||||
tempSize = cur.Item1.GridSize;
|
||||
} else {
|
||||
tempSize = new Vector2I( cur.Item1.GridSize.Y, cur.Item1.GridSize.X );
|
||||
}
|
||||
// Check fit
|
||||
Vector2I curTopLeft = cur.Item1.GridPosition;
|
||||
Vector2I curBotRight = new Vector2I( cur.Item1.GridPosition.X + tempSize.X - 1, cur.Item1.GridPosition.Y + tempSize.Y - 1 );
|
||||
if( (x + BlockGridPostion.X) >= curTopLeft.X && (x + BlockGridPostion.X) <= curBotRight.X &&
|
||||
(y + BlockGridPostion.Y) >= curTopLeft.Y && (y + BlockGridPostion.Y) <= curBotRight.Y ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void frameInput( InputEvent iEvent ) {
|
||||
if ( iEvent is InputEventMouseButton mouseButton) {
|
||||
if( mouseButton.ButtonIndex == MouseButton.Left ) {
|
||||
if( mouseButton.Pressed ) {
|
||||
MouseDown( TranslateGlobalToFramePosition(mouseButton.GlobalPosition) );
|
||||
} else {
|
||||
MouseUp( TranslateGlobalToFramePosition( mouseButton.GlobalPosition ) );
|
||||
}
|
||||
} else if( mouseButton.ButtonIndex == MouseButton.Right ) {
|
||||
if ( mouseButton.Pressed ) {
|
||||
RightMouseDown( TranslateGlobalToFramePosition( mouseButton.GlobalPosition ) );
|
||||
}
|
||||
}
|
||||
} else if( iEvent is InputEventMouseMotion mouseMotion) {
|
||||
MouseMove( TranslateGlobalToFramePosition( mouseMotion.GlobalPosition ) );
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------//
|
||||
// Right Click Functions //
|
||||
//------------------------------//
|
||||
|
||||
(bool, Vector2I) TryRotate( InventoryItem item ) {
|
||||
Vector2I tempSize;
|
||||
if( item.Rotated ) {
|
||||
tempSize = item.GridSize;
|
||||
} else {
|
||||
tempSize = new Vector2I( item.GridSize.Y, item.GridSize.X );
|
||||
}
|
||||
// Go through the inventory grid minus overflow from the size of the item were trying to place
|
||||
for( int yindex = 0; yindex <= (InventorySize.Y - tempSize.Y); yindex++ ) {
|
||||
for( int xindex = 0; xindex <= (InventorySize.X - tempSize.X); xindex++ ) {
|
||||
if( CheckBlock( tempSize, new Vector2I( xindex, yindex ), item ) ) {
|
||||
return (true, new Vector2I(xindex, yindex));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (false, Vector2I.Zero);
|
||||
}
|
||||
|
||||
string GetNumbers( String InputString ) {
|
||||
String Result = "";
|
||||
string Numbers = "0123456789";
|
||||
int i = 0;
|
||||
|
||||
for( i = 0; i < InputString.Length; i++ ) {
|
||||
if( Numbers.Contains( InputString.ElementAt( i ) ) ) {
|
||||
Result += InputString.ElementAt( i );
|
||||
}
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
void SplitFrame_Split() {
|
||||
int quantity = Convert.ToInt32( _splitFrame.GetChild<LineEdit>( 1 ).Text );
|
||||
InventoryItem x = _lastRightClickedItem.Item;
|
||||
if (quantity <= x.Quantity ) {
|
||||
PickupItem test = new PickupItem( x.ItemID, x.Name, x.GridSize, x.Weight, x.isQuantityItem, quantity, x.MaxQuantity );
|
||||
if( AddInventory( test ) ) {
|
||||
_lastRightClickedItem.Item.Quantity -= quantity;
|
||||
UpdateItem( _lastRightClickedItem.Item );
|
||||
} else {
|
||||
_Reference.Alert.PerformAlert( "Not enough space to split" );
|
||||
}
|
||||
}
|
||||
_splitFrame.Free();
|
||||
_splitFrame = null;
|
||||
}
|
||||
|
||||
void SplitFrame_Cancel() {
|
||||
_splitFrame.Free();
|
||||
_splitFrame = null;
|
||||
}
|
||||
|
||||
void SplitFrame_TextChanged( string NewText ) {
|
||||
string output = GetNumbers( NewText );
|
||||
if ( string.IsNullOrEmpty( output ) ) {
|
||||
output = "0";
|
||||
}
|
||||
int test = Convert.ToInt32(output);
|
||||
if (test < 0) {
|
||||
test = 0;
|
||||
}else if (test > _lastRightClickedItem.Item.MaxQuantity) {
|
||||
test = _lastRightClickedItem.Item.MaxQuantity;
|
||||
}
|
||||
_splitFrame.GetChild<LineEdit>( 1 ).Text = test.ToString();
|
||||
_splitFrame.GetChild<LineEdit>( 1 ).CaretColumn = 50;
|
||||
}
|
||||
|
||||
void DropdownPressed( long index ) {
|
||||
InventoryOptions pressed = (InventoryOptions)index;
|
||||
if( pressed == InventoryOptions.Drop ) {
|
||||
DropInventory( _lastRightClickedItem.Item, _lastRightClickedItem.Frame );
|
||||
} else if( pressed == InventoryOptions.Rotate ) {
|
||||
(bool, Vector2I) tryRotate = TryRotate( _lastRightClickedItem.Item );
|
||||
if( tryRotate.Item1 ) {
|
||||
_lastRightClickedItem.Item.Rotated = !_lastRightClickedItem.Item.Rotated;
|
||||
Vector2 tempSize;
|
||||
if( _lastRightClickedItem.Item.Rotated ) {
|
||||
tempSize = new Vector2( _lastRightClickedItem.Item.GridSize.Y, _lastRightClickedItem.Item.GridSize.X );
|
||||
} else {
|
||||
tempSize = _lastRightClickedItem.Item.GridSize;
|
||||
}
|
||||
_lastRightClickedItem.Frame.Size = new Vector2( _GridSize.X * tempSize.X - 10, _GridSize.Y * tempSize.Y - 10 );
|
||||
_lastRightClickedItem.Frame.Position = new Vector2( tryRotate.Item2.X * _GridSize.X + 5, tryRotate.Item2.Y * _GridSize.Y + 5 );
|
||||
_lastRightClickedItem.Item.GridPosition = tryRotate.Item2;
|
||||
} else {
|
||||
_Reference.Alert.PerformAlert( "Not enough space to rotate");
|
||||
}
|
||||
} else if( pressed == InventoryOptions.Split ) {
|
||||
_splitFrame = SplitFrame.Instantiate<Control>();
|
||||
GetNode( "/root/Game/UI/" ).AddChild( _splitFrame );
|
||||
_splitFrame.GetChild<Button>( 2 ).ButtonDown += SplitFrame_Split;
|
||||
_splitFrame.GetChild<Button>( 3 ).ButtonDown += SplitFrame_Cancel;
|
||||
_splitFrame.GetChild<LineEdit>( 1 ).TextChanged += SplitFrame_TextChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------//
|
||||
// Data Objects //
|
||||
//------------------------------//
|
||||
|
||||
class HeldItem {
|
||||
public Vector2 MouseStart;
|
||||
public Vector2 MouseOffset;
|
||||
public InventoryItem Item;
|
||||
public Panel Frame;
|
||||
}
|
||||
|
||||
public class PickupItem : InventoryItem {
|
||||
public Guid Guid { get; }
|
||||
public int ItemID { get; }
|
||||
public string Name { get; }
|
||||
public Vector2I GridPosition { get; set; }
|
||||
public bool Rotated { get; set; }
|
||||
public Vector2I GridSize { get; }
|
||||
public int Weight {get;}
|
||||
public bool isQuantityItem { get; }
|
||||
public int Quantity { get; set; }
|
||||
public int MaxQuantity { get; set; }
|
||||
public string ToolPath{ get; }
|
||||
|
||||
public PickupItem( int _ItemID, string _Name, Vector2I _GridSize, int _Weight, bool _isQuantityItem, int _Quanitity = 0, int _MaxQuantity = 0, string _ToolPath = "" ) {
|
||||
Guid = Guid.NewGuid();
|
||||
ItemID = _ItemID;
|
||||
Name = _Name;
|
||||
GridSize = _GridSize;
|
||||
Weight = _Weight;
|
||||
isQuantityItem = _isQuantityItem;
|
||||
Quantity = _Quanitity;
|
||||
MaxQuantity = _MaxQuantity;
|
||||
ToolPath = _ToolPath;
|
||||
}
|
||||
}
|
||||
|
||||
public interface InventoryItem {
|
||||
public Guid Guid { get; }
|
||||
public int ItemID { get; }
|
||||
public string Name { get; }
|
||||
public Vector2I GridPosition { get; set; }
|
||||
public bool Rotated { get; set; }
|
||||
public Vector2I GridSize { get; }
|
||||
public int Weight { get; }
|
||||
public bool isQuantityItem { get; }
|
||||
public int Quantity { get; set; }
|
||||
public int MaxQuantity { get; set; }
|
||||
public string ToolPath { get; }
|
||||
}
|
||||
|
||||
enum InventoryOptions {
|
||||
Drop,
|
||||
Rotate,
|
||||
Split
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Godot;
|
||||
|
||||
public partial class Pickup : RigidBody3D {
|
||||
|
||||
[Export]
|
||||
public int ItemID {get; set;}
|
||||
|
||||
[Export]
|
||||
public int Quantity {get; set;}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Godot;
|
||||
|
||||
public partial class SpawnPoint : Node3D {
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
public override void _EnterTree() {
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.PlayerSpawnPoints = this.GetChild<Node3D>(0);
|
||||
_Reference.ItemSpawnPoints = this.GetChild<Node3D>(1);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using System.Diagnostics;
|
||||
|
||||
public partial class SelectTool : Node3D, ITool {
|
||||
|
||||
public int ToolID { get{ return -1; } } // -1 for non-existant tool stat
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
ItemStats _Stats;
|
||||
|
||||
[Export] PackedScene SelectToolFrame;
|
||||
[Export] Material HoverMaterial;
|
||||
Material _defaultMaterial;
|
||||
MeshInstance3D _lookingAt;
|
||||
Control _SelectToolFrame;
|
||||
bool mouseDown = false;
|
||||
bool mouseDownDebounce = false;
|
||||
bool equipped = false;
|
||||
|
||||
public (bool, Dictionary) screenSpaceToRay( float Distance ) {
|
||||
Vector2 ClickPos = GetViewport().GetMousePosition();
|
||||
Vector3 from = _Reference.Camera.ProjectRayOrigin( ClickPos );
|
||||
Vector3 to = from + _Reference.Camera.ProjectRayNormal( ClickPos ) * Distance;
|
||||
|
||||
PhysicsDirectSpaceState3D spaceState = GetWorld3D().DirectSpaceState;
|
||||
Dictionary rayArray = spaceState.IntersectRay(new PhysicsRayQueryParameters3D(){ From=from, To=to });
|
||||
|
||||
if( rayArray.Count > 0 ) {
|
||||
return (true, rayArray);
|
||||
}
|
||||
return (false, null);
|
||||
}
|
||||
|
||||
void ClearLookingAt() {
|
||||
if( _lookingAt != null ) {
|
||||
_lookingAt.SetSurfaceOverrideMaterial( 0, _defaultMaterial );
|
||||
_lookingAt = null;
|
||||
_SelectToolFrame.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _PhysicsProcess( double delta ) {
|
||||
if( equipped ) {
|
||||
var x = screenSpaceToRay(_Options.ClickDistance);
|
||||
if( x.Item1 ) {
|
||||
Node test = (Node)x.Item2["collider"];
|
||||
if( test is Pickup ) {
|
||||
|
||||
int ItemID = ((Pickup)test).ItemID;
|
||||
int Quantity = ((Pickup)test).Quantity;
|
||||
StatItem ItemStats = _Stats.stats[ ItemID ];
|
||||
PickupItem item = new PickupItem( ItemID, ItemStats.ItemName, ItemStats.InventorySize, ItemStats.Weight, ItemStats.IsQuantityItem, Quantity, ItemStats.MaxQuantity, ItemStats.ToolPath );
|
||||
|
||||
if( _lookingAt == null ) {
|
||||
_lookingAt = test.GetChild<MeshInstance3D>( 1 );
|
||||
_defaultMaterial = _lookingAt.GetSurfaceOverrideMaterial( 0 );
|
||||
_lookingAt.SetSurfaceOverrideMaterial( 0, HoverMaterial );
|
||||
_SelectToolFrame.Visible = true;
|
||||
_SelectToolFrame.GetChild<Label>( 0 ).Text = item.Name;
|
||||
_SelectToolFrame.GetChild<Label>( 1 ).Text = "Slot : " + item.GridSize.ToString();
|
||||
_SelectToolFrame.GetChild<Label>( 2 ).Text = "Weight : " + item.Weight;
|
||||
if (item.isQuantityItem ) {
|
||||
_SelectToolFrame.GetChild<Label>( 3 ).Text = "Capacity : " + item.Quantity + "/" + item.MaxQuantity;
|
||||
_SelectToolFrame.Size = new Vector2( _SelectToolFrame.Size.X, 95 );
|
||||
} else {
|
||||
_SelectToolFrame.GetChild<Label>( 3 ).Text = "";
|
||||
_SelectToolFrame.Size = new Vector2( _SelectToolFrame.Size.X, 72 );
|
||||
}
|
||||
}else if (_lookingAt != test.GetChild<MeshInstance3D>( 1 ) ) {
|
||||
ClearLookingAt();
|
||||
}
|
||||
if( mouseDown && mouseDownDebounce ) {
|
||||
mouseDownDebounce = false;
|
||||
bool PickedUp = _Reference.Inventory.AddInventory(item);
|
||||
if( PickedUp ) {
|
||||
ClearLookingAt();
|
||||
_Reference.GameHandler.ClearItemNetworked( test.Name );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ClearLookingAt();
|
||||
}
|
||||
} else {
|
||||
ClearLookingAt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Equiped() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Stats = (ItemStats)_Reference.ItemSpawnPath;
|
||||
_SelectToolFrame = SelectToolFrame.Instantiate<Control>();
|
||||
GetNode( "/root/GameRoot/UI/GameUI/Game" ).AddChild( _SelectToolFrame );
|
||||
equipped = true;
|
||||
}
|
||||
|
||||
public void LeftMouseDown() {
|
||||
mouseDown = true;
|
||||
mouseDownDebounce = true;
|
||||
}
|
||||
|
||||
public void LeftMouseUp() {
|
||||
mouseDown = false;
|
||||
mouseDownDebounce = false;
|
||||
}
|
||||
|
||||
public void KeyPress( Key key ) {}
|
||||
public void KeyRelease( Key key ) {}
|
||||
public void RightMouseDown() {}
|
||||
public void RightMouseUp() {}
|
||||
public void UnEquipped() {
|
||||
if (_SelectToolFrame != null ) {
|
||||
_SelectToolFrame.Free();
|
||||
}
|
||||
equipped = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class Sniper : Node, ITool {
|
||||
|
||||
public int ToolID { get{ return 0; } } // Match ToolID to ItemStat Index
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
float BulletSpawnSpacing = 2; // Distance off the front of the camera that the bullet spawn
|
||||
|
||||
bool isZoomed = false;
|
||||
float ZoomFOV = 30;
|
||||
float _normalZoom;
|
||||
|
||||
float HipAccuracy = 5; // Maximum offset in degrees | 15 would be 7.5 deg in each direction
|
||||
float HipRecoil = 5; // Maximum offset in degrees | 5 would be 2.5 horizontally and 5 up
|
||||
|
||||
float AimAccuracy = 2; // Maximum offset in degrees
|
||||
float AimRecoil = 2; // Maximum offset in degrees
|
||||
|
||||
public void Equiped() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_normalZoom = _Reference.Camera.Fov;
|
||||
}
|
||||
|
||||
public void KeyPress( Key key ) {
|
||||
|
||||
}
|
||||
|
||||
public void KeyRelease( Key key ) {
|
||||
|
||||
}
|
||||
|
||||
Vector3 Accuracy() {
|
||||
Random Random = new Random( DateTime.Now.Millisecond );
|
||||
if( isZoomed ) {
|
||||
float xAccuracy = ( ( Random.NextSingle() * 2 ) - 1 ) * AimAccuracy / 2;
|
||||
float yAccuracy = ( ( Random.NextSingle() * 2 ) - 1 ) * AimAccuracy / 2;
|
||||
return new Vector3( xAccuracy, yAccuracy, 0 );
|
||||
} else {
|
||||
float xAccuracy = ( ( Random.NextSingle() * 2 ) - 1 ) * HipAccuracy / 2;
|
||||
float yAccuracy = ( ( Random.NextSingle() * 2 ) - 1 ) * HipAccuracy / 2;
|
||||
return new Vector3( xAccuracy, yAccuracy, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
void Recoil() {
|
||||
Random Random = new Random( DateTime.Now.Millisecond );
|
||||
Vector2 recoil;
|
||||
if ( isZoomed ) {
|
||||
float xRecoil = ( ( Random.NextSingle() * 2 ) - 1 ) * AimRecoil / 2;
|
||||
float yRecoil = Random.NextSingle() * AimRecoil;
|
||||
recoil = new Vector2( xRecoil, yRecoil );
|
||||
} else {
|
||||
float xRecoil = ( ( Random.NextSingle() * 2 ) - 1 ) * HipRecoil / 2;
|
||||
float yRecoil = Random.NextSingle() * HipRecoil;
|
||||
recoil = new Vector2( xRecoil, yRecoil );
|
||||
}
|
||||
_Reference.Camera.RotateX( 1 ); // IE Up and Down
|
||||
_Reference.Humanoid.RotateX( 1 ); // IE Left and Right
|
||||
}
|
||||
|
||||
public void LeftMouseDown() {
|
||||
Vector3 LookVector = -_Reference.Camera.GlobalBasis.Z;
|
||||
_Reference.GameHandler.Shoot(ToolID, LookVector, 200);
|
||||
//Recoil();
|
||||
}
|
||||
|
||||
public void LeftMouseUp() {
|
||||
|
||||
}
|
||||
|
||||
public void RightMouseDown() {
|
||||
isZoomed = true;
|
||||
_Reference.Camera.Fov = ZoomFOV;
|
||||
}
|
||||
|
||||
public void RightMouseUp() {
|
||||
isZoomed = false;
|
||||
_Reference.Camera.Fov = _normalZoom;
|
||||
}
|
||||
|
||||
public void UnEquipped() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Godot;
|
||||
|
||||
public interface ITool {
|
||||
public int ToolID{ get; }
|
||||
public void Equiped();
|
||||
public void UnEquipped();
|
||||
public void LeftMouseDown();
|
||||
public void LeftMouseUp();
|
||||
public void RightMouseDown();
|
||||
public void RightMouseUp();
|
||||
public void KeyPress( Key key );
|
||||
public void KeyRelease( Key key );
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
using System;
|
||||
using Godot;
|
||||
|
||||
public partial class GameHandler : Node3D {
|
||||
Reference _Reference;
|
||||
Options _Options;
|
||||
|
||||
[Export]
|
||||
public PackedScene[] MapList;
|
||||
|
||||
[Export]
|
||||
public PackedScene Player;
|
||||
|
||||
[Export]
|
||||
public PackedScene Sun;
|
||||
|
||||
public bool serverRunning = false;
|
||||
|
||||
public override void _Ready() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.GameHandler = this;
|
||||
|
||||
_Reference.GameUI = GetNode<Control>("/root/GameRoot/UI/GameUI");
|
||||
_Reference.Lighting = GetNode<WorldEnvironment>("/root/GameRoot/Lighting");
|
||||
_Reference.ItemSpawner = GetNode<MultiplayerSpawner>("/root/GameRoot/ItemSpawner");
|
||||
_Reference.ItemSpawnPath = GetNode<Node>("/root/GameRoot/PickupItems");
|
||||
_Reference.ToolBar = GetNode<Control>("/root/GameRoot/UI/GameUI/Game/ToolBar");
|
||||
|
||||
string[] CMDS = OS.GetCmdlineArgs();
|
||||
bool temp_launch_as_server = false;
|
||||
|
||||
for( int i = 0; i < CMDS.Length; i++ ) {
|
||||
if( CMDS [i].ToLower() == "--map" | CMDS [i].ToLower() == "/map" ) {
|
||||
_Options.SelectedMap = Convert.ToInt32( CMDS [i + 1] );
|
||||
} else if( CMDS [i].ToLower() == "--port" | CMDS [i].ToLower() == "/port" ) {
|
||||
_Options.Port = Convert.ToInt32( CMDS [i + 1] );
|
||||
} else if( CMDS [i].ToLower() == "--players" | CMDS [i].ToLower() == "/players" ) {
|
||||
_Options.maxPlayers = Convert.ToInt32( CMDS [i + 1] );
|
||||
} else if( CMDS [i].ToLower() == "--host" | CMDS [i].ToLower() == "/host" ) {
|
||||
_Options.Host = CMDS [i + 1];
|
||||
} else if( CMDS [i].ToLower() == "server" ) {
|
||||
temp_launch_as_server = true;
|
||||
}
|
||||
}
|
||||
|
||||
if( OS.HasFeature( "dedicated_server" ) || DisplayServer.GetName() == "headless" || temp_launch_as_server ) {
|
||||
StartServer();
|
||||
}
|
||||
}
|
||||
|
||||
public void StartServer(){
|
||||
_Options.isServer = true;
|
||||
_Options.connection = new ENetMultiplayerPeer();
|
||||
_Options.connection.CreateServer( _Options.Port, _Options.maxPlayers );
|
||||
Multiplayer.MultiplayerPeer = _Options.connection;
|
||||
|
||||
_Options.connection.PeerConnected += peerConnected;
|
||||
_Options.connection.PeerDisconnected += peerDisconnected;
|
||||
|
||||
Node3D MapSelected = _Reference.GameHandler.MapList[_Options.SelectedMap].Instantiate<Node3D>();
|
||||
MapSelected.SetMultiplayerAuthority(Multiplayer.GetUniqueId());
|
||||
MapSelected.Name = "Workspace";
|
||||
_Reference.Workspace = MapSelected;
|
||||
_Reference.GameHandler.AddChild( MapSelected );
|
||||
|
||||
// Spawn the sun
|
||||
AddChild( Sun.Instantiate<Node3D>() );
|
||||
|
||||
ResetItemDrops();
|
||||
serverRunning = true;
|
||||
}
|
||||
public void StopServer(){
|
||||
serverRunning = false;
|
||||
}
|
||||
|
||||
|
||||
public void StopClient(){
|
||||
_Options.connection.PeerConnected -= peerConnected;
|
||||
_Options.connection.PeerDisconnected -= peerDisconnected;
|
||||
_Reference.Workspace.Multiplayer.ConnectedToServer -= ConnectedToServer;
|
||||
_Reference.Workspace.Multiplayer.ConnectionFailed -= ConnectionFailed;
|
||||
_Reference.Workspace.Multiplayer.ServerDisconnected -= DisconnectedFromServer;
|
||||
}
|
||||
|
||||
public void StartClient(){
|
||||
_Options.connection = new ENetMultiplayerPeer();
|
||||
_Options.connection.CreateClient( _Options.Host, _Options.Port );
|
||||
Multiplayer.MultiplayerPeer = _Options.connection;
|
||||
|
||||
Multiplayer.ConnectedToServer += ConnectedToServer;
|
||||
Multiplayer.ConnectionFailed += ConnectionFailed;
|
||||
Multiplayer.ServerDisconnected += DisconnectedFromServer;
|
||||
}
|
||||
|
||||
public void RemovePlayer(int id){
|
||||
if (HasNode(id.ToString())) {
|
||||
GetNode(id.ToString()).QueueFree();
|
||||
}
|
||||
}
|
||||
|
||||
double timeElapsed = 0;
|
||||
void ResetItemDrops(){
|
||||
foreach( Node3D cur in _Reference.ItemSpawnPath.GetChildren()){
|
||||
cur.QueueFree();
|
||||
}
|
||||
foreach( Node3D cur in _Reference.ItemSpawnPoints.GetChildren() ){
|
||||
string[] PickupItems = _Reference.ItemSpawner._SpawnableScenes;
|
||||
int chosenItem = new Random(DateTime.Now.Millisecond).Next(0, PickupItems.Length);
|
||||
PackedScene ps = GD.Load<PackedScene>(PickupItems[chosenItem]);
|
||||
Node3D prefab = ps.Instantiate<Node3D>();
|
||||
prefab.Name = Guid.NewGuid().ToString();
|
||||
_Reference.ItemSpawnPath.AddChild( prefab );
|
||||
prefab.GlobalPosition = cur.GlobalPosition;
|
||||
}
|
||||
}
|
||||
public override void _Process(double delta) {
|
||||
if(serverRunning){
|
||||
timeElapsed += delta;
|
||||
if (timeElapsed > _Options.timeBetweenDropsReset * 60){
|
||||
ResetItemDrops();
|
||||
timeElapsed = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Called on server
|
||||
public void peerConnected( long peerID ) {
|
||||
|
||||
}
|
||||
public void peerDisconnected( long peerID ) {
|
||||
RemovePlayer(Convert.ToInt32(peerID));
|
||||
}
|
||||
|
||||
// Called on client
|
||||
public void ConnectedToServer() {
|
||||
_Reference.Alert.PerformAlert( "Connected to server successfully" );
|
||||
}
|
||||
public void ConnectionFailed() {
|
||||
_Reference.Alert.PerformAlert( "Connection failed" );
|
||||
}
|
||||
public void DisconnectedFromServer() {
|
||||
_Reference.Alert.PerformAlert( "Disconnected from server" );
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
/// RPC's
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
[Rpc( MultiplayerApi.RpcMode.AnyPeer, CallLocal = true, TransferChannel = 1, TransferMode = MultiplayerPeer.TransferModeEnum.Reliable)]
|
||||
void _takeDamage(float DMG, int Creator, int Hit){
|
||||
// Take Damage
|
||||
Humanoid HitUser = null;
|
||||
foreach(Node cur in _Reference.GameHandler.GetChildren()){
|
||||
if ( cur.Name.ToString().Split(new char[]{','})[0] == Hit.ToString() ){
|
||||
HitUser = (Humanoid)cur;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Humanoid CreatorUser = null;
|
||||
foreach(Node cur in _Reference.GameHandler.GetChildren()){
|
||||
if ( cur.Name.ToString().Split(new char[]{','})[0] == Creator.ToString() ){
|
||||
CreatorUser = (Humanoid)cur;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HitUser.Health -= DMG;
|
||||
|
||||
// If Player Died
|
||||
if( HitUser.Health <= 0 ) {
|
||||
// Stuff to do on the died players computer
|
||||
if (HitUser.GetMultiplayerAuthority() == Multiplayer.GetUniqueId()){
|
||||
Input.MouseMode = Input.MouseModeEnum.Visible;
|
||||
_Reference.Alert.PerformAlert("You died from Player : " + CreatorUser.PlayerName);
|
||||
}
|
||||
// Stuff to do on the killers computer
|
||||
else if (CreatorUser.GetMultiplayerAuthority() == Multiplayer.GetUniqueId()){
|
||||
_Reference.Alert.PerformAlert("You killed Player : " + HitUser.PlayerName);
|
||||
}
|
||||
// Stuff to do on Server
|
||||
else if ( Multiplayer.GetUniqueId() == 1 ){
|
||||
|
||||
}
|
||||
// Stuff to perform for everybody
|
||||
// Award the player points
|
||||
// Notify Player of kill
|
||||
// Reset Dead player
|
||||
}
|
||||
|
||||
// Update UI For Hit Player
|
||||
if (HitUser.GetMultiplayerAuthority() == Multiplayer.GetUniqueId()){
|
||||
HitUser.HealthBar.MaxValue = HitUser.MaxHealth;
|
||||
HitUser.HealthBar.Value = Convert.ToDouble( HitUser.Health );
|
||||
}
|
||||
}
|
||||
public void TakeDamage(float DMG, int Creator, int Hit){
|
||||
Rpc("_takeDamage", DMG, Creator, Hit);
|
||||
}
|
||||
|
||||
[Rpc( MultiplayerApi.RpcMode.AnyPeer, CallLocal = false, TransferChannel = 1, TransferMode = MultiplayerPeer.TransferModeEnum.Reliable)]
|
||||
void _Shoot(int Creator, int itemID, Vector3 initialPosition, Vector3 ImpulseVector){
|
||||
if (Multiplayer.GetUniqueId() == 1){
|
||||
PackedScene ps = GD.Load<PackedScene>("res://Prefab/bullet.tscn");
|
||||
Bullet physicsBullet = ps.Instantiate<Bullet>();
|
||||
physicsBullet.Name = Guid.NewGuid().ToString();
|
||||
physicsBullet.Creator = Creator;
|
||||
physicsBullet.Damage = ((ItemStats)_Reference.ItemSpawnPath).stats[itemID].ToolDamage ;
|
||||
GetNode<Node3D>("/root/GameRoot/Game").AddChild(physicsBullet);
|
||||
physicsBullet.SetDeferred("global_position", initialPosition);
|
||||
physicsBullet.CallDeferred("apply_impulse", ImpulseVector);
|
||||
}
|
||||
}
|
||||
public void Shoot(int ToolID, Vector3 LookVector, float ImpulseForce){
|
||||
Rpc("_Shoot", Multiplayer.GetUniqueId(), ToolID, _Reference.Humanoid.GlobalPosition + LookVector * 4, LookVector * ImpulseForce);
|
||||
}
|
||||
|
||||
[Rpc( MultiplayerApi.RpcMode.AnyPeer, CallLocal = false, TransferChannel = 1, TransferMode = MultiplayerPeer.TransferModeEnum.Reliable)]
|
||||
void _SpawnPlayer( int UniqueID, string PlayerName, int AbilityIndex ){
|
||||
if (Multiplayer.IsServer()){
|
||||
Humanoid playerCharacter = _Reference.GameHandler.Player.Instantiate<Humanoid>();
|
||||
playerCharacter.Name = UniqueID.ToString() + "," + AbilityIndex + "," + PlayerName;
|
||||
playerCharacter.PlayerName = PlayerName;
|
||||
AddChild(playerCharacter, true);
|
||||
playerCharacter.SetMultiplayerAuthority( UniqueID );
|
||||
}
|
||||
}
|
||||
public void SpawnPlayer( int UniqueID, string PlayerName, Ability _Ability ){
|
||||
Rpc( "_SpawnPlayer", UniqueID, PlayerName, (int)_Ability );
|
||||
}
|
||||
|
||||
[Rpc( MultiplayerApi.RpcMode.AnyPeer, CallLocal = true, TransferChannel = 1, TransferMode = MultiplayerPeer.TransferModeEnum.Reliable)]
|
||||
void _clearItemNetworked(string ItemName){
|
||||
Node3D item = _Reference.ItemSpawnPath.GetNode<Node3D>(ItemName);
|
||||
if (item != null){
|
||||
try{
|
||||
item.QueueFree();
|
||||
}catch{}
|
||||
}
|
||||
}
|
||||
public void ClearItemNetworked( string ItemName ){
|
||||
Rpc("_clearItemNetworked", ItemName);
|
||||
}
|
||||
|
||||
public class HumanoidStats {
|
||||
public int HumanoidOwner { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public int MaxHealth { get; set; }
|
||||
public int Health { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class MainMenu : Control {
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
public override void _Ready() {
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference.MainMenu = this;
|
||||
}
|
||||
|
||||
void _on_settings_button_down() {
|
||||
_Reference.SettingsFrame.ToggleSettingsVisibility();
|
||||
}
|
||||
|
||||
public async void _on_join_game_pressed() {
|
||||
SettingsFile sf = _Options._SettingsFile;
|
||||
GameSettings gs = sf.Game;
|
||||
string userN = gs.UserName;
|
||||
string passW = gs.SessionToken;
|
||||
(bool, Account) User = await _Reference.MistoxNet.TrySession( userN, passW );
|
||||
if( User.Item1 ) {
|
||||
_Reference.Lighting.Environment.SsrEnabled = sf.Display.ScreenSpaceReflections;
|
||||
_Reference.Lighting.Environment.SsaoEnabled = sf.Display.ScreenSpaceAmbiantOcclusion;
|
||||
_Reference.Lighting.Environment.SdfgiEnabled = sf.Display.GlobalIllumination;
|
||||
_Reference.GameHandler.Visible = true;
|
||||
_Reference.GameUI.Visible = true;
|
||||
Visible = false;
|
||||
_Options.Host = GetNode<TextEdit>("Host").Text;
|
||||
_Reference.GameHandler.StartClient();
|
||||
this.Visible = false;
|
||||
_Reference.PreGame.Visible = true;
|
||||
|
||||
} else {
|
||||
_Reference.Alert.PerformAlert( "Login failed" );
|
||||
_Reference.SessionHandler.GetParent<Control>().Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void _on_start_server_pressed(){
|
||||
_Reference.GameHandler.StartServer();
|
||||
_Reference.MainMenu.Visible = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class PreGame : Control {
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
Label _AbilityLabel;
|
||||
public Ability _Ability = Ability.None;
|
||||
|
||||
[Export]
|
||||
public PackedScene Backpack;
|
||||
|
||||
public override void _Ready() {
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference.PreGame = this;
|
||||
_AbilityLabel = this.GetChild<Label>(0);
|
||||
_AbilityLabel.Text = "Current Ability : " + _Ability.ToString();
|
||||
}
|
||||
|
||||
public void _on_ability_pressed() {
|
||||
int AbilityIndex = (int)_Ability;
|
||||
_Ability = ( Ability )(AbilityIndex + 1);
|
||||
if( AbilityIndex >= Enum.GetValues( typeof( Ability ) ).Length - 1 ) {
|
||||
_Ability = 0;
|
||||
}
|
||||
_AbilityLabel.Text = "Current Ability : " + _Ability.ToString();
|
||||
}
|
||||
|
||||
public void _on_player_spawn_pressed(){
|
||||
Inventory inv = Backpack.Instantiate<Inventory>();
|
||||
GetNode<Control>("/root/GameRoot/UI/GameUI").AddChild(inv);
|
||||
inv.Name = "Inventory";
|
||||
|
||||
_Reference.GameHandler.SpawnPlayer( Multiplayer.GetUniqueId(), _Options._SettingsFile.Game.UserName, _Ability );
|
||||
_Reference.PreGame.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Ability {
|
||||
None, // No boost perk
|
||||
Vitality, // Gain slightly more health
|
||||
Strength, // Gain extra weight carrying | moves faster with more stuff
|
||||
Stamina, // Run Faster
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using Godot;
|
||||
|
||||
public partial class SessionHandler : Panel {
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
[Export] LineEdit UsernameBox;
|
||||
[Export] LineEdit PasswordBox;
|
||||
|
||||
public override void _Ready() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.SessionHandler = this;
|
||||
}
|
||||
|
||||
public async void onLogin() {
|
||||
(bool, Account) User = await _Reference.MistoxNet.TryLogin( UsernameBox.Text, PasswordBox.Text );
|
||||
if( User.Item1 ) {
|
||||
_Reference.Alert.PerformAlert( "Login Success" );
|
||||
_Options._SettingsFile.Game.UserName = User.Item2.UserName;
|
||||
_Options._SettingsFile.Game.SessionToken = User.Item2.PasswordHash;
|
||||
_Options._SettingsFile.Save();
|
||||
GetParent<Control>().Visible = false;
|
||||
} else {
|
||||
_Reference.Alert.PerformAlert("Login Failed");
|
||||
}
|
||||
}
|
||||
|
||||
public void onRegister() {
|
||||
OS.ShellOpen("https://www.mistox.net/account/register");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
public partial class Settings : TabContainer {
|
||||
|
||||
Control _GameSettings;
|
||||
Control _DisplaySettings;
|
||||
Control _AudioSettings;
|
||||
Control _InputSettings;
|
||||
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
public override void _Ready() {
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference.SettingsFrame = this;
|
||||
|
||||
// Get Locations For Settings
|
||||
_GameSettings = GetChild( ( int )Tabs.Game ).GetChild( 0 ).GetChild<Control>( 0 );
|
||||
_DisplaySettings = GetChild( ( int )Tabs.Display ).GetChild( 0 ).GetChild<Control>( 0 );
|
||||
_AudioSettings = GetChild( ( int )Tabs.Audio ).GetChild( 0 ).GetChild<Control>( 0 );
|
||||
_InputSettings = GetChild( ( int )Tabs.Input ).GetChild( 0 ).GetChild<Control>( 0 );
|
||||
|
||||
if( !_Options.isServer ) {
|
||||
|
||||
// Load Settings
|
||||
_Options._SettingsFile = new SettingsFile( "Settings.json" );
|
||||
SetSettings();
|
||||
|
||||
// Game Settings
|
||||
|
||||
// Display Settings
|
||||
Action<DisplayServer.WindowMode> wm = ( DisplayServer.WindowMode mode ) => { _Options._SettingsFile.Display.WindowMode = mode; };
|
||||
BuildSetting( "Window Mode", _DisplaySettings, _Options._SettingsFile.Display.WindowMode, wm );
|
||||
Action<float> rs = ( float mode ) => { _Options._SettingsFile.Display.ScreenScalingFactor = mode; };
|
||||
BuildSetting( "Resolution Scale", _DisplaySettings, _Options._SettingsFile.Display.ScreenScalingFactor, rs );
|
||||
Action<int> mf = ( int mode ) => { _Options._SettingsFile.Display.MaxFPS = mode; };
|
||||
BuildSetting( "Max FPS", _DisplaySettings, _Options._SettingsFile.Display.MaxFPS, mf );
|
||||
Action<DisplayServer.VSyncMode> vs = ( DisplayServer.VSyncMode mode ) => { _Options._SettingsFile.Display.VSync = mode; };
|
||||
BuildSetting( "VSync", _DisplaySettings, _Options._SettingsFile.Display.VSync, vs );
|
||||
Action<Viewport.Scaling3DModeEnum> ss = ( Viewport.Scaling3DModeEnum mode ) => { _Options._SettingsFile.Display.ScreenScaling = mode; };
|
||||
BuildSetting( "Screen Scaling", _DisplaySettings, _Options._SettingsFile.Display.ScreenScaling, ss );
|
||||
Action<float> fs = (float mode) => { _Options._SettingsFile.Display.FSRSharpness = mode; };
|
||||
BuildSetting( "FSR Sharpness", _DisplaySettings, _Options._SettingsFile.Display.FSRSharpness, fs );
|
||||
Action<Viewport.Msaa> msaa = ( Viewport.Msaa mode ) => { _Options._SettingsFile.Display.Msaa = mode; };
|
||||
BuildSetting( "MSAA", _DisplaySettings, _Options._SettingsFile.Display.Msaa, msaa );
|
||||
Action<Viewport.ScreenSpaceAAEnum> ssaa = ( Viewport.ScreenSpaceAAEnum mode ) => { _Options._SettingsFile.Display.ScreenSpaceAA = mode; };
|
||||
BuildSetting( "SSAA", _DisplaySettings, _Options._SettingsFile.Display.ScreenSpaceAA, ssaa );
|
||||
Action<bool> taa = ( bool mode ) => { _Options._SettingsFile.Display.TAA = mode; };
|
||||
BuildSetting( "TAA", _DisplaySettings, _Options._SettingsFile.Display.TAA, taa );
|
||||
Action<bool> SSR = ( bool mode ) => { _Options._SettingsFile.Display.ScreenSpaceReflections = mode; };
|
||||
BuildSetting( "Screen Space Reflections", _DisplaySettings, _Options._SettingsFile.Display.ScreenSpaceReflections, SSR );
|
||||
Action<bool> SSIL = ( bool mode ) => { _Options._SettingsFile.Display.ScreenSpaceIndirectLighting = mode; };
|
||||
BuildSetting( "Indirect Lighting", _DisplaySettings, _Options._SettingsFile.Display.ScreenSpaceIndirectLighting, SSIL );
|
||||
Action<bool> SSAO = ( bool mode ) => { _Options._SettingsFile.Display.ScreenSpaceAmbiantOcclusion = mode; };
|
||||
BuildSetting( "Ambiant Occlusion", _DisplaySettings, _Options._SettingsFile.Display.ScreenSpaceAmbiantOcclusion, SSAO );
|
||||
Action<bool> GI = ( bool mode ) => { _Options._SettingsFile.Display.GlobalIllumination = mode; };
|
||||
BuildSetting( "Global Ilumination", _DisplaySettings, _Options._SettingsFile.Display.GlobalIllumination, GI );
|
||||
|
||||
|
||||
// Audio Settings
|
||||
|
||||
// Input Settings
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool settingsVisible = true;
|
||||
public void ToggleSettingsVisibility() {
|
||||
if( _Options.isAlive ) {
|
||||
|
||||
} else {
|
||||
GetNode<Control>( "/root/GameRoot/UI/SettingsFrame" ).Visible = settingsVisible;
|
||||
|
||||
GetNode<Control>( "/root/GameRoot/UI/MainMenu/ButtonList" ).Visible = !settingsVisible;
|
||||
GetNode<Control>( "/root/GameRoot/UI/MainMenu/SelectedAbility" ).Visible = !settingsVisible;
|
||||
settingsVisible = !settingsVisible;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void OnSaveButtonDown() {
|
||||
SetSettings();
|
||||
_Options._SettingsFile.Save();
|
||||
_Reference.Alert.PerformAlert( "Settings Saved" );
|
||||
if ( !settingsVisible ) {
|
||||
ToggleSettingsVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnCancelButtonDown() {
|
||||
if ( !settingsVisible ) {
|
||||
ToggleSettingsVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
void BuildSetting<T>( string SettingName, Control Parent, T DefaultSetting, Action<T> SettingEvent ) {
|
||||
Control SettingFrameControl = new Control{
|
||||
CustomMinimumSize = new Vector2(0, 50)
|
||||
};
|
||||
Panel Background = new Panel{
|
||||
LayoutMode = 1
|
||||
};
|
||||
Background.SetAnchorsPreset( LayoutPreset.TopWide );
|
||||
Background.SetSize( new Vector2( 780, 50 ) );
|
||||
Background.Position = new Vector2( 10, 10 );
|
||||
SettingFrameControl.AddChild( Background );
|
||||
HBoxContainer container = new HBoxContainer{
|
||||
LayoutMode = 1
|
||||
};
|
||||
container.SetAnchorsPreset( LayoutPreset.FullRect );
|
||||
Background.AddChild( container );
|
||||
Label SettingTitle = new Label{
|
||||
Text = SettingName,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Uppercase = true,
|
||||
CustomMinimumSize = new Vector2(390, 0)
|
||||
};
|
||||
container.AddChild( SettingTitle );
|
||||
if( typeof( T ) == typeof( float ) ) {
|
||||
// Slider 0 - 2
|
||||
HSlider slider = new HSlider{
|
||||
CustomMinimumSize = new Vector2(390, 50),
|
||||
MinValue = 0,
|
||||
MaxValue = 20,
|
||||
TickCount = 21,
|
||||
Rounded = true,
|
||||
Value = Convert.ToSingle(DefaultSetting) * 10
|
||||
};
|
||||
slider.DragEnded += (bool changed) => {
|
||||
SettingEvent((T)(object)( Convert.ToSingle( slider.Value ) / 10 ));
|
||||
};
|
||||
container.AddChild( slider );
|
||||
} else if( typeof( T ) == typeof( int ) ) {
|
||||
// Number Input
|
||||
LineEdit numberEdit = new LineEdit{
|
||||
CustomMinimumSize = new Vector2(390, 50),
|
||||
Text = DefaultSetting.ToString()
|
||||
};
|
||||
numberEdit.TextChanged += ( string newText ) => {
|
||||
if ( int.TryParse( newText, out int value ) ) {
|
||||
SettingEvent((T)(object)( value ));
|
||||
} else {
|
||||
numberEdit.Text = DefaultSetting.ToString();
|
||||
}
|
||||
};
|
||||
container.AddChild( numberEdit );
|
||||
} else if( typeof( T ).IsEnum ) {
|
||||
OptionButton menuButton = new OptionButton{
|
||||
CustomMinimumSize = new Vector2(390, 0),
|
||||
Text = DefaultSetting.ToString()
|
||||
};
|
||||
foreach (var settingOption in Enum.GetValues( typeof( T ) ) ) {
|
||||
menuButton.AddItem( settingOption.ToString() );
|
||||
}
|
||||
menuButton.Selected = Convert.ToInt32( DefaultSetting );
|
||||
menuButton.ItemSelected += ( long index ) => {
|
||||
SettingEvent((T)(object)index);
|
||||
};
|
||||
container.AddChild( menuButton );
|
||||
} else if ( typeof( T ) == typeof( bool ) ) {
|
||||
// check box
|
||||
CheckBox checkBox = new CheckBox{
|
||||
CustomMinimumSize = new Vector2(390, 50),
|
||||
ToggleMode = true,
|
||||
ButtonPressed = Convert.ToBoolean(DefaultSetting)
|
||||
};
|
||||
checkBox.Toggled += (bool value) => {
|
||||
checkBox.ButtonPressed = value;
|
||||
SettingEvent((T)(object)value );
|
||||
};
|
||||
container.AddChild( checkBox );
|
||||
}
|
||||
Parent.AddChild( SettingFrameControl );
|
||||
}
|
||||
|
||||
void SetSettings() {
|
||||
// Display Settings
|
||||
DisplayServer.WindowSetMode( _Options._SettingsFile.Display.WindowMode );
|
||||
Engine.MaxFps = _Options._SettingsFile.Display.MaxFPS;
|
||||
DisplayServer.WindowSetVsyncMode( _Options._SettingsFile.Display.VSync );
|
||||
GetViewport().Scaling3DMode = _Options._SettingsFile.Display.ScreenScaling;
|
||||
GetViewport().FsrSharpness = _Options._SettingsFile.Display.FSRSharpness;
|
||||
GetViewport().Scaling3DScale = _Options._SettingsFile.Display.ScreenScalingFactor;
|
||||
GetViewport().Msaa2D = _Options._SettingsFile.Display.Msaa;
|
||||
GetViewport().Msaa3D = _Options._SettingsFile.Display.Msaa;
|
||||
GetViewport().ScreenSpaceAA = _Options._SettingsFile.Display.ScreenSpaceAA;
|
||||
GetViewport().UseTaa = _Options._SettingsFile.Display.TAA;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum Tabs {
|
||||
Game = 0,
|
||||
Display = 1,
|
||||
Audio = 2,
|
||||
Input = 3
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class SettingsFile {
|
||||
string FilePath = string.Empty;
|
||||
public GameSettings Game { get; set; }
|
||||
public DisplaySettings Display { get; set; }
|
||||
public AudioSettings Audio { get; set; }
|
||||
public InputSettings Input { get; set; }
|
||||
public SettingsFile( string Path ) {
|
||||
FilePath = "user://" + Path;
|
||||
using (Godot.FileAccess file = Godot.FileAccess.Open(FilePath, Godot.FileAccess.ModeFlags.Read)) {
|
||||
if ( file != null ) {
|
||||
string content = file.GetAsText();
|
||||
SettingsFile temp = JsonConvert.DeserializeObject<SettingsFile>(content);
|
||||
Game = temp.Game != null ? temp.Game : new GameSettings();
|
||||
Display = temp.Display != null ? temp.Display : new DisplaySettings();
|
||||
Audio = temp.Audio != null ? temp.Audio : new AudioSettings();
|
||||
Input = temp.Input != null ? temp.Input : new InputSettings();
|
||||
}else{
|
||||
Game = new GameSettings();
|
||||
Display = new DisplaySettings();
|
||||
Audio = new AudioSettings();
|
||||
Input = new InputSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Save() {
|
||||
using (Godot.FileAccess file = Godot.FileAccess.Open( FilePath, Godot.FileAccess.ModeFlags.Write ) ) {
|
||||
file.StoreString( JsonConvert.SerializeObject( this, Formatting.Indented ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// Settings File Settings
|
||||
///
|
||||
|
||||
public class GameSettings {
|
||||
public string UserName { get; set; } = String.Empty;
|
||||
public string SessionToken { get; set; } = String.Empty;
|
||||
}
|
||||
|
||||
public class DisplaySettings {
|
||||
public DisplayServer.WindowMode WindowMode { get; set; }
|
||||
public float ScreenScalingFactor { get; set; }
|
||||
public int MaxFPS { get; set; }
|
||||
public DisplayServer.VSyncMode VSync { get; set; }
|
||||
public Viewport.Scaling3DModeEnum ScreenScaling { get; set; }
|
||||
public float FSRSharpness { get; set; }
|
||||
public Viewport.Msaa Msaa { get; set; }
|
||||
public Viewport.ScreenSpaceAAEnum ScreenSpaceAA { get; set; }
|
||||
public bool TAA { get; set; }
|
||||
public bool ScreenSpaceReflections { get; set; }
|
||||
public bool ScreenSpaceIndirectLighting { get; set; }
|
||||
public bool ScreenSpaceAmbiantOcclusion { get; set; }
|
||||
public bool GlobalIllumination { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class AudioSettings {
|
||||
|
||||
}
|
||||
|
||||
public class InputSettings {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using Godot;
|
||||
|
||||
public partial class ItemStats : Node {
|
||||
|
||||
// Item 0
|
||||
public StatItem[] stats = {
|
||||
new StatItem{
|
||||
ItemName = "Sniper",
|
||||
InventorySize = new Vector2I(1, 4),
|
||||
Weight = 400,
|
||||
IsQuantityItem = false,
|
||||
ToolPath = "res://Prefab/Tools/Sniper.tscn",
|
||||
ToolDamage = 50
|
||||
},
|
||||
|
||||
// Item 1
|
||||
new StatItem{
|
||||
|
||||
},
|
||||
|
||||
// Item 2
|
||||
new StatItem{
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
public class StatItem {
|
||||
public string ItemName {get; set;} = "";
|
||||
public Vector2I InventorySize {get; set;}
|
||||
public int Weight {get; set;}
|
||||
public bool IsQuantityItem {get; set;}
|
||||
public int MaxQuantity {get; set;}
|
||||
public string ToolPath {get; set;}
|
||||
public int ToolDamage { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
using Godot;
|
||||
using Newtonsoft.Json;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public partial class MistoxNet : Node{
|
||||
Options _Options;
|
||||
Reference _Reference;
|
||||
|
||||
public override void _Ready() {
|
||||
_Options = GetNode<Options>( "/root/Options" );
|
||||
_Reference = GetNode<Reference>("/root/Reference");
|
||||
_Reference.MistoxNet = this;
|
||||
}
|
||||
|
||||
public async Task<(bool, Account)> TrySession( string UserName, string Password ) {
|
||||
using( System.Net.Http.HttpClient client = new System.Net.Http.HttpClient() ) {
|
||||
HttpResponseMessage response = await client.PostAsJsonAsync( "https://mistox.net/api/account/session", new Account { UserName = UserName, PasswordHash = Password } );
|
||||
string result = await response.Content.ReadAsStringAsync();
|
||||
Account User = JsonConvert.DeserializeObject<Account>(result);
|
||||
if( User != null && string.IsNullOrEmpty( User.Error ) ) {
|
||||
return (true, User);
|
||||
}
|
||||
return (false, User);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<(bool, Account)> TryLogin( string UserName, string Password ) {
|
||||
using( System.Net.Http.HttpClient client = new System.Net.Http.HttpClient() ) {
|
||||
HttpResponseMessage response = await client.PostAsJsonAsync( "https://mistox.net/api/account/login", new Account { UserName = UserName, PasswordHash = Password } );
|
||||
string result = await response.Content.ReadAsStringAsync();
|
||||
Account User = JsonConvert.DeserializeObject<Account>(result);
|
||||
if( User != null && string.IsNullOrEmpty( User.Error ) ) {
|
||||
return (true, User);
|
||||
}
|
||||
return (false, User);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public class Account {
|
||||
public int ID { get; set; } // PK
|
||||
public string UserName { get; set; } = "";
|
||||
public string Email { get; set; } = "";
|
||||
public bool EmailVerified { get; set; } = false;
|
||||
public string PasswordHash { get; set; } = "";
|
||||
public string Error { get; set; } = "";
|
||||
}
|
||||
|
||||
public class ProjectMistData {
|
||||
public int AccountID { get; set; } // PK
|
||||
public int Credits { get; set; }
|
||||
public int OddballTimer { get; set; }
|
||||
public string SessionToken { get; set; } = "";
|
||||
public int SessionID { get; set; }
|
||||
public int Kills { get; set; }
|
||||
public int Deaths { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class Options : Node {
|
||||
|
||||
// Server Settings
|
||||
public ENetMultiplayerPeer connection;
|
||||
public bool isServer = false;
|
||||
public string Host = "mistox.net";
|
||||
public int Port = 6500;
|
||||
public int SelectedMap = 0;
|
||||
public int maxPlayers = 32;
|
||||
public bool isAlive = false;
|
||||
public double timeBetweenDropsReset = 2f; // in Minutes
|
||||
|
||||
// Saved Settings
|
||||
public SettingsFile _SettingsFile;
|
||||
|
||||
// Alert Settings
|
||||
public float AlertTime = 2f;
|
||||
public float AlertPauseTime = 1f;
|
||||
|
||||
// Select Tool
|
||||
public float ClickDistance = 5;
|
||||
|
||||
}
|
||||
|
||||
namespace Godot {
|
||||
|
||||
public static class Extensions {
|
||||
public static T [] Join<T>( this T [] first, T [] second ) {
|
||||
T[] bytes = new T[first.Length + second.Length];
|
||||
#pragma warning disable CA2018 // 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument
|
||||
Buffer.BlockCopy( first, 0, bytes, 0, first.Length );
|
||||
Buffer.BlockCopy( second, 0, bytes, first.Length, second.Length );
|
||||
#pragma warning restore CA2018 // 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument
|
||||
return bytes;
|
||||
}
|
||||
|
||||
public static T [] Sub<T>( this T [] data, int index, int length ) {
|
||||
T[] result = new T[length];
|
||||
Array.Copy( data, index, result, 0, length );
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Godot;
|
||||
|
||||
public partial class Reference : Node {
|
||||
public MistoxNet MistoxNet { get; set; }
|
||||
public Alert Alert { get; set; }
|
||||
public GameHandler GameHandler { get; set; }
|
||||
public Humanoid Humanoid { get; set; }
|
||||
public Inventory Inventory { get; set; }
|
||||
public Node Workspace { get; set; }
|
||||
public WorldEnvironment Lighting { get; set; }
|
||||
public Control GameUI { get; set; }
|
||||
public Camera3D Camera { get; set; }
|
||||
public MainMenu MainMenu { get; set; }
|
||||
public PreGame PreGame { get; set; }
|
||||
public Settings SettingsFrame { get; set; }
|
||||
public SessionHandler SessionHandler { get; set; }
|
||||
public Control ToolBar{ get; set; }
|
||||
|
||||
public MultiplayerSpawner GameSpawner { get; set; }
|
||||
public Node3D PlayerSpawnPoints { get; set; }
|
||||
public MultiplayerSpawner ItemSpawner{ get; set; }
|
||||
public Node3D ItemSpawnPoints { get; set; }
|
||||
public Node ItemSpawnPath{ get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<Project Sdk="Godot.NET.Sdk/4.3.0">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net7.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'ios' ">net8.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MsgPack.Cli" Version="1.0.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_LastSelectedProfileId>Z:\Development\Coding\Current\Polyphia\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34330.188
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "Test.csproj", "{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
ExportDebug|Any CPU = ExportDebug|Any CPU
|
||||
ExportRelease|Any CPU = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
|
||||
{07020FC3-7E35-4FD5-BB2B-16BCCCDA3BC0}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
After Width: | Height: | Size: 501 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bhaw0gjpq7cf"
|
||||
path="res://.godot/imported/blanket-ao.jpg-a0e2ad72bc0b682199fc200662811369.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-ao.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-ao.jpg-a0e2ad72bc0b682199fc200662811369.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brpm8qgyd5klu"
|
||||
path="res://.godot/imported/blanket-blue.jpg-de9416284b56331bf92eec1c8dc9b28f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-blue.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-blue.jpg-de9416284b56331bf92eec1c8dc9b28f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 537 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bm7il6klryud8"
|
||||
path="res://.godot/imported/blanket-disp.jpg-8ea6a05a5934a115034b4806f39c9398.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-disp.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-disp.jpg-8ea6a05a5934a115034b4806f39c9398.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bntg233eask3"
|
||||
path="res://.godot/imported/blanket-green.jpg-3be0b11b459a903ffeffa50e11655bed.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-green.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-green.jpg-3be0b11b459a903ffeffa50e11655bed.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 2.9 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8jm3jqpw3dw7"
|
||||
path="res://.godot/imported/blanket-norm.jpg-b4dcb56defd7c896c9de7716741383f4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-norm.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-norm.jpg-b4dcb56defd7c896c9de7716741383f4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8ybx5ls3ndna"
|
||||
path="res://.godot/imported/blanket-pink.jpg-e10271c996f90dfd5851d1f909adb7ef.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-pink.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-pink.jpg-e10271c996f90dfd5851d1f909adb7ef.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b0xh32qp07jy0"
|
||||
path="res://.godot/imported/blanket-purple.jpg-fe781f4ca74413d8172916a098dc0284.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-purple.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-purple.jpg-fe781f4ca74413d8172916a098dc0284.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://vyj3ilfxpned"
|
||||
path="res://.godot/imported/blanket-spec.jpg-7da3c71031c19768f9685f2533303072.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-spec.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-spec.jpg-7da3c71031c19768f9685f2533303072.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://w6hihfj7bcp8"
|
||||
path="res://.godot/imported/blanket-tan.jpg-37e5cd18aa126300d7ebe1682c6626f9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-tan.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-tan.jpg-37e5cd18aa126300d7ebe1682c6626f9.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drsyjdiy1fu44"
|
||||
path="res://.godot/imported/blanket-teal.jpg-2a119e8bcb2267a840f25963c3b6a3dc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-teal.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-teal.jpg-2a119e8bcb2267a840f25963c3b6a3dc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 768 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cidhoad222qeo"
|
||||
path="res://.godot/imported/blanket-white.jpg-541974fd96bb055adcde96e789cbcd24.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-white.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-white.jpg-541974fd96bb055adcde96e789cbcd24.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ch61vpusnju2w"
|
||||
path="res://.godot/imported/blanket-yellow-green.jpg-8ff85b2ab5966f3f821efc3345b15da3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-yellow-green.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-yellow-green.jpg-8ff85b2ab5966f3f821efc3345b15da3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cns6rp57gpfvd"
|
||||
path="res://.godot/imported/blanket-yellow.jpg-d17ff03560509236120d7a14427b2bbe.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/blanket-yellow.jpg"
|
||||
dest_files=["res://.godot/imported/blanket-yellow.jpg-d17ff03560509236120d7a14427b2bbe.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 658 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dpq361v4adbj1"
|
||||
path="res://.godot/imported/curtain-cloth-ao.jpg-e9fd8748f152b312ac6012bed15c0728.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-ao.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-ao.jpg-e9fd8748f152b312ac6012bed15c0728.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 633 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d3f57thfv3qbp"
|
||||
path="res://.godot/imported/curtain-cloth-blue.jpg-10f660aa049724c95ce4c9eaa34b7480.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-blue.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-blue.jpg-10f660aa049724c95ce4c9eaa34b7480.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 769 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bdsacqj0faaoh"
|
||||
path="res://.godot/imported/curtain-cloth-disp.jpg-cf6af77eef986f267a0a52fdd07dabaa.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-disp.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-disp.jpg-cf6af77eef986f267a0a52fdd07dabaa.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 586 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbhr61qgtfghb"
|
||||
path="res://.godot/imported/curtain-cloth-green.jpg-0e929e39f8da6555f06548bf1a9bca12.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-green.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-green.jpg-0e929e39f8da6555f06548bf1a9bca12.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 2.7 MiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xe2cgrn1jwte"
|
||||
path="res://.godot/imported/curtain-cloth-norm.jpg-677f50fd962d4cd3ad83345c9f1820b7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-norm.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-norm.jpg-677f50fd962d4cd3ad83345c9f1820b7.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 541 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ncb4qkefwn26"
|
||||
path="res://.godot/imported/curtain-cloth-pink.jpg-3594359a945fe8c10bf1b7ca20cc9b1c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-pink.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-pink.jpg-3594359a945fe8c10bf1b7ca20cc9b1c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 552 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bbjfd3hnmae2x"
|
||||
path="res://.godot/imported/curtain-cloth-purple.jpg-eebf1deb58ec1005aeef514b50d8b483.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-purple.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-purple.jpg-eebf1deb58ec1005aeef514b50d8b483.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 892 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bvq2mfcrbt6um"
|
||||
path="res://.godot/imported/curtain-cloth-spec.jpg-3484b62a767b192e0c10368d42a3772d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-spec.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-spec.jpg-3484b62a767b192e0c10368d42a3772d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 349 KiB |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b0ky6evc208ji"
|
||||
path="res://.godot/imported/curtain-cloth-white.jpg-4826e2e32134bbaa6c9fb1c4a4826a9d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Textures/fabric/curtain-cloth-white.jpg"
|
||||
dest_files=["res://.godot/imported/curtain-cloth-white.jpg-4826e2e32134bbaa6c9fb1c4a4826a9d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||