Added Furnance and smelting
This commit is contained in:
@@ -431,7 +431,8 @@ MonoBehaviour:
|
||||
- Assets/Rocks and Boulders 2/Rocks/Source/Models/box.fbx
|
||||
- Assets/Bitgem/StylisedWater/URP/Meshes/example-scene-01.fbx
|
||||
- Assets/Fill.obj
|
||||
uvOverlapAssetList: 00000000ffffffff010100000101000001010000000000000000000000000000
|
||||
- Assets/CONTENT/ART/tripo_convert_afbded3b-3351-4484-9604-f5a846a051d2.fbx
|
||||
uvOverlapAssetList: 00000000ffffffff01010000010100000101000000000000000000000000000000000000
|
||||
xatlasWarningShown: 0
|
||||
foundCompatibleSetup: 1
|
||||
gpuName_2: NVIDIA GeForce RTX 5080
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,130 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 11a7500f3885deb4f995353fb4d9ae76
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,107 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0418ebccddcd3204aa042b0fb09ea84e
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -129,7 +129,7 @@ MonoBehaviour:
|
||||
ScaleMaxInterpolationTime: 0.1
|
||||
AuthorityMode: 1
|
||||
TickSyncChildren: 0
|
||||
UseUnreliableDeltas: 0
|
||||
UseUnreliableDeltas: 1
|
||||
SyncPositionX: 1
|
||||
SyncPositionY: 1
|
||||
SyncPositionZ: 1
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bdc0e5a6ddbfb0e4690d8e85084966fd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5e549a32512e7674b82971da82d9cc61
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0928368adb57acb4987bb8fabda3a927, type: 3}
|
||||
m_Name: ItemCatalog
|
||||
m_EditorClassIdentifier:
|
||||
items:
|
||||
- {fileID: 11400000, guid: dc1f8087c2120614fa0ddcf92cde7f0d, type: 2}
|
||||
- {fileID: 11400000, guid: 5887c6bd676db1e4eb497e4ac14bc231, type: 2}
|
||||
- {fileID: 11400000, guid: 4f630a08648639c47b2975160e744ea3, type: 2}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c367b3d51191b6342ace822007172950
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3}
|
||||
m_Name: MetalPlate
|
||||
m_EditorClassIdentifier:
|
||||
itemId: metal_plate
|
||||
displayName: Metal Plate
|
||||
category: 1
|
||||
worldPrefab: {fileID: 2888887303011377321, guid: 29519dc5d2cfae441b261f3ca68f2290, type: 3}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5887c6bd676db1e4eb497e4ac14bc231
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3}
|
||||
m_Name: MetalRod
|
||||
m_EditorClassIdentifier:
|
||||
itemId: metal_rod
|
||||
displayName: Metal Rod
|
||||
category: 1
|
||||
worldPrefab: {fileID: 6071798070859371582, guid: 5cf4d9e867c084847ba82c56bddc456b, type: 3}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f630a08648639c47b2975160e744ea3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3}
|
||||
m_Name: Scrap
|
||||
m_EditorClassIdentifier:
|
||||
itemId: scrap
|
||||
displayName: Scrap
|
||||
category: 0
|
||||
worldPrefab: {fileID: 4847937828371134312, guid: 7f5a91b903d654342bfb77c0b9126aa3, type: 3}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc1f8087c2120614fa0ddcf92cde7f0d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 940520d122eb7f64e8532b91e666f61a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dbdeccc1573d9204f858f7c114972d91, type: 3}
|
||||
m_Name: SmeltMetalPlate
|
||||
m_EditorClassIdentifier:
|
||||
recipeId: metal_plate
|
||||
displayName: Metal Plate
|
||||
outputItem: {fileID: 11400000, guid: 5887c6bd676db1e4eb497e4ac14bc231, type: 2}
|
||||
outputAmount: 1
|
||||
metalCost: 25
|
||||
processingDuration: 3
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b40efcd301179814b9266e1dad6821a0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dbdeccc1573d9204f858f7c114972d91, type: 3}
|
||||
m_Name: SmeltMetalRod
|
||||
m_EditorClassIdentifier:
|
||||
recipeId: metal_rod
|
||||
displayName: Metal Rod
|
||||
outputItem: {fileID: 11400000, guid: 4f630a08648639c47b2975160e744ea3, type: 2}
|
||||
outputAmount: 1
|
||||
metalCost: 20
|
||||
processingDuration: 2.5
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c01b9f700aec7c949a9d0b2e41d31515
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,303 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Unity.Netcode;
|
||||
using Unity.Netcode.Components;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
public static class FurnacePipelinePrototypeSetup
|
||||
{
|
||||
private const string ItemDataFolder = "Assets/CONTENT/Game/Data/Items";
|
||||
private const string RecipeDataFolder = "Assets/CONTENT/Game/Data/Recipes";
|
||||
private const string ItemPrefabFolder = "Assets/CONTENT/Game/Prefabs/Items/FurnacePrototype";
|
||||
private const string WorkstationPrefabFolder = "Assets/CONTENT/Game/Prefabs/Workstations";
|
||||
private const string NetworkPrefabsPath = "Assets/DefaultNetworkPrefabs.asset";
|
||||
|
||||
[MenuItem("FORT-BO/Prototypes/Create Furnace Pipeline")]
|
||||
public static void CreatePrototype()
|
||||
{
|
||||
EnsureFolder(ItemDataFolder);
|
||||
EnsureFolder(RecipeDataFolder);
|
||||
EnsureFolder(ItemPrefabFolder);
|
||||
EnsureFolder(WorkstationPrefabFolder);
|
||||
|
||||
ItemDefinition scrapDefinition = GetOrCreateAsset<ItemDefinition>(
|
||||
$"{ItemDataFolder}/Scrap.asset");
|
||||
ItemDefinition plateDefinition = GetOrCreateAsset<ItemDefinition>(
|
||||
$"{ItemDataFolder}/MetalPlate.asset");
|
||||
ItemDefinition rodDefinition = GetOrCreateAsset<ItemDefinition>(
|
||||
$"{ItemDataFolder}/MetalRod.asset");
|
||||
|
||||
ConfigureItemDefinition(scrapDefinition, "scrap", "Scrap", ItemCategory.Scrap);
|
||||
ConfigureItemDefinition(plateDefinition, "metal_plate", "Metal Plate", ItemCategory.SmeltedMaterial);
|
||||
ConfigureItemDefinition(rodDefinition, "metal_rod", "Metal Rod", ItemCategory.SmeltedMaterial);
|
||||
|
||||
GameObject scrapPrefab = CreateNetworkItemPrefab(
|
||||
$"{ItemPrefabFolder}/Scrap.prefab",
|
||||
"Scrap",
|
||||
scrapDefinition,
|
||||
new Vector3(0.55f, 0.4f, 0.5f),
|
||||
4f,
|
||||
25f);
|
||||
GameObject platePrefab = CreateNetworkItemPrefab(
|
||||
$"{ItemPrefabFolder}/MetalPlate.prefab",
|
||||
"MetalPlate",
|
||||
plateDefinition,
|
||||
new Vector3(0.7f, 0.12f, 0.45f),
|
||||
2f,
|
||||
0f);
|
||||
GameObject rodPrefab = CreateNetworkItemPrefab(
|
||||
$"{ItemPrefabFolder}/MetalRod.prefab",
|
||||
"MetalRod",
|
||||
rodDefinition,
|
||||
new Vector3(0.18f, 0.18f, 0.9f),
|
||||
1.5f,
|
||||
0f);
|
||||
|
||||
SetObjectReference(scrapDefinition, "worldPrefab", scrapPrefab.GetComponent<NetworkObject>());
|
||||
SetObjectReference(plateDefinition, "worldPrefab", platePrefab.GetComponent<NetworkObject>());
|
||||
SetObjectReference(rodDefinition, "worldPrefab", rodPrefab.GetComponent<NetworkObject>());
|
||||
|
||||
ItemCatalog catalog = GetOrCreateAsset<ItemCatalog>($"{ItemDataFolder}/ItemCatalog.asset");
|
||||
SetObjectReferenceList(catalog, "items", new Object[]
|
||||
{
|
||||
scrapDefinition,
|
||||
plateDefinition,
|
||||
rodDefinition
|
||||
});
|
||||
|
||||
SmeltingRecipe plateRecipe = GetOrCreateAsset<SmeltingRecipe>(
|
||||
$"{RecipeDataFolder}/SmeltMetalPlate.asset");
|
||||
ConfigureRecipe(plateRecipe, "metal_plate", "Metal Plate", plateDefinition, 25f, 3f);
|
||||
|
||||
SmeltingRecipe rodRecipe = GetOrCreateAsset<SmeltingRecipe>(
|
||||
$"{RecipeDataFolder}/SmeltMetalRod.asset");
|
||||
ConfigureRecipe(rodRecipe, "metal_rod", "Metal Rod", rodDefinition, 20f, 2.5f);
|
||||
|
||||
GameObject furnacePrefab = CreateFurnacePrefab(
|
||||
$"{WorkstationPrefabFolder}/PrototypeFurnace.prefab",
|
||||
plateRecipe,
|
||||
rodRecipe);
|
||||
|
||||
RegisterNetworkPrefabs(scrapPrefab, platePrefab, rodPrefab, furnacePrefab);
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
Selection.activeObject = furnacePrefab;
|
||||
|
||||
Debug.Log("Furnace pipeline prototype created. Place PrototypeFurnace.prefab in Factory.");
|
||||
}
|
||||
|
||||
private static GameObject CreateNetworkItemPrefab(
|
||||
string path,
|
||||
string objectName,
|
||||
ItemDefinition definition,
|
||||
Vector3 scale,
|
||||
float mass,
|
||||
float metalAmount)
|
||||
{
|
||||
GameObject root = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
root.name = objectName;
|
||||
root.transform.localScale = scale;
|
||||
|
||||
root.AddComponent<NetworkObject>();
|
||||
NetworkTransform networkTransform = root.AddComponent<NetworkTransform>();
|
||||
networkTransform.AuthorityMode = NetworkTransform.AuthorityModes.Server;
|
||||
networkTransform.UseUnreliableDeltas = true;
|
||||
|
||||
Rigidbody body = root.AddComponent<Rigidbody>();
|
||||
body.mass = mass;
|
||||
body.interpolation = RigidbodyInterpolation.Interpolate;
|
||||
body.collisionDetectionMode = CollisionDetectionMode.Continuous;
|
||||
|
||||
NetworkRigidbody networkRigidbody = root.AddComponent<NetworkRigidbody>();
|
||||
networkRigidbody.UseRigidBodyForMotion = true;
|
||||
|
||||
NetworkCarryableInteractable carryable = root.AddComponent<NetworkCarryableInteractable>();
|
||||
SetVector3(carryable, "carryOffset", new Vector3(0f, -0.3f, 1.25f));
|
||||
|
||||
NetworkItem item = root.AddComponent<NetworkItem>();
|
||||
SetObjectReference(item, "definition", definition);
|
||||
|
||||
if (metalAmount > 0f)
|
||||
{
|
||||
FurnaceMetalSource source = root.AddComponent<FurnaceMetalSource>();
|
||||
SetFloat(source, "metalAmount", metalAmount);
|
||||
}
|
||||
|
||||
GameObject prefab = PrefabUtility.SaveAsPrefabAsset(root, path);
|
||||
Object.DestroyImmediate(root);
|
||||
return prefab;
|
||||
}
|
||||
|
||||
private static GameObject CreateFurnacePrefab(
|
||||
string path,
|
||||
SmeltingRecipe plateRecipe,
|
||||
SmeltingRecipe rodRecipe)
|
||||
{
|
||||
GameObject root = new("PrototypeFurnace");
|
||||
root.AddComponent<NetworkObject>();
|
||||
FurnaceController controller = root.AddComponent<FurnaceController>();
|
||||
|
||||
GameObject body = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
body.name = "Body";
|
||||
body.transform.SetParent(root.transform, false);
|
||||
body.transform.localPosition = new Vector3(0f, 0.8f, 0f);
|
||||
body.transform.localScale = new Vector3(2.2f, 1.6f, 2f);
|
||||
|
||||
GameObject inputTrigger = new("ScrapReceiver");
|
||||
inputTrigger.transform.SetParent(root.transform, false);
|
||||
inputTrigger.transform.localPosition = new Vector3(0f, 1.7f, 0f);
|
||||
BoxCollider trigger = inputTrigger.AddComponent<BoxCollider>();
|
||||
trigger.isTrigger = true;
|
||||
trigger.size = new Vector3(1.4f, 0.8f, 1.4f);
|
||||
FurnaceScrapReceiver receiver = inputTrigger.AddComponent<FurnaceScrapReceiver>();
|
||||
SetObjectReference(receiver, "furnace", controller);
|
||||
|
||||
GameObject outputPoint = new("OutputPoint");
|
||||
outputPoint.transform.SetParent(root.transform, false);
|
||||
outputPoint.transform.localPosition = new Vector3(0f, 0.45f, 1.5f);
|
||||
|
||||
GameObject emptyPoint = new("MetalEmptyPoint");
|
||||
emptyPoint.transform.SetParent(root.transform, false);
|
||||
emptyPoint.transform.localPosition = new Vector3(0f, 0.25f, 0f);
|
||||
|
||||
GameObject fullPoint = new("MetalFullPoint");
|
||||
fullPoint.transform.SetParent(root.transform, false);
|
||||
fullPoint.transform.localPosition = new Vector3(0f, 1.25f, 0f);
|
||||
|
||||
GameObject metalVisual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
metalVisual.name = "MoltenMetalVisual";
|
||||
metalVisual.transform.SetParent(root.transform, false);
|
||||
metalVisual.transform.localPosition = emptyPoint.transform.localPosition;
|
||||
metalVisual.transform.localScale = new Vector3(1.3f, 0.12f, 1.1f);
|
||||
Object.DestroyImmediate(metalVisual.GetComponent<Collider>());
|
||||
|
||||
FurnaceMetalLevelView levelView = metalVisual.AddComponent<FurnaceMetalLevelView>();
|
||||
SetObjectReference(levelView, "furnace", controller);
|
||||
SetObjectReference(levelView, "metalVisual", metalVisual.transform);
|
||||
SetObjectReference(levelView, "emptyLocalPosition", emptyPoint.transform);
|
||||
SetObjectReference(levelView, "fullLocalPosition", fullPoint.transform);
|
||||
|
||||
GameObject panelAnchor = new("WorldPanelAnchor");
|
||||
panelAnchor.transform.SetParent(root.transform, false);
|
||||
panelAnchor.transform.localPosition = new Vector3(1.2f, 1.2f, 1.05f);
|
||||
|
||||
SetString(controller, "workstationName", "Prototype Furnace");
|
||||
SetFloat(controller, "metalCapacity", 100f);
|
||||
SetObjectReference(controller, "outputPoint", outputPoint.transform);
|
||||
SetObjectReferenceList(controller, "recipes", new Object[] { plateRecipe, rodRecipe });
|
||||
|
||||
GameObject prefab = PrefabUtility.SaveAsPrefabAsset(root, path);
|
||||
Object.DestroyImmediate(root);
|
||||
return prefab;
|
||||
}
|
||||
|
||||
private static void ConfigureItemDefinition(
|
||||
ItemDefinition definition,
|
||||
string itemId,
|
||||
string displayName,
|
||||
ItemCategory category)
|
||||
{
|
||||
SetString(definition, "itemId", itemId);
|
||||
SetString(definition, "displayName", displayName);
|
||||
SetInt(definition, "category", (int)category);
|
||||
}
|
||||
|
||||
private static void ConfigureRecipe(
|
||||
SmeltingRecipe recipe,
|
||||
string recipeId,
|
||||
string displayName,
|
||||
ItemDefinition output,
|
||||
float metalCost,
|
||||
float duration)
|
||||
{
|
||||
SetString(recipe, "recipeId", recipeId);
|
||||
SetString(recipe, "displayName", displayName);
|
||||
SetObjectReference(recipe, "outputItem", output);
|
||||
SetInt(recipe, "outputAmount", 1);
|
||||
SetFloat(recipe, "metalCost", metalCost);
|
||||
SetFloat(recipe, "processingDuration", duration);
|
||||
}
|
||||
|
||||
private static void RegisterNetworkPrefabs(params GameObject[] prefabs)
|
||||
{
|
||||
NetworkPrefabsList list = AssetDatabase.LoadAssetAtPath<NetworkPrefabsList>(NetworkPrefabsPath);
|
||||
if (list == null)
|
||||
throw new FileNotFoundException("Default network prefab list was not found.", NetworkPrefabsPath);
|
||||
|
||||
foreach (GameObject prefab in prefabs)
|
||||
{
|
||||
if (prefab != null && !list.Contains(prefab))
|
||||
list.Add(new NetworkPrefab { Prefab = prefab });
|
||||
}
|
||||
|
||||
EditorUtility.SetDirty(list);
|
||||
}
|
||||
|
||||
private static T GetOrCreateAsset<T>(string path) where T : ScriptableObject
|
||||
{
|
||||
T asset = AssetDatabase.LoadAssetAtPath<T>(path);
|
||||
if (asset != null)
|
||||
return asset;
|
||||
|
||||
asset = ScriptableObject.CreateInstance<T>();
|
||||
AssetDatabase.CreateAsset(asset, path);
|
||||
return asset;
|
||||
}
|
||||
|
||||
private static void EnsureFolder(string folderPath)
|
||||
{
|
||||
string current = "Assets";
|
||||
string[] segments = folderPath.Split('/');
|
||||
for (int index = 1; index < segments.Length; index++)
|
||||
{
|
||||
string next = $"{current}/{segments[index]}";
|
||||
if (!AssetDatabase.IsValidFolder(next))
|
||||
AssetDatabase.CreateFolder(current, segments[index]);
|
||||
current = next;
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetString(Object target, string propertyName, string value) =>
|
||||
Edit(target, propertyName, property => property.stringValue = value);
|
||||
|
||||
private static void SetFloat(Object target, string propertyName, float value) =>
|
||||
Edit(target, propertyName, property => property.floatValue = value);
|
||||
|
||||
private static void SetInt(Object target, string propertyName, int value) =>
|
||||
Edit(target, propertyName, property => property.intValue = value);
|
||||
|
||||
private static void SetVector3(Object target, string propertyName, Vector3 value) =>
|
||||
Edit(target, propertyName, property => property.vector3Value = value);
|
||||
|
||||
private static void SetObjectReference(Object target, string propertyName, Object value) =>
|
||||
Edit(target, propertyName, property => property.objectReferenceValue = value);
|
||||
|
||||
private static void SetObjectReferenceList(
|
||||
Object target,
|
||||
string propertyName,
|
||||
IReadOnlyList<Object> values)
|
||||
{
|
||||
SerializedObject serializedObject = new(target);
|
||||
SerializedProperty property = serializedObject.FindProperty(propertyName);
|
||||
property.arraySize = values.Count;
|
||||
for (int index = 0; index < values.Count; index++)
|
||||
property.GetArrayElementAtIndex(index).objectReferenceValue = values[index];
|
||||
serializedObject.ApplyModifiedPropertiesWithoutUndo();
|
||||
EditorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
private static void Edit(
|
||||
Object target,
|
||||
string propertyName,
|
||||
System.Action<SerializedProperty> edit)
|
||||
{
|
||||
SerializedObject serializedObject = new(target);
|
||||
SerializedProperty property = serializedObject.FindProperty(propertyName);
|
||||
if (property == null)
|
||||
throw new System.MissingFieldException(target.GetType().Name, propertyName);
|
||||
edit(property);
|
||||
serializedObject.ApplyModifiedPropertiesWithoutUndo();
|
||||
EditorUtility.SetDirty(target);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29fefdfbc459d664e91002f5a2faa978
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 949ae76896b9d4d4bafc762cf43460f6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,267 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &9206541098482503491
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 373046150160241831}
|
||||
- component: {fileID: 2240617945687571729}
|
||||
- component: {fileID: 1570541890800567413}
|
||||
- component: {fileID: 1152236939985309631}
|
||||
- component: {fileID: 2888887303011377321}
|
||||
- component: {fileID: 6283895837328394518}
|
||||
- component: {fileID: 7357262106795929317}
|
||||
- component: {fileID: 3154893980981319754}
|
||||
- component: {fileID: 8625021823589156851}
|
||||
- component: {fileID: 6907445135272842745}
|
||||
m_Layer: 0
|
||||
m_Name: MetalPlate
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &373046150160241831
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.7, y: 0.12, z: 0.45}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &2240617945687571729
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!65 &1570541890800567413
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &1152236939985309631
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!114 &2888887303011377321
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 3864715941
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
m_InScenePlaced: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
SceneMigrationSynchronization: 0
|
||||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
SyncOwnerTransformWhenParented: 1
|
||||
AllowOwnerToParent: 0
|
||||
--- !u!114 &6283895837328394518
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkTransformExpanded: 0
|
||||
AutoOwnerAuthorityTickOffset: 1
|
||||
PositionInterpolationType: 0
|
||||
RotationInterpolationType: 0
|
||||
ScaleInterpolationType: 0
|
||||
PositionLerpSmoothing: 1
|
||||
PositionMaxInterpolationTime: 0.1
|
||||
RotationLerpSmoothing: 1
|
||||
RotationMaxInterpolationTime: 0.1
|
||||
ScaleLerpSmoothing: 1
|
||||
ScaleMaxInterpolationTime: 0.1
|
||||
AuthorityMode: 0
|
||||
TickSyncChildren: 0
|
||||
UseUnreliableDeltas: 1
|
||||
SyncPositionX: 1
|
||||
SyncPositionY: 1
|
||||
SyncPositionZ: 1
|
||||
SyncRotAngleX: 1
|
||||
SyncRotAngleY: 1
|
||||
SyncRotAngleZ: 1
|
||||
SyncScaleX: 1
|
||||
SyncScaleY: 1
|
||||
SyncScaleZ: 1
|
||||
PositionThreshold: 0.001
|
||||
RotAngleThreshold: 0.01
|
||||
ScaleThreshold: 0.01
|
||||
UseQuaternionSynchronization: 0
|
||||
UseQuaternionCompression: 0
|
||||
UseHalfFloatPrecision: 0
|
||||
InLocalSpace: 0
|
||||
SwitchTransformSpaceWhenParented: 0
|
||||
Interpolate: 1
|
||||
SlerpPosition: 0
|
||||
--- !u!54 &7357262106795929317
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
serializedVersion: 4
|
||||
m_Mass: 2
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 1
|
||||
--- !u!114 &3154893980981319754
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkRigidbodyBaseExpanded: 0
|
||||
UseRigidBodyForMotion: 1
|
||||
AutoUpdateKinematicState: 1
|
||||
AutoSetKinematicOnDespawn: 1
|
||||
--- !u!114 &8625021823589156851
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fad79bb3d620ffb46b527a9e361c28ae, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
interactionLabel: Interact
|
||||
maximumInteractionDistance: 3
|
||||
physicsBody: {fileID: 0}
|
||||
objectColliders: []
|
||||
collisionRefreshInterval: 0.25
|
||||
throwForce: 6
|
||||
throwUpwardForce: 0.5
|
||||
carryOffset: {x: 0, y: -0.3, z: 1.25}
|
||||
--- !u!114 &6907445135272842745
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9206541098482503491}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 323282b7a87fc4344bd33250e88822e8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
definition: {fileID: 11400000, guid: 5887c6bd676db1e4eb497e4ac14bc231, type: 2}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29519dc5d2cfae441b261f3ca68f2290
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,267 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &4609832768900680681
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 487314608127039729}
|
||||
- component: {fileID: 3106168562386324944}
|
||||
- component: {fileID: 3569781445972802911}
|
||||
- component: {fileID: 3857679988419566510}
|
||||
- component: {fileID: 6071798070859371582}
|
||||
- component: {fileID: 383076140020281943}
|
||||
- component: {fileID: 8195051303485245904}
|
||||
- component: {fileID: 5091558897397927903}
|
||||
- component: {fileID: 7827715941785157600}
|
||||
- component: {fileID: 1162555763859047266}
|
||||
m_Layer: 0
|
||||
m_Name: MetalRod
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &487314608127039729
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.18, y: 0.18, z: 0.9}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &3106168562386324944
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!65 &3569781445972802911
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &3857679988419566510
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!114 &6071798070859371582
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 3864715941
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
m_InScenePlaced: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
SceneMigrationSynchronization: 0
|
||||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
SyncOwnerTransformWhenParented: 1
|
||||
AllowOwnerToParent: 0
|
||||
--- !u!114 &383076140020281943
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkTransformExpanded: 0
|
||||
AutoOwnerAuthorityTickOffset: 1
|
||||
PositionInterpolationType: 0
|
||||
RotationInterpolationType: 0
|
||||
ScaleInterpolationType: 0
|
||||
PositionLerpSmoothing: 1
|
||||
PositionMaxInterpolationTime: 0.1
|
||||
RotationLerpSmoothing: 1
|
||||
RotationMaxInterpolationTime: 0.1
|
||||
ScaleLerpSmoothing: 1
|
||||
ScaleMaxInterpolationTime: 0.1
|
||||
AuthorityMode: 0
|
||||
TickSyncChildren: 0
|
||||
UseUnreliableDeltas: 1
|
||||
SyncPositionX: 1
|
||||
SyncPositionY: 1
|
||||
SyncPositionZ: 1
|
||||
SyncRotAngleX: 1
|
||||
SyncRotAngleY: 1
|
||||
SyncRotAngleZ: 1
|
||||
SyncScaleX: 1
|
||||
SyncScaleY: 1
|
||||
SyncScaleZ: 1
|
||||
PositionThreshold: 0.001
|
||||
RotAngleThreshold: 0.01
|
||||
ScaleThreshold: 0.01
|
||||
UseQuaternionSynchronization: 0
|
||||
UseQuaternionCompression: 0
|
||||
UseHalfFloatPrecision: 0
|
||||
InLocalSpace: 0
|
||||
SwitchTransformSpaceWhenParented: 0
|
||||
Interpolate: 1
|
||||
SlerpPosition: 0
|
||||
--- !u!54 &8195051303485245904
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
serializedVersion: 4
|
||||
m_Mass: 1.5
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 1
|
||||
--- !u!114 &5091558897397927903
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkRigidbodyBaseExpanded: 0
|
||||
UseRigidBodyForMotion: 1
|
||||
AutoUpdateKinematicState: 1
|
||||
AutoSetKinematicOnDespawn: 1
|
||||
--- !u!114 &7827715941785157600
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fad79bb3d620ffb46b527a9e361c28ae, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
interactionLabel: Interact
|
||||
maximumInteractionDistance: 3
|
||||
physicsBody: {fileID: 0}
|
||||
objectColliders: []
|
||||
collisionRefreshInterval: 0.25
|
||||
throwForce: 6
|
||||
throwUpwardForce: 0.5
|
||||
carryOffset: {x: 0, y: -0.3, z: 1.25}
|
||||
--- !u!114 &1162555763859047266
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4609832768900680681}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 323282b7a87fc4344bd33250e88822e8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
definition: {fileID: 11400000, guid: 4f630a08648639c47b2975160e744ea3, type: 2}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5cf4d9e867c084847ba82c56bddc456b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,281 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2182525189444712253
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 480043602958892554}
|
||||
- component: {fileID: 6778003009800737139}
|
||||
- component: {fileID: 4070976183960967726}
|
||||
- component: {fileID: 7688550467070204870}
|
||||
- component: {fileID: 4847937828371134312}
|
||||
- component: {fileID: 739157423183201639}
|
||||
- component: {fileID: 6952725408238905275}
|
||||
- component: {fileID: 7507489822569431272}
|
||||
- component: {fileID: 1530920348677395089}
|
||||
- component: {fileID: 4457586862197726001}
|
||||
- component: {fileID: 2791467813053421235}
|
||||
m_Layer: 0
|
||||
m_Name: Scrap
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &480043602958892554
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.55, y: 0.4, z: 0.5}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &6778003009800737139
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!65 &4070976183960967726
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &7688550467070204870
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!114 &4847937828371134312
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 3864715941
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
m_InScenePlaced: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
SceneMigrationSynchronization: 0
|
||||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
SyncOwnerTransformWhenParented: 1
|
||||
AllowOwnerToParent: 0
|
||||
--- !u!114 &739157423183201639
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkTransformExpanded: 0
|
||||
AutoOwnerAuthorityTickOffset: 1
|
||||
PositionInterpolationType: 0
|
||||
RotationInterpolationType: 0
|
||||
ScaleInterpolationType: 0
|
||||
PositionLerpSmoothing: 1
|
||||
PositionMaxInterpolationTime: 0.1
|
||||
RotationLerpSmoothing: 1
|
||||
RotationMaxInterpolationTime: 0.1
|
||||
ScaleLerpSmoothing: 1
|
||||
ScaleMaxInterpolationTime: 0.1
|
||||
AuthorityMode: 0
|
||||
TickSyncChildren: 0
|
||||
UseUnreliableDeltas: 1
|
||||
SyncPositionX: 1
|
||||
SyncPositionY: 1
|
||||
SyncPositionZ: 1
|
||||
SyncRotAngleX: 1
|
||||
SyncRotAngleY: 1
|
||||
SyncRotAngleZ: 1
|
||||
SyncScaleX: 1
|
||||
SyncScaleY: 1
|
||||
SyncScaleZ: 1
|
||||
PositionThreshold: 0.001
|
||||
RotAngleThreshold: 0.01
|
||||
ScaleThreshold: 0.01
|
||||
UseQuaternionSynchronization: 0
|
||||
UseQuaternionCompression: 0
|
||||
UseHalfFloatPrecision: 0
|
||||
InLocalSpace: 0
|
||||
SwitchTransformSpaceWhenParented: 0
|
||||
Interpolate: 1
|
||||
SlerpPosition: 0
|
||||
--- !u!54 &6952725408238905275
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
serializedVersion: 4
|
||||
m_Mass: 4
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 1
|
||||
--- !u!114 &7507489822569431272
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
NetworkRigidbodyBaseExpanded: 0
|
||||
UseRigidBodyForMotion: 1
|
||||
AutoUpdateKinematicState: 1
|
||||
AutoSetKinematicOnDespawn: 1
|
||||
--- !u!114 &1530920348677395089
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fad79bb3d620ffb46b527a9e361c28ae, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
interactionLabel: Interact
|
||||
maximumInteractionDistance: 3
|
||||
physicsBody: {fileID: 0}
|
||||
objectColliders: []
|
||||
collisionRefreshInterval: 0.25
|
||||
throwForce: 6
|
||||
throwUpwardForce: 0.5
|
||||
carryOffset: {x: 0, y: -0.3, z: 1.25}
|
||||
--- !u!114 &4457586862197726001
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 323282b7a87fc4344bd33250e88822e8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
definition: {fileID: 11400000, guid: dc1f8087c2120614fa0ddcf92cde7f0d, type: 2}
|
||||
--- !u!114 &2791467813053421235
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2182525189444712253}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9dd3ea21361871345b5a9d21839c6da1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
metalAmount: 25
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f5a91b903d654342bfb77c0b9126aa3
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0729853bea6ebee4fa828e015900836f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,491 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1329045462390593297
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3440049079948703452}
|
||||
m_Layer: 0
|
||||
m_Name: OutputPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3440049079948703452
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1329045462390593297}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.45, z: 1.5}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &3006047789126627680
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1858887632278238715}
|
||||
- component: {fileID: 8352192086953126879}
|
||||
- component: {fileID: 9213789764659406484}
|
||||
m_Layer: 0
|
||||
m_Name: PrototypeFurnace
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1858887632278238715
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006047789126627680}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2029505042144761538}
|
||||
- {fileID: 2613004420124304525}
|
||||
- {fileID: 3440049079948703452}
|
||||
- {fileID: 4757451503622202597}
|
||||
- {fileID: 7303050713835538076}
|
||||
- {fileID: 8123456789012345678}
|
||||
- {fileID: 8123456789012345679}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8352192086953126879
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006047789126627680}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 3864715941
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
m_InScenePlaced: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
SceneMigrationSynchronization: 0
|
||||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
SyncOwnerTransformWhenParented: 1
|
||||
AllowOwnerToParent: 0
|
||||
--- !u!114 &9213789764659406484
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006047789126627680}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 41af49db79eeaf84ea8bc7c3dd75ae0f, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
workstationName: Prototype Furnace
|
||||
metalCapacity: 100
|
||||
outputPoint: {fileID: 3440049079948703452}
|
||||
recipes:
|
||||
- {fileID: 11400000, guid: b40efcd301179814b9266e1dad6821a0, type: 2}
|
||||
- {fileID: 11400000, guid: c01b9f700aec7c949a9d0b2e41d31515, type: 2}
|
||||
outputSpacing: 0.35
|
||||
--- !u!1 &5866073999598946136
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2029505042144761538}
|
||||
- component: {fileID: 5819807494397148051}
|
||||
- component: {fileID: 1357381158899099494}
|
||||
- component: {fileID: 1741101750847204452}
|
||||
m_Layer: 0
|
||||
m_Name: Body
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2029505042144761538
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5866073999598946136}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.8, z: 0}
|
||||
m_LocalScale: {x: 2.2, y: 1.6, z: 2}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &5819807494397148051
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5866073999598946136}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!65 &1357381158899099494
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5866073999598946136}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &1741101750847204452
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5866073999598946136}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &6576840628880540716
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7303050713835538076}
|
||||
m_Layer: 0
|
||||
m_Name: WorldPanelAnchor
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7303050713835538076
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6576840628880540716}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.2, y: 1.2, z: 1.05}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &7138330055807641713
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4757451503622202597}
|
||||
- component: {fileID: 6734764425722011759}
|
||||
- component: {fileID: 8437323508402642124}
|
||||
- component: {fileID: 5043639884140826952}
|
||||
m_Layer: 0
|
||||
m_Name: MoltenMetalVisual
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4757451503622202597
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7138330055807641713}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.25, z: 0}
|
||||
m_LocalScale: {x: 1.3, y: 0.12, z: 1.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &6734764425722011759
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7138330055807641713}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &8437323508402642124
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7138330055807641713}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!114 &5043639884140826952
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7138330055807641713}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d51e4e087bfc8f14d8df1b4da69a6d56, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
furnace: {fileID: 9213789764659406484}
|
||||
metalVisual: {fileID: 4757451503622202597}
|
||||
emptyLocalPosition: {fileID: 8123456789012345678}
|
||||
fullLocalPosition: {fileID: 8123456789012345679}
|
||||
movementSpeed: 1.5
|
||||
--- !u!1 &8137587946794080883
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2613004420124304525}
|
||||
- component: {fileID: 489308711476225990}
|
||||
- component: {fileID: 250802876963792781}
|
||||
m_Layer: 0
|
||||
m_Name: ScrapReceiver
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2613004420124304525
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8137587946794080883}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.7, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &489308711476225990
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8137587946794080883}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1.4, y: 0.8, z: 1.4}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &250802876963792781
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8137587946794080883}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7a72230fcd966f84d967ab39b124447d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
furnace: {fileID: 9213789764659406484}
|
||||
--- !u!1 &8821000000000000001
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8123456789012345678}
|
||||
m_Layer: 0
|
||||
m_Name: MetalEmptyPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8123456789012345678
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8821000000000000001}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.25, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &8821000000000000002
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8123456789012345679}
|
||||
m_Layer: 0
|
||||
m_Name: MetalFullPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8123456789012345679
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8821000000000000002}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.25, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1858887632278238715}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 802af0722eb96ab46ae2cecf926bc6c9
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -123,7 +123,10 @@ public sealed class NetworkPhysicalLeverInteractable :
|
||||
}
|
||||
|
||||
if (TryCalculateTargetValue(playerObject, out float targetValue))
|
||||
{
|
||||
MoveTowardsValue(targetValue);
|
||||
UpdateActivationAtEndpoint();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -198,8 +201,7 @@ public sealed class NetworkPhysicalLeverInteractable :
|
||||
hasSnapTarget = false;
|
||||
bool snappedToMaximum = snapTargetValue >= 0.5f;
|
||||
|
||||
if (isActivated.Value != snappedToMaximum)
|
||||
isActivated.Value = snappedToMaximum;
|
||||
SetActivation(snappedToMaximum);
|
||||
|
||||
bool movedAwayFromInitialPosition =
|
||||
!Mathf.Approximately(snapTargetValue, InitialPositionValue);
|
||||
@@ -209,6 +211,22 @@ public sealed class NetworkPhysicalLeverInteractable :
|
||||
: -1f;
|
||||
}
|
||||
|
||||
private void UpdateActivationAtEndpoint()
|
||||
{
|
||||
const float endpointTolerance = 0.001f;
|
||||
|
||||
if (synchronizedValue.Value >= 1f - endpointTolerance)
|
||||
SetActivation(true);
|
||||
else if (synchronizedValue.Value <= endpointTolerance)
|
||||
SetActivation(false);
|
||||
}
|
||||
|
||||
private void SetActivation(bool activated)
|
||||
{
|
||||
if (isActivated.Value != activated)
|
||||
isActivated.Value = activated;
|
||||
}
|
||||
|
||||
private bool IsPlayerWithinControlDistance(NetworkObject playerObject)
|
||||
{
|
||||
float maximumDistanceSquared = maximumControlDistance * maximumControlDistance;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49b83c56f1d5e6d46b448c92e658fbe9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,22 @@
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(NetworkItem))]
|
||||
public sealed class FurnaceMetalSource : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Min(0.01f)] private float metalAmount = 25f;
|
||||
|
||||
private bool isConsumed;
|
||||
|
||||
public float MetalAmount => metalAmount;
|
||||
public bool IsConsumed => isConsumed;
|
||||
|
||||
public bool TryMarkConsumed()
|
||||
{
|
||||
if (isConsumed)
|
||||
return false;
|
||||
|
||||
isConsumed = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9dd3ea21361871345b5a9d21839c6da1
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
[CreateAssetMenu(fileName = "ItemCatalog", menuName = "FORT-BO/Items/Item Catalog")]
|
||||
public sealed class ItemCatalog : ScriptableObject
|
||||
{
|
||||
[SerializeField] private List<ItemDefinition> items = new();
|
||||
|
||||
private readonly Dictionary<string, ItemDefinition> itemsById =
|
||||
new(StringComparer.Ordinal);
|
||||
|
||||
public IReadOnlyList<ItemDefinition> Items => items;
|
||||
|
||||
private void OnEnable() => RebuildIndex();
|
||||
private void OnValidate() => RebuildIndex();
|
||||
|
||||
public bool TryGetItem(string itemId, out ItemDefinition definition)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(itemId))
|
||||
{
|
||||
definition = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
return itemsById.TryGetValue(itemId.Trim().ToLowerInvariant(), out definition);
|
||||
}
|
||||
|
||||
private void RebuildIndex()
|
||||
{
|
||||
itemsById.Clear();
|
||||
|
||||
foreach (ItemDefinition definition in items)
|
||||
{
|
||||
if (definition == null || string.IsNullOrWhiteSpace(definition.ItemId))
|
||||
continue;
|
||||
|
||||
if (!itemsById.TryAdd(definition.ItemId, definition))
|
||||
Debug.LogError($"Duplicate item id '{definition.ItemId}' in {name}.", this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0928368adb57acb4987bb8fabda3a927
|
||||
@@ -0,0 +1,31 @@
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
public enum ItemCategory
|
||||
{
|
||||
Scrap,
|
||||
SmeltedMaterial,
|
||||
RocketPart,
|
||||
Tool,
|
||||
Consumable
|
||||
}
|
||||
|
||||
[CreateAssetMenu(fileName = "ItemDefinition", menuName = "FORT-BO/Items/Item Definition")]
|
||||
public sealed class ItemDefinition : ScriptableObject
|
||||
{
|
||||
[SerializeField] private string itemId;
|
||||
[SerializeField] private string displayName;
|
||||
[SerializeField] private ItemCategory category;
|
||||
[SerializeField] private NetworkObject worldPrefab;
|
||||
|
||||
public string ItemId => itemId;
|
||||
public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName;
|
||||
public ItemCategory Category => category;
|
||||
public NetworkObject WorldPrefab => worldPrefab;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
itemId = itemId?.Trim().ToLowerInvariant();
|
||||
displayName = displayName?.Trim();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0c79cebdb4201743be8612545ee180e
|
||||
@@ -0,0 +1,14 @@
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(NetworkObject))]
|
||||
public sealed class NetworkItem : NetworkBehaviour
|
||||
{
|
||||
[SerializeField] private ItemDefinition definition;
|
||||
|
||||
public ItemDefinition Definition => definition;
|
||||
public string ItemId => definition != null ? definition.ItemId : string.Empty;
|
||||
public string DisplayName => definition != null ? definition.DisplayName : name;
|
||||
public ItemCategory Category => definition != null ? definition.Category : default;
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 323282b7a87fc4344bd33250e88822e8
|
||||
@@ -12,9 +12,18 @@ using Unity.Services.Relay.Models;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public enum NetworkConnectionMode
|
||||
{
|
||||
None,
|
||||
Relay,
|
||||
Lan
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(NetworkManager), typeof(UnityTransport))]
|
||||
public sealed class NetworkSessionController : MonoBehaviour
|
||||
{
|
||||
public const ushort DefaultLanPort = 7777;
|
||||
|
||||
private const string PlayerNamePreferenceKey = "player_name";
|
||||
private const string RelayCodeDataKey = "relay_code";
|
||||
|
||||
@@ -26,9 +35,12 @@ public sealed class NetworkSessionController : MonoBehaviour
|
||||
[SerializeField, Min(1)] private int maxClientCount = 3;
|
||||
[SerializeField] private bool useSecureRelay = false;
|
||||
|
||||
public string Status { get; private set; } = "Relay is not initialized.";
|
||||
public string Status { get; private set; } = "Ready.";
|
||||
public string JoinCode { get; private set; } = string.Empty;
|
||||
public string LocalPlayerName { get; private set; }
|
||||
public string LanAddress { get; private set; } = "127.0.0.1";
|
||||
public ushort LanPort { get; private set; } = DefaultLanPort;
|
||||
public NetworkConnectionMode ConnectionMode { get; private set; }
|
||||
public bool IsBusy { get; private set; }
|
||||
public bool IsOnline => NetworkManager.Singleton != null && NetworkManager.Singleton.IsListening;
|
||||
public bool IsHost => networkManager != null && networkManager.IsHost;
|
||||
@@ -85,12 +97,15 @@ public sealed class NetworkSessionController : MonoBehaviour
|
||||
allocation.AllocationIdBytes, allocation.Key, allocation.ConnectionData, useSecureRelay);
|
||||
JoinCode = await RelayService.Instance.GetJoinCodeAsync(allocation.AllocationId);
|
||||
await PublishLobbyAsync();
|
||||
ConnectionMode = NetworkConnectionMode.Relay;
|
||||
loadFactoryAfterServerStart = true;
|
||||
if (!networkManager.StartHost()) throw new InvalidOperationException("Netcode host could not start.");
|
||||
Status = "Host started.";
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
ConnectionMode = NetworkConnectionMode.None;
|
||||
loadFactoryAfterServerStart = false;
|
||||
Status = $"Relay host error: {exception.Message}";
|
||||
Debug.LogException(exception);
|
||||
}
|
||||
@@ -108,17 +123,93 @@ public sealed class NetworkSessionController : MonoBehaviour
|
||||
JoinAllocation allocation = await RelayService.Instance.JoinAllocationAsync(joinCode.Trim().ToUpperInvariant());
|
||||
transport.SetClientRelayData(allocation.RelayServer.IpV4, (ushort)allocation.RelayServer.Port,
|
||||
allocation.AllocationIdBytes, allocation.Key, allocation.ConnectionData, allocation.HostConnectionData, useSecureRelay);
|
||||
ConnectionMode = NetworkConnectionMode.Relay;
|
||||
if (!networkManager.StartClient()) throw new InvalidOperationException("Netcode client could not start.");
|
||||
Status = "Connecting to host...";
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
ConnectionMode = NetworkConnectionMode.None;
|
||||
Status = $"Relay join error: {exception.Message}";
|
||||
Debug.LogException(exception);
|
||||
}
|
||||
finally { IsBusy = false; }
|
||||
}
|
||||
|
||||
public bool StartLanHost(ushort port = DefaultLanPort)
|
||||
{
|
||||
if (IsBusy || IsOnline)
|
||||
return false;
|
||||
|
||||
IsBusy = true;
|
||||
try
|
||||
{
|
||||
JoinCode = string.Empty;
|
||||
LanAddress = "127.0.0.1";
|
||||
LanPort = port;
|
||||
ConnectionMode = NetworkConnectionMode.Lan;
|
||||
transport.SetConnectionData(LanAddress, LanPort, "0.0.0.0");
|
||||
loadFactoryAfterServerStart = true;
|
||||
|
||||
if (!networkManager.StartHost())
|
||||
throw new InvalidOperationException("Netcode LAN host could not start.");
|
||||
|
||||
Status = $"LAN host started on port {LanPort}.";
|
||||
return true;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
ConnectionMode = NetworkConnectionMode.None;
|
||||
loadFactoryAfterServerStart = false;
|
||||
Status = $"LAN host error: {exception.Message}";
|
||||
Debug.LogException(exception);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool StartLanClient(string address, ushort port = DefaultLanPort)
|
||||
{
|
||||
if (IsBusy || IsOnline)
|
||||
return false;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(address))
|
||||
{
|
||||
Status = "LAN address is empty.";
|
||||
return false;
|
||||
}
|
||||
|
||||
IsBusy = true;
|
||||
try
|
||||
{
|
||||
JoinCode = string.Empty;
|
||||
LanAddress = address.Trim();
|
||||
LanPort = port;
|
||||
ConnectionMode = NetworkConnectionMode.Lan;
|
||||
transport.SetConnectionData(LanAddress, LanPort);
|
||||
|
||||
if (!networkManager.StartClient())
|
||||
throw new InvalidOperationException("Netcode LAN client could not start.");
|
||||
|
||||
Status = $"Connecting directly to {LanAddress}:{LanPort}...";
|
||||
return true;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
ConnectionMode = NetworkConnectionMode.None;
|
||||
Status = $"LAN join error: {exception.Message}";
|
||||
Debug.LogException(exception);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task RefreshPublicLobbiesAsync()
|
||||
{
|
||||
if (IsBusy) return;
|
||||
|
||||
@@ -60,6 +60,24 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
|
||||
|
||||
if (isInitialized && !IsOwner)
|
||||
ApplyCameraPitch(synchronizedPitch.Value);
|
||||
|
||||
if (isInitialized && IsOwner)
|
||||
CaptureCursor();
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
if (!isInitialized || !IsOwner || !Application.isFocused)
|
||||
return;
|
||||
|
||||
if (Cursor.lockState != CursorLockMode.Locked || Cursor.visible)
|
||||
CaptureCursor();
|
||||
}
|
||||
|
||||
private void OnApplicationFocus(bool hasFocus)
|
||||
{
|
||||
if (hasFocus && isInitialized && IsOwner)
|
||||
CaptureCursor();
|
||||
}
|
||||
|
||||
public void ApplyPitch(float pitchDelta)
|
||||
@@ -98,4 +116,10 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
|
||||
if (playerCamera != null)
|
||||
playerCamera.transform.localRotation = Quaternion.Euler(pitch, 0f, 0f);
|
||||
}
|
||||
|
||||
private static void CaptureCursor()
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
Cursor.visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,12 +11,23 @@ public sealed class FactoryLobbyCodeView : MonoBehaviour
|
||||
GUILayout.BeginArea(new Rect(42, 42, 304, 76));
|
||||
if (session.IsHost)
|
||||
{
|
||||
GUILayout.Label("LOBBY CODE");
|
||||
GUILayout.Label(string.IsNullOrEmpty(session.JoinCode) ? "Generating..." : session.JoinCode);
|
||||
if (session.ConnectionMode == NetworkConnectionMode.Lan)
|
||||
{
|
||||
GUILayout.Label("LAN HOST");
|
||||
GUILayout.Label($"Same PC: 127.0.0.1:{session.LanPort}");
|
||||
}
|
||||
else
|
||||
{
|
||||
GUILayout.Label("LOBBY CODE");
|
||||
GUILayout.Label(string.IsNullOrEmpty(session.JoinCode) ? "Generating..." : session.JoinCode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GUILayout.Label("CONNECTED TO FACTORY");
|
||||
string connectionName = session.ConnectionMode == NetworkConnectionMode.Lan
|
||||
? "LAN"
|
||||
: "RELAY";
|
||||
GUILayout.Label($"CONNECTED VIA {connectionName}");
|
||||
}
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public interface IGlobalUISectionController { }
|
||||
|
||||
public sealed class GlobalUIController : MonoBehaviour
|
||||
{
|
||||
public static GlobalUIController Instance { get; private set; }
|
||||
|
||||
private readonly HashSet<IGlobalUISectionController> sectionControllers = new();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
@@ -13,11 +18,43 @@ public sealed class GlobalUIController : MonoBehaviour
|
||||
}
|
||||
|
||||
Instance = this;
|
||||
|
||||
foreach (MonoBehaviour behaviour in FindObjectsByType<MonoBehaviour>(
|
||||
FindObjectsInactive.Include,
|
||||
FindObjectsSortMode.None))
|
||||
{
|
||||
if (behaviour is IGlobalUISectionController controller)
|
||||
Register(controller);
|
||||
}
|
||||
}
|
||||
|
||||
public void Register(IGlobalUISectionController controller)
|
||||
{
|
||||
if (controller != null)
|
||||
sectionControllers.Add(controller);
|
||||
}
|
||||
|
||||
public void Unregister(IGlobalUISectionController controller)
|
||||
{
|
||||
if (controller != null)
|
||||
sectionControllers.Remove(controller);
|
||||
}
|
||||
|
||||
public IEnumerable<T> GetControllers<T>() where T : class, IGlobalUISectionController
|
||||
{
|
||||
foreach (IGlobalUISectionController controller in sectionControllers)
|
||||
{
|
||||
if (controller is T typedController)
|
||||
yield return typedController;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (Instance == this)
|
||||
{
|
||||
sectionControllers.Clear();
|
||||
Instance = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,17 @@ using UnityEngine;
|
||||
public sealed class MainMenuController : MonoBehaviour
|
||||
{
|
||||
private string joinCode = string.Empty;
|
||||
private string lanAddress = "127.0.0.1";
|
||||
private string lanPort = NetworkSessionController.DefaultLanPort.ToString();
|
||||
private string playerName = string.Empty;
|
||||
private string lanValidationMessage = string.Empty;
|
||||
private Vector2 lobbyScrollPosition;
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
NetworkSessionController session = NetworkSessionController.Instance;
|
||||
GUI.Box(new Rect(24, 24, 480, 620), string.Empty);
|
||||
GUILayout.BeginArea(new Rect(44, 44, 440, 580));
|
||||
GUI.Box(new Rect(24, 24, 480, 700), string.Empty);
|
||||
GUILayout.BeginArea(new Rect(44, 44, 440, 660));
|
||||
GUILayout.Label("FRIENDSLOP // MOUNTAIN FACTORY");
|
||||
GUILayout.Space(10);
|
||||
|
||||
@@ -38,6 +41,27 @@ public sealed class MainMenuController : MonoBehaviour
|
||||
|
||||
GUILayout.Space(10);
|
||||
GUI.enabled = !session.IsBusy;
|
||||
|
||||
GUILayout.Label("LAN // DIRECT CONNECTION");
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("IP", GUILayout.Width(24));
|
||||
lanAddress = GUILayout.TextField(lanAddress);
|
||||
GUILayout.Label("Port", GUILayout.Width(32));
|
||||
lanPort = GUILayout.TextField(lanPort, GUILayout.Width(64));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Start LAN Host", GUILayout.Height(32)) && TryReadLanPort(out ushort hostPort))
|
||||
session.StartLanHost(hostPort);
|
||||
if (GUILayout.Button("Join LAN", GUILayout.Height(32)) && TryReadLanPort(out ushort clientPort))
|
||||
session.StartLanClient(lanAddress, clientPort);
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
if (!string.IsNullOrEmpty(lanValidationMessage))
|
||||
GUILayout.Label(lanValidationMessage);
|
||||
|
||||
GUILayout.Space(12);
|
||||
GUILayout.Label("RELAY // ONLINE");
|
||||
if (GUILayout.Button("Create Relay Host", GUILayout.Height(34)))
|
||||
_ = session.StartHostAsync();
|
||||
|
||||
@@ -54,7 +78,7 @@ public sealed class MainMenuController : MonoBehaviour
|
||||
_ = session.RefreshPublicLobbiesAsync();
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
lobbyScrollPosition = GUILayout.BeginScrollView(lobbyScrollPosition, GUILayout.Height(220));
|
||||
lobbyScrollPosition = GUILayout.BeginScrollView(lobbyScrollPosition, GUILayout.Height(160));
|
||||
foreach (Lobby lobby in session.PublicLobbies)
|
||||
{
|
||||
GUILayout.BeginHorizontal(GUI.skin.box);
|
||||
@@ -72,4 +96,11 @@ public sealed class MainMenuController : MonoBehaviour
|
||||
GUI.enabled = true;
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
|
||||
private bool TryReadLanPort(out ushort port)
|
||||
{
|
||||
bool isValid = ushort.TryParse(lanPort, out port) && port > 0;
|
||||
lanValidationMessage = isValid ? string.Empty : "LAN port must be between 1 and 65535.";
|
||||
return isValid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d65437d286974b44bb6df1a726ef6d23
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d965f4d1841b6bf41b6345426ad113b4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
[RequireComponent(typeof(NetworkObject))]
|
||||
public abstract class NetworkWorkstationController : NetworkBehaviour
|
||||
{
|
||||
[SerializeField] private string workstationName = "Workstation";
|
||||
|
||||
public string WorkstationName => workstationName;
|
||||
public abstract bool IsOperating { get; }
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b35ba1fb1e9287646b0e3bdf150e98db
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1af1f8302444cae4e8c981b8d01cfcbb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,291 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
public enum FurnaceState : byte
|
||||
{
|
||||
Idle,
|
||||
Smelting
|
||||
}
|
||||
|
||||
public sealed class FurnaceController : NetworkWorkstationController
|
||||
{
|
||||
[Header("Storage")]
|
||||
[SerializeField, Min(1f)] private float metalCapacity = 100f;
|
||||
|
||||
[Header("Production")]
|
||||
[SerializeField] private Transform outputPoint;
|
||||
[SerializeField] private List<SmeltingRecipe> recipes = new();
|
||||
[SerializeField, Min(0f)] private float outputSpacing = 0.35f;
|
||||
|
||||
private readonly NetworkVariable<float> storedMetal = new(
|
||||
0f,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server);
|
||||
|
||||
private readonly NetworkVariable<int> selectedRecipeIndex = new(
|
||||
-1,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server);
|
||||
|
||||
private readonly NetworkVariable<FurnaceState> furnaceState = new(
|
||||
FurnaceState.Idle,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server);
|
||||
|
||||
private readonly NetworkVariable<double> processStartedAt = new(
|
||||
0d,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server);
|
||||
|
||||
private readonly NetworkVariable<double> processEndsAt = new(
|
||||
0d,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server);
|
||||
|
||||
public override bool IsOperating => furnaceState.Value == FurnaceState.Smelting;
|
||||
public FurnaceState State => furnaceState.Value;
|
||||
public float StoredMetal => storedMetal.Value;
|
||||
public float MetalCapacity => metalCapacity;
|
||||
public float MetalNormalized => metalCapacity > 0f ? storedMetal.Value / metalCapacity : 0f;
|
||||
public int SelectedRecipeIndex => selectedRecipeIndex.Value;
|
||||
public IReadOnlyList<SmeltingRecipe> Recipes => recipes;
|
||||
public SmeltingRecipe SelectedRecipe => TryGetRecipe(selectedRecipeIndex.Value, out SmeltingRecipe recipe)
|
||||
? recipe
|
||||
: null;
|
||||
public bool CanStartSelectedRecipe =>
|
||||
!IsOperating &&
|
||||
SelectedRecipe != null &&
|
||||
SelectedRecipe.OutputItem != null &&
|
||||
SelectedRecipe.OutputItem.WorldPrefab != null &&
|
||||
storedMetal.Value >= SelectedRecipe.MetalCost;
|
||||
public float ProcessProgress
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsOperating)
|
||||
return 0f;
|
||||
|
||||
double duration = processEndsAt.Value - processStartedAt.Value;
|
||||
if (duration <= 0d)
|
||||
return 1f;
|
||||
|
||||
double now = NetworkManager != null
|
||||
? NetworkManager.ServerTime.Time
|
||||
: Time.timeAsDouble;
|
||||
return Mathf.Clamp01((float)((now - processStartedAt.Value) / duration));
|
||||
}
|
||||
}
|
||||
public float RemainingSeconds
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsOperating)
|
||||
return 0f;
|
||||
|
||||
double now = NetworkManager != null
|
||||
? NetworkManager.ServerTime.Time
|
||||
: Time.timeAsDouble;
|
||||
return Mathf.Max(0f, (float)(processEndsAt.Value - now));
|
||||
}
|
||||
}
|
||||
|
||||
public event Action Changed;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
storedMetal.OnValueChanged += HandleStoredMetalChanged;
|
||||
selectedRecipeIndex.OnValueChanged += HandleSelectedRecipeChanged;
|
||||
furnaceState.OnValueChanged += HandleStateChanged;
|
||||
processStartedAt.OnValueChanged += HandleProcessTimeChanged;
|
||||
processEndsAt.OnValueChanged += HandleProcessTimeChanged;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
storedMetal.Value = Mathf.Clamp(storedMetal.Value, 0f, metalCapacity);
|
||||
selectedRecipeIndex.Value = recipes.Count > 0 ? 0 : -1;
|
||||
furnaceState.Value = FurnaceState.Idle;
|
||||
processStartedAt.Value = 0d;
|
||||
processEndsAt.Value = 0d;
|
||||
}
|
||||
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
storedMetal.OnValueChanged -= HandleStoredMetalChanged;
|
||||
selectedRecipeIndex.OnValueChanged -= HandleSelectedRecipeChanged;
|
||||
furnaceState.OnValueChanged -= HandleStateChanged;
|
||||
processStartedAt.OnValueChanged -= HandleProcessTimeChanged;
|
||||
processEndsAt.OnValueChanged -= HandleProcessTimeChanged;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!IsServer || !IsSpawned || !IsOperating)
|
||||
return;
|
||||
|
||||
if (NetworkManager.ServerTime.Time >= processEndsAt.Value)
|
||||
CompleteSmeltingOnServer();
|
||||
}
|
||||
|
||||
public bool TryConsumeMetalSource(FurnaceMetalSource source)
|
||||
{
|
||||
if (!IsServer || !IsSpawned || source == null || storedMetal.Value >= metalCapacity)
|
||||
return false;
|
||||
|
||||
NetworkItem item = source.GetComponent<NetworkItem>();
|
||||
if (item == null || !item.IsSpawned || item.NetworkObject == null)
|
||||
return false;
|
||||
|
||||
if (source.TryGetComponent(out NetworkHeldInteractable heldObject) && heldObject.IsHeld)
|
||||
return false;
|
||||
|
||||
if (source.TryGetComponent(out NetworkHandItemInteractable handItem) && handItem.IsHeld)
|
||||
return false;
|
||||
|
||||
if (!source.TryMarkConsumed())
|
||||
return false;
|
||||
|
||||
storedMetal.Value = Mathf.Min(metalCapacity, storedMetal.Value + source.MetalAmount);
|
||||
item.NetworkObject.Despawn(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryAddMetal(float amount)
|
||||
{
|
||||
if (!IsServer || !IsSpawned || amount <= 0f || storedMetal.Value >= metalCapacity)
|
||||
return false;
|
||||
|
||||
storedMetal.Value = Mathf.Min(metalCapacity, storedMetal.Value + amount);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SelectRecipe(int recipeIndex)
|
||||
{
|
||||
if (!IsSpawned)
|
||||
return;
|
||||
|
||||
if (IsServer)
|
||||
SelectRecipeOnServer(recipeIndex);
|
||||
else
|
||||
RequestSelectRecipeRpc(recipeIndex);
|
||||
}
|
||||
|
||||
public void StartSmelting()
|
||||
{
|
||||
if (!IsSpawned)
|
||||
return;
|
||||
|
||||
if (IsServer)
|
||||
TryStartSmeltingOnServer();
|
||||
else
|
||||
RequestStartSmeltingRpc();
|
||||
}
|
||||
|
||||
public void SelectAndStartRecipe(int recipeIndex)
|
||||
{
|
||||
if (!IsSpawned)
|
||||
return;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
if (SelectRecipeOnServer(recipeIndex))
|
||||
TryStartSmeltingOnServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
RequestSelectAndStartRecipeRpc(recipeIndex);
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
|
||||
private void RequestSelectRecipeRpc(int recipeIndex) =>
|
||||
SelectRecipeOnServer(recipeIndex);
|
||||
|
||||
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
|
||||
private void RequestStartSmeltingRpc() =>
|
||||
TryStartSmeltingOnServer();
|
||||
|
||||
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
|
||||
private void RequestSelectAndStartRecipeRpc(int recipeIndex)
|
||||
{
|
||||
if (SelectRecipeOnServer(recipeIndex))
|
||||
TryStartSmeltingOnServer();
|
||||
}
|
||||
|
||||
private bool SelectRecipeOnServer(int recipeIndex)
|
||||
{
|
||||
if (!IsServer || IsOperating || !TryGetRecipe(recipeIndex, out _))
|
||||
return false;
|
||||
|
||||
selectedRecipeIndex.Value = recipeIndex;
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool TryStartSmeltingOnServer()
|
||||
{
|
||||
if (!IsServer || !CanStartSelectedRecipe)
|
||||
return false;
|
||||
|
||||
SmeltingRecipe recipe = SelectedRecipe;
|
||||
storedMetal.Value -= recipe.MetalCost;
|
||||
double now = NetworkManager.ServerTime.Time;
|
||||
processStartedAt.Value = now;
|
||||
processEndsAt.Value = now + recipe.ProcessingDuration;
|
||||
furnaceState.Value = FurnaceState.Smelting;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CompleteSmeltingOnServer()
|
||||
{
|
||||
if (!TryGetRecipe(selectedRecipeIndex.Value, out SmeltingRecipe recipe) ||
|
||||
recipe.OutputItem == null ||
|
||||
recipe.OutputItem.WorldPrefab == null)
|
||||
{
|
||||
Debug.LogError($"{name} cannot complete smelting: output prefab is missing.", this);
|
||||
StopProcessingOnServer();
|
||||
return;
|
||||
}
|
||||
|
||||
Transform spawnTransform = outputPoint != null ? outputPoint : transform;
|
||||
for (int index = 0; index < recipe.OutputAmount; index++)
|
||||
{
|
||||
Vector3 sideOffset = spawnTransform.right * outputSpacing * index;
|
||||
NetworkObject output = Instantiate(
|
||||
recipe.OutputItem.WorldPrefab,
|
||||
spawnTransform.position + sideOffset,
|
||||
spawnTransform.rotation);
|
||||
output.Spawn();
|
||||
}
|
||||
|
||||
StopProcessingOnServer();
|
||||
}
|
||||
|
||||
private void StopProcessingOnServer()
|
||||
{
|
||||
furnaceState.Value = FurnaceState.Idle;
|
||||
processStartedAt.Value = 0d;
|
||||
processEndsAt.Value = 0d;
|
||||
}
|
||||
|
||||
private bool TryGetRecipe(int index, out SmeltingRecipe recipe)
|
||||
{
|
||||
bool isValid = index >= 0 && index < recipes.Count && recipes[index] != null;
|
||||
recipe = isValid ? recipes[index] : null;
|
||||
return isValid;
|
||||
}
|
||||
|
||||
private void HandleStoredMetalChanged(float _, float __) => Changed?.Invoke();
|
||||
private void HandleSelectedRecipeChanged(int _, int __) => Changed?.Invoke();
|
||||
private void HandleStateChanged(FurnaceState _, FurnaceState __) => Changed?.Invoke();
|
||||
private void HandleProcessTimeChanged(double _, double __) => Changed?.Invoke();
|
||||
|
||||
[ContextMenu("Debug/Add 25 Metal (Server Play Mode)")]
|
||||
private void DebugAddMetal() => TryAddMetal(25f);
|
||||
|
||||
[ContextMenu("Debug/Start Selected Recipe (Server Play Mode)")]
|
||||
private void DebugStartSelectedRecipe() => StartSmelting();
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41af49db79eeaf84ea8bc7c3dd75ae0f
|
||||
@@ -0,0 +1,88 @@
|
||||
using UnityEngine;
|
||||
|
||||
public sealed class FurnaceMetalLevelView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private FurnaceController furnace;
|
||||
[SerializeField] private Transform metalVisual;
|
||||
[SerializeField] private Transform emptyLocalPosition;
|
||||
[SerializeField] private Transform fullLocalPosition;
|
||||
[SerializeField, Min(0f)] private float movementSpeed = 1.5f;
|
||||
|
||||
private Vector3 targetLocalPosition;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
metalVisual = transform;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (furnace == null)
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
|
||||
if (furnace != null)
|
||||
furnace.Changed += RefreshTarget;
|
||||
|
||||
RefreshTarget();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (furnace != null)
|
||||
furnace.Changed -= RefreshTarget;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (metalVisual == null)
|
||||
return;
|
||||
|
||||
metalVisual.localPosition = movementSpeed <= 0f
|
||||
? targetLocalPosition
|
||||
: Vector3.MoveTowards(
|
||||
metalVisual.localPosition,
|
||||
targetLocalPosition,
|
||||
movementSpeed * Time.deltaTime);
|
||||
}
|
||||
|
||||
private void RefreshTarget()
|
||||
{
|
||||
float normalized = furnace != null ? furnace.MetalNormalized : 0f;
|
||||
targetLocalPosition = Vector3.Lerp(
|
||||
GetLocalPoint(emptyLocalPosition),
|
||||
GetLocalPoint(fullLocalPosition),
|
||||
normalized);
|
||||
}
|
||||
|
||||
private Vector3 GetLocalPoint(Transform point)
|
||||
{
|
||||
if (point == null || metalVisual == null)
|
||||
return metalVisual != null ? metalVisual.localPosition : Vector3.zero;
|
||||
|
||||
Transform space = metalVisual.parent;
|
||||
return space != null
|
||||
? space.InverseTransformPoint(point.position)
|
||||
: point.position;
|
||||
}
|
||||
|
||||
[ContextMenu("Preview/Empty")]
|
||||
private void PreviewEmpty() => ApplyPreview(0f);
|
||||
|
||||
[ContextMenu("Preview/Half")]
|
||||
private void PreviewHalf() => ApplyPreview(0.5f);
|
||||
|
||||
[ContextMenu("Preview/Full")]
|
||||
private void PreviewFull() => ApplyPreview(1f);
|
||||
|
||||
private void ApplyPreview(float normalized)
|
||||
{
|
||||
if (metalVisual == null)
|
||||
return;
|
||||
|
||||
metalVisual.localPosition = Vector3.Lerp(
|
||||
GetLocalPoint(emptyLocalPosition),
|
||||
GetLocalPoint(fullLocalPosition),
|
||||
normalized);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d51e4e087bfc8f14d8df1b4da69a6d56
|
||||
@@ -0,0 +1,31 @@
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(Collider))]
|
||||
public sealed class FurnaceScrapReceiver : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private FurnaceController furnace;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
Collider receiverCollider = GetComponent<Collider>();
|
||||
receiverCollider.isTrigger = true;
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (furnace == null)
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (furnace == null || !furnace.IsServer || !furnace.IsSpawned)
|
||||
return;
|
||||
|
||||
FurnaceMetalSource source = other.GetComponentInParent<FurnaceMetalSource>();
|
||||
if (source != null)
|
||||
furnace.TryConsumeMetalSource(source);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a72230fcd966f84d967ab39b124447d
|
||||
@@ -0,0 +1,25 @@
|
||||
using UnityEngine;
|
||||
|
||||
[CreateAssetMenu(fileName = "SmeltingRecipe", menuName = "FORT-BO/Workstations/Smelting Recipe")]
|
||||
public sealed class SmeltingRecipe : ScriptableObject
|
||||
{
|
||||
[SerializeField] private string recipeId;
|
||||
[SerializeField] private string displayName;
|
||||
[SerializeField] private ItemDefinition outputItem;
|
||||
[SerializeField, Min(1)] private int outputAmount = 1;
|
||||
[SerializeField, Min(0.01f)] private float metalCost = 25f;
|
||||
[SerializeField, Min(0.05f)] private float processingDuration = 3f;
|
||||
|
||||
public string RecipeId => recipeId;
|
||||
public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName;
|
||||
public ItemDefinition OutputItem => outputItem;
|
||||
public int OutputAmount => outputAmount;
|
||||
public float MetalCost => metalCost;
|
||||
public float ProcessingDuration => processingDuration;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
recipeId = recipeId?.Trim().ToLowerInvariant();
|
||||
displayName = displayName?.Trim();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dbdeccc1573d9204f858f7c114972d91
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46d9fb1e1a0fed4479d8298a3ccff544
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,72 @@
|
||||
using UnityEngine;
|
||||
|
||||
public sealed class FurnacePanelUIController : MonoBehaviour, IGlobalUISectionController
|
||||
{
|
||||
[SerializeField] private FurnaceController furnace;
|
||||
[SerializeField] private FurnacePanelUIView view;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
view = GetComponent<FurnacePanelUIView>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (furnace == null)
|
||||
furnace = GetComponentInParent<FurnaceController>();
|
||||
if (view == null)
|
||||
view = GetComponent<FurnacePanelUIView>();
|
||||
|
||||
if (furnace != null)
|
||||
furnace.Changed += Refresh;
|
||||
|
||||
GlobalUIController.Instance?.Register(this);
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (furnace != null)
|
||||
furnace.Changed -= Refresh;
|
||||
|
||||
GlobalUIController.Instance?.Unregister(this);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (furnace != null && furnace.IsOperating)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public void SelectRecipe(int recipeIndex)
|
||||
{
|
||||
furnace?.SelectRecipe(recipeIndex);
|
||||
}
|
||||
|
||||
public void SelectAndStartRecipe(int recipeIndex)
|
||||
{
|
||||
furnace?.SelectAndStartRecipe(recipeIndex);
|
||||
}
|
||||
|
||||
public void StartSmelting()
|
||||
{
|
||||
furnace?.StartSmelting();
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
if (furnace == null || view == null)
|
||||
return;
|
||||
|
||||
view.Render(
|
||||
furnace.StoredMetal,
|
||||
furnace.MetalCapacity,
|
||||
furnace.SelectedRecipe,
|
||||
furnace.State,
|
||||
furnace.ProcessProgress,
|
||||
furnace.RemainingSeconds,
|
||||
furnace.CanStartSelectedRecipe);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6cce45d5e80938340961575a1e91eb41
|
||||
@@ -0,0 +1,51 @@
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public sealed class FurnacePanelUIView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private TMP_Text metalText;
|
||||
[SerializeField] private TMP_Text selectedRecipeText;
|
||||
[SerializeField] private TMP_Text statusText;
|
||||
[SerializeField] private TMP_Text remainingTimeText;
|
||||
[SerializeField] private Image metalImage;
|
||||
[SerializeField] private Image progressImage;
|
||||
[SerializeField] private Button startButton;
|
||||
|
||||
public void Render(
|
||||
float storedMetal,
|
||||
float metalCapacity,
|
||||
SmeltingRecipe selectedRecipe,
|
||||
FurnaceState state,
|
||||
float processProgress,
|
||||
float remainingSeconds,
|
||||
bool canStart)
|
||||
{
|
||||
if (metalText != null)
|
||||
metalText.text = $"METAL {storedMetal:0.#} / {metalCapacity:0.#}";
|
||||
|
||||
if (metalImage != null)
|
||||
metalImage.fillAmount = metalCapacity > 0f ? storedMetal / metalCapacity : 0f;
|
||||
|
||||
if (selectedRecipeText != null)
|
||||
{
|
||||
selectedRecipeText.text = selectedRecipe != null
|
||||
? $"{selectedRecipe.DisplayName} | {selectedRecipe.MetalCost:0.#} metal"
|
||||
: "NO RECIPE";
|
||||
}
|
||||
|
||||
if (statusText != null)
|
||||
statusText.text = state == FurnaceState.Smelting ? "SMELTING" : "READY";
|
||||
|
||||
if (progressImage != null)
|
||||
progressImage.fillAmount = processProgress;
|
||||
|
||||
if (remainingTimeText != null)
|
||||
remainingTimeText.text = state == FurnaceState.Smelting
|
||||
? $"{remainingSeconds:0.0}s"
|
||||
: string.Empty;
|
||||
|
||||
if (startButton != null)
|
||||
startButton.interactable = canStart;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 871599a5b7d016b45a74a2005a6e22e5
|
||||
@@ -202,7 +202,7 @@ MonoBehaviour:
|
||||
Prefabs:
|
||||
NetworkPrefabsLists:
|
||||
- {fileID: 11400000, guid: ade67b675ab279949a8c1b7b0684ce60, type: 2}
|
||||
TickRate: 30
|
||||
TickRate: 60
|
||||
ClientConnectionBufferTimeout: 10
|
||||
ConnectionApproval: 0
|
||||
ConnectionData:
|
||||
|
||||
+14512
-7150
File diff suppressed because one or more lines are too long
@@ -45,7 +45,22 @@ MonoBehaviour:
|
||||
SourceHashToOverride: 0
|
||||
OverridingTargetPrefab: {fileID: 0}
|
||||
- Override: 0
|
||||
Prefab: {fileID: 8335220146391086898, guid: 3bfc25c2194679746bdc7441f889af7c, type: 3}
|
||||
Prefab: {fileID: 2182525189444712253, guid: 7f5a91b903d654342bfb77c0b9126aa3, type: 3}
|
||||
SourcePrefabToOverride: {fileID: 0}
|
||||
SourceHashToOverride: 0
|
||||
OverridingTargetPrefab: {fileID: 0}
|
||||
- Override: 0
|
||||
Prefab: {fileID: 9206541098482503491, guid: 29519dc5d2cfae441b261f3ca68f2290, type: 3}
|
||||
SourcePrefabToOverride: {fileID: 0}
|
||||
SourceHashToOverride: 0
|
||||
OverridingTargetPrefab: {fileID: 0}
|
||||
- Override: 0
|
||||
Prefab: {fileID: 4609832768900680681, guid: 5cf4d9e867c084847ba82c56bddc456b, type: 3}
|
||||
SourcePrefabToOverride: {fileID: 0}
|
||||
SourceHashToOverride: 0
|
||||
OverridingTargetPrefab: {fileID: 0}
|
||||
- Override: 0
|
||||
Prefab: {fileID: 3006047789126627680, guid: 802af0722eb96ab46ae2cecf926bc6c9, type: 3}
|
||||
SourcePrefabToOverride: {fileID: 0}
|
||||
SourceHashToOverride: 0
|
||||
OverridingTargetPrefab: {fileID: 0}
|
||||
|
||||
@@ -1003,3 +1003,60 @@ launch3
|
||||
launch4
|
||||
$
|
||||
Done
|
||||
2026-8-11
|
||||
Init...
|
||||
Context created
|
||||
Tiles: 1
|
||||
Loading shader denoisePrepareOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
Loading shader denoiseFinishOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
^
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
$
|
||||
Done
|
||||
2026-8-11
|
||||
Init...
|
||||
Context created
|
||||
Tiles: 1
|
||||
Loading shader denoisePrepareOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
Loading shader denoiseFinishOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
^
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
$
|
||||
Done
|
||||
2026-8-11
|
||||
Init...
|
||||
Context created
|
||||
Tiles: 1
|
||||
Loading shader denoisePrepareOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
Loading shader denoiseFinishOIDN.ptx::oxMain...
|
||||
Loaded
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
^
|
||||
launch1
|
||||
launch2
|
||||
launch3
|
||||
launch4
|
||||
$
|
||||
Done
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1465,3 +1465,170 @@ Symbol file LoadedFromMemory is not a mono symbol file
|
||||
[main 2026-08-11T07:49:01.962Z] Extension host with pid 9568 exited with code: 0, signal: unknown.
|
||||
[main 2026-08-11T07:49:01.972Z] Extension host with pid 8660 exited with code: 0, signal: unknown.
|
||||
[main 2026-08-11T07:49:01.977Z] Extension host with pid 32444 exited with code: 0, signal: unknown.
|
||||
Done
|
||||
Done
|
||||
Done
|
||||
Done
|
||||
Loaded vertex shader: quad.vso
|
||||
Loaded pixel shader: skyOutput.pso
|
||||
Loaded pixel shader: cookieOutput.pso
|
||||
initShaders done
|
||||
initScene done
|
||||
Done
|
||||
Rendering UV GBuffer for Factory_LM0 51
|
||||
RGBA32F...RGBA8...R8...RGBA8_SRGB...RGBA16F...states...
|
||||
Rendering UV normal...
|
||||
Rendering faceted UV normal...
|
||||
Rendering UV pos...
|
||||
Rendering smooth UV pos...
|
||||
Rendering UV GBuffer for Factory_LMA1 51
|
||||
RGBA32F...RGBA8...R8...RGBA8_SRGB...RGBA16F...states...
|
||||
Rendering UV normal...
|
||||
Rendering faceted UV normal...
|
||||
Rendering UV pos...
|
||||
Rendering smooth UV pos...
|
||||
Rendering UV GBuffer for Factory_LMA2 51
|
||||
RGBA32F...RGBA8...R8...RGBA8_SRGB...RGBA16F...states...
|
||||
Rendering UV normal...
|
||||
Rendering faceted UV normal...
|
||||
Rendering UV pos...
|
||||
Rendering smooth UV pos...
|
||||
Rendering UV GBuffer for volumes 512
|
||||
RGBA32F...RGBA8...R8...RGBA8_SRGB...RGBA16F...states...
|
||||
Done
|
||||
Done
|
||||
Running ftraceRTX fixpos3D "C:\Users\42\AppData\Local\Temp\frender" "uvpos_volumes.lz4" 2 0 3 fixPos3D_3.bin
|
||||
Running ftraceRTX fixpos12 "C:\Users\42\AppData\Local\Temp\frender" "uvpos_Factory_LM0.lz4" 2 0 0 0
|
||||
Running ftraceRTX fixpos12 "C:\Users\42\AppData\Local\Temp\frender" "uvpos_Factory_LMA1.lz4" 2 0 1 0
|
||||
Running ftraceRTX fixpos12 "C:\Users\42\AppData\Local\Temp\frender" "uvpos_Factory_LMA2.lz4" 2 0 2 0
|
||||
Running ftraceRTX arealightprobesh "C:\Users\42\AppData\Local\Temp\frender" "light_1_3" 1924 0 3 lights0.bin
|
||||
Running ftraceRTX batchpointlightprobeshlegacy "C:\Users\42\AppData\Local\Temp\frender" "PointBatch_3_0_5" 1924 0 3 batchpointlight_3_0_5.bin
|
||||
Running ftraceRTX addmul "C:\Users\42\AppData\Local\Temp\frender" "volumes" 4 0 3 comp_3.bin
|
||||
Running ftraceRTX arealight "C:\Users\42\AppData\Local\Temp\frender" "light_1_0" 4 0 0 lights0.bin
|
||||
Running ftraceRTX batchpointlightlegacy "C:\Users\42\AppData\Local\Temp\frender" "PointBatch_0_0_5" 4 0 0 batchpointlight_0_0_5.bin
|
||||
Running ftraceRTX addmul "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0" 4 0 0 comp_0.bin
|
||||
Running ftraceRTX arealight "C:\Users\42\AppData\Local\Temp\frender" "light_1_1" 4 0 1 lights0.bin
|
||||
Running ftraceRTX batchpointlightlegacy "C:\Users\42\AppData\Local\Temp\frender" "PointBatch_1_0_5" 4 0 1 batchpointlight_1_0_5.bin
|
||||
Running ftraceRTX addmul "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1" 4 0 1 comp_1.bin
|
||||
Running ftraceRTX arealight "C:\Users\42\AppData\Local\Temp\frender" "light_1_2" 4 0 2 lights0.bin
|
||||
Running ftraceRTX addmul "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2" 4 0 2 comp_2.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0_diffuse" 4 16 0 "gi_Factory_LM00.bin" "Factory_LM0_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1_diffuse" 4 16 1 "gi_Factory_LMA10.bin" "Factory_LMA1_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2_diffuse" 4 16 2 "gi_Factory_LMA20.bin" "Factory_LMA2_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0_diffuse" 4 16 0 "gi_Factory_LM01.bin" "Factory_LM0_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1_diffuse" 4 16 1 "gi_Factory_LMA11.bin" "Factory_LMA1_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2_diffuse" 4 16 2 "gi_Factory_LMA21.bin" "Factory_LMA2_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0_diffuse" 4 16 0 "gi_Factory_LM02.bin" "Factory_LM0_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1_diffuse" 4 16 1 "gi_Factory_LMA12.bin" "Factory_LMA1_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2_diffuse" 4 16 2 "gi_Factory_LMA22.bin" "Factory_LMA2_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0_diffuse" 4 16 0 "gi_Factory_LM03.bin" "Factory_LM0_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1_diffuse" 4 16 1 "gi_Factory_LMA13.bin" "Factory_LMA1_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2_diffuse" 4 16 2 "gi_Factory_LMA23.bin" "Factory_LMA2_diffuse0_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgiprobesh "C:\Users\42\AppData\Local\Temp\frender" "volumes_final" 1924 16 3 "gi_volumes4.bin" "volumes_lights_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LM0_final" 4 16 0 "gi_Factory_LM04.bin" "Factory_LM0_lights_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA1_final" 4 16 1 "gi_Factory_LMA14.bin" "Factory_LMA1_lights_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX texgi "C:\Users\42\AppData\Local\Temp\frender" "Factory_LMA2_final" 4 16 2 "gi_Factory_LMA24.bin" "Factory_LMA2_lights_HDR.lz4" vbTraceTex.bin
|
||||
Running ftraceRTX addsh "C:\Users\42\AppData\Local\Temp\frender" "volumes_final_" 4 0 3 shcomp_3.bin
|
||||
Running denoiserOIDN c "C:\Users\42\AppData\Local\Temp\frender/Factory_LM0_final_HDR.lz4" "C:\Users\42\AppData\Local\Temp\frender/Factory_LM0_final_HDR.lz4" 4096 0
|
||||
Running seamfixer "C:\Users\42\AppData\Local\Temp\frender" "0" "Factory_LM0_final_HDR.lz4"
|
||||
Loading geometry...
|
||||
Tris filtered by LMID: was 35936, left 3188
|
||||
Collecting edges...
|
||||
9564 edges
|
||||
Sorting...
|
||||
Finding seams...X
|
||||
948 seams
|
||||
Generating mesh...
|
||||
Initializing D3D...
|
||||
Selected device: NVIDIA GeForce RTX 5080
|
||||
Loaded vertex shader: seamfix.vso
|
||||
Loaded pixel shader: debugLines.pso
|
||||
Loading half-float lightmap...
|
||||
Rendering...
|
||||
Saving...
|
||||
Running denoiserOIDN c "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA1_final_HDR.lz4" "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA1_final_HDR.lz4" 4096 0
|
||||
Running seamfixer "C:\Users\42\AppData\Local\Temp\frender" "1" "Factory_LMA1_final_HDR.lz4"
|
||||
Loading geometry...
|
||||
Tris filtered by LMID: was 35936, left 5784
|
||||
Collecting edges...
|
||||
17289 edges
|
||||
Sorting...
|
||||
Finding seams...X
|
||||
1140 seams
|
||||
Generating mesh...
|
||||
Initializing D3D...
|
||||
Selected device: NVIDIA GeForce RTX 5080
|
||||
Loaded vertex shader: seamfix.vso
|
||||
Loaded pixel shader: debugLines.pso
|
||||
Loading half-float lightmap...
|
||||
Rendering...
|
||||
Saving...
|
||||
Running denoiserOIDN c "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA2_final_HDR.lz4" "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA2_final_HDR.lz4" 1024 0
|
||||
Running seamfixer "C:\Users\42\AppData\Local\Temp\frender" "2" "Factory_LMA2_final_HDR.lz4"
|
||||
Loading geometry...
|
||||
Tris filtered by LMID: was 35936, left 12
|
||||
Collecting edges...
|
||||
36 edges
|
||||
Sorting...
|
||||
Finding seams...X
|
||||
0 seams
|
||||
Running halffloat2hdr "C:\Users\42\AppData\Local\Temp\frender/Factory_LM0_final_HDR.lz4" "D:/UnityProjects/FORT-BO/Assets/BakeryLightmaps/Factory_LM0_final.hdr" 1024
|
||||
Initializing D3D...
|
||||
Done
|
||||
Running halffloat2hdr "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA1_final_HDR.lz4" "D:/UnityProjects/FORT-BO/Assets/BakeryLightmaps/Factory_LMA1_final.hdr" 1024
|
||||
Initializing D3D...
|
||||
Done
|
||||
Running halffloat2hdr "C:\Users\42\AppData\Local\Temp\frender/Factory_LMA2_final_HDR.lz4" "D:/UnityProjects/FORT-BO/Assets/BakeryLightmaps/Factory_LMA2_final.hdr" 1024
|
||||
Initializing D3D...
|
||||
Done
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
|
||||
[main 2026-08-11T12:59:28.234Z] [RendererPing] enabled (intervalMs=5000, blockThresholdMs=15000, stacks=true)
|
||||
[main 2026-08-11T12:59:28.334Z] updateURL https://api2.cursor.sh/updates/api/update/win32-x64-user/cursor/3.15.6/484e98c431d003939cb044bad799f11c5fc4746a8e9cc56f4e8964771f655062/stable
|
||||
[main 2026-08-11T12:59:28.335Z] update#setState idle
|
||||
[main 2026-08-11T12:59:42.208Z] [CursorProclistService] Config enabled feature (subsample every 10s; memoryPressureMonitorEnabled=false)
|
||||
[main 2026-08-11T12:59:56.638Z] update#setState checking for updates
|
||||
[main 2026-08-11T13:00:01.320Z] update#setState idle
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
[main 2026-08-11T13:17:01.878Z] [PowerMainService] Started wakelock id=0 owner=window:1 reason="agent-loop" activeCount=1
|
||||
[main 2026-08-11T13:17:01.891Z] [PowerMainService] Disabled background throttling id=1 owner=window:1 reason="agent-loop" activeCount=1
|
||||
[main 2026-08-11T13:18:09.839Z] [PowerMainService] Stopping wakelock id=0 owner=window:1 reason="agent-loop" heldForMs=67961
|
||||
[main 2026-08-11T13:18:09.847Z] [PowerMainService] Stopped background throttling disable id=1 owner=window:1 reason="agent-loop" heldForMs=67956
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
[main 2026-08-11T13:23:39.041Z] [PowerMainService] Started wakelock id=1 owner=window:1 reason="agent-loop" activeCount=1
|
||||
[main 2026-08-11T13:23:39.053Z] [PowerMainService] Disabled background throttling id=2 owner=window:1 reason="agent-loop" activeCount=1
|
||||
[main 2026-08-11T13:25:39.905Z] [PowerMainService] Stopping wakelock id=1 owner=window:1 reason="agent-loop" heldForMs=120864
|
||||
[main 2026-08-11T13:25:39.911Z] [PowerMainService] Stopped background throttling disable id=2 owner=window:1 reason="agent-loop" heldForMs=120859
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
Symbol file LoadedFromMemory is not a mono symbol file
|
||||
[main 2026-08-11T13:56:24.373Z] update#setState checking for updates
|
||||
[main 2026-08-11T13:56:24.934Z] update#setState idle
|
||||
|
||||
+688
-11
File diff suppressed because one or more lines are too long
@@ -104,12 +104,12 @@
|
||||
{
|
||||
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
|
||||
"key": "ShapeBuilder.ActiveShapeIndex",
|
||||
"value": "{\"m_Value\":7}"
|
||||
"value": "{\"m_Value\":6}"
|
||||
},
|
||||
{
|
||||
"type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
|
||||
"key": "ShapeBuilder.LastSize.Cube",
|
||||
"value": "{\"m_Value\":{\"x\":1.1326942443847657,\"y\":3.317640781402588,\"z\":0.7999992370605469}}"
|
||||
"value": "{\"m_Value\":{\"x\":1.2000001668930054,\"y\":0.4000001549720764,\"z\":1.4000000953674317}}"
|
||||
},
|
||||
{
|
||||
"type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
|
||||
|
||||
@@ -83,7 +83,7 @@ PlayerSettings:
|
||||
androidApplicationEntry: 2
|
||||
defaultIsNativeResolution: 1
|
||||
macRetinaSupport: 1
|
||||
runInBackground: 0
|
||||
runInBackground: 1
|
||||
muteOtherAudioSources: 0
|
||||
Prepare IOS For Recording: 0
|
||||
Force IOS Speakers When Recording: 0
|
||||
|
||||
@@ -22,3 +22,4 @@
|
||||
08.06.2026 18:04 | Factory | 0h 0m 29s
|
||||
08.10.2026 12:31 | Factory | 0h 0m 39s
|
||||
08.10.2026 12:32 | Factory | 0h 0m 43s
|
||||
08.11.2026 10:50 | Factory | 0h 0m 40s
|
||||
|
||||
Reference in New Issue
Block a user