Entwickler haben also Bedürfnisse?
This commit is contained in:
parent
17dbb6a356
commit
1bae35b3be
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 094c049ae10f1c3419c96c4bce41cf8c
|
||||||
|
timeCreated: 1486485857
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -997,6 +997,201 @@ RectTransform:
|
||||||
m_AnchoredPosition: {x: 117, y: -165.8}
|
m_AnchoredPosition: {x: 117, y: -165.8}
|
||||||
m_SizeDelta: {x: 200, y: 50}
|
m_SizeDelta: {x: 200, y: 50}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!1 &983523618
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 983523620}
|
||||||
|
- component: {fileID: 983523619}
|
||||||
|
- component: {fileID: 983523622}
|
||||||
|
- component: {fileID: 983523621}
|
||||||
|
- component: {fileID: 983523623}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Dev1
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!114 &983523619
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 983523618}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 6dcc72027d5c35441a351fdb5140b0f8, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_baseStats:
|
||||||
|
BaseEfficiency: 1
|
||||||
|
Fingers: 10
|
||||||
|
CaffeineDrainFactor: 1
|
||||||
|
HungerDrainFactor: 1
|
||||||
|
UrinationDrainFactor: 1
|
||||||
|
_currentEfficiency: 1
|
||||||
|
_fingersLeft: 10
|
||||||
|
_caffeineLevel: 1
|
||||||
|
_hungerLevel: 1
|
||||||
|
_urinationDrain: 1
|
||||||
|
_isSleeping: 0
|
||||||
|
_isHyperactive: 0
|
||||||
|
_isOvercaffeinated: 0
|
||||||
|
_developerNeeds: {fileID: 0}
|
||||||
|
_caffeineNeed: {fileID: 0}
|
||||||
|
_hungerNeed: {fileID: 0}
|
||||||
|
_toiletNeed: {fileID: 0}
|
||||||
|
--- !u!4 &983523620
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 983523618}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 1.7602714, y: 10.847181, z: -9.905458}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &983523621
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 983523618}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ef5183dac70a54b4cbed3e05d617524f, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
context: going for a walk, falling, explosion, blood
|
||||||
|
gender: MALE
|
||||||
|
speakingSpeed: 1.1
|
||||||
|
playSound: 0
|
||||||
|
generate: 0
|
||||||
|
--- !u!114 &983523622
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 983523618}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f7e417f330c4dd845a8f3dc744dff25a, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
Needs:
|
||||||
|
- {fileID: 2907046783514947559, guid: 92b71cfc6a2687d44b165ead746233f0, type: 3}
|
||||||
|
- {fileID: 3355435593704932208, guid: b31fb59d198e53b459943bf898293618, type: 3}
|
||||||
|
- {fileID: 2405502523364773131, guid: b396df2098c22e1488c2c2769c6ddcd6, type: 3}
|
||||||
|
- {fileID: 7697340910557049827, guid: 5d809e3a343d45f4185615db92384dc7, type: 3}
|
||||||
|
--- !u!82 &983523623
|
||||||
|
AudioSource:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 983523618}
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 4
|
||||||
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
|
m_audioClip: {fileID: 0}
|
||||||
|
m_PlayOnAwake: 1
|
||||||
|
m_Volume: 1
|
||||||
|
m_Pitch: 1
|
||||||
|
Loop: 0
|
||||||
|
Mute: 0
|
||||||
|
Spatialize: 0
|
||||||
|
SpatializePostEffects: 0
|
||||||
|
Priority: 128
|
||||||
|
DopplerLevel: 1
|
||||||
|
MinDistance: 1
|
||||||
|
MaxDistance: 500
|
||||||
|
Pan2D: 0
|
||||||
|
rolloffMode: 0
|
||||||
|
BypassEffects: 0
|
||||||
|
BypassListenerEffects: 0
|
||||||
|
BypassReverbZones: 0
|
||||||
|
rolloffCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 1
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 1
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
panLevelCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
spreadCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
reverbZoneMixCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 1
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
--- !u!1 &1088929059
|
--- !u!1 &1088929059
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -1451,6 +1646,14 @@ PrefabInstance:
|
||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3650884189301972455, guid: e1e33f0b2075b5c40817665dd8a86f31, type: 3}
|
||||||
|
propertyPath: _developers.Array.size
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3650884189301972455, guid: e1e33f0b2075b5c40817665dd8a86f31, type: 3}
|
||||||
|
propertyPath: _developers.Array.data[0]
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 983523619}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
|
@ -1548,6 +1751,112 @@ Transform:
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!1 &2113596626
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2113596630}
|
||||||
|
- component: {fileID: 2113596629}
|
||||||
|
- component: {fileID: 2113596628}
|
||||||
|
- component: {fileID: 2113596627}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Quad
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!64 &2113596627
|
||||||
|
MeshCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2113596626}
|
||||||
|
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: 5
|
||||||
|
m_Convex: 0
|
||||||
|
m_CookingOptions: 30
|
||||||
|
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
--- !u!23 &2113596628
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2113596626}
|
||||||
|
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_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
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: 0
|
||||||
|
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!33 &2113596629
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2113596626}
|
||||||
|
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
--- !u!4 &2113596630
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2113596626}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 33.02, y: 33.02, z: 33.02}
|
||||||
|
m_ConstrainProportionsScale: 1
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
|
||||||
--- !u!1660057539 &9223372036854775807
|
--- !u!1660057539 &9223372036854775807
|
||||||
SceneRoots:
|
SceneRoots:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -1558,3 +1867,5 @@ SceneRoots:
|
||||||
- {fileID: 4836486}
|
- {fileID: 4836486}
|
||||||
- {fileID: 845814462}
|
- {fileID: 845814462}
|
||||||
- {fileID: 1648641904}
|
- {fileID: 1648641904}
|
||||||
|
- {fileID: 2113596630}
|
||||||
|
- {fileID: 983523620}
|
||||||
|
|
|
@ -1,26 +1,70 @@
|
||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Serialization;
|
using UnityEngine.Serialization;
|
||||||
using Utility;
|
using Utility;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public struct DeveloperStats
|
||||||
|
{
|
||||||
|
public double BaseEfficiency;
|
||||||
|
public int Fingers;
|
||||||
|
|
||||||
|
public double CaffeineDrainFactor;
|
||||||
|
public double HungerDrainFactor;
|
||||||
|
[FormerlySerializedAs("UrgeToUrinateFillFactor")] public double UrinationDrainFactor;
|
||||||
|
|
||||||
|
public DeveloperStats(double baseEfficiency, int fingers, double caffeineDrainFactor, double hungerDrainFactor, double urinationDrainFactor)
|
||||||
|
{
|
||||||
|
BaseEfficiency = baseEfficiency;
|
||||||
|
Fingers = fingers;
|
||||||
|
CaffeineDrainFactor = caffeineDrainFactor;
|
||||||
|
HungerDrainFactor = hungerDrainFactor;
|
||||||
|
UrinationDrainFactor = urinationDrainFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DeveloperStats Default = new DeveloperStats(1.0, 10, 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
public class Developer : MonoBehaviour
|
public class Developer : MonoBehaviour
|
||||||
{
|
{
|
||||||
private string _name;
|
private string _name;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private double _baseEfficiency = 1.0;
|
private DeveloperStats _baseStats = DeveloperStats.Default;
|
||||||
|
|
||||||
[SerializeField, ShowOnly]
|
[FormerlySerializedAs("_currentCurrentEfficiency")] [SerializeField, ShowOnly]
|
||||||
private double _currentCurrentEfficiency = 1.0;
|
private double _currentEfficiency = 1.0;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private int _fingersLeft = 10;
|
private int _fingersLeft = 10;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private double _caffeineLevel = 1.0;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private double _hungerLevel = 1.0;
|
||||||
|
|
||||||
|
[FormerlySerializedAs("_urgeToUrinateLevel")] [SerializeField]
|
||||||
|
private double _urinationDrain = 1.0;
|
||||||
|
|
||||||
|
[SerializeField, ShowOnly]
|
||||||
|
private bool _isSleeping = false;
|
||||||
|
|
||||||
|
[SerializeField, ShowOnly]
|
||||||
|
private bool _isHyperactive = false;
|
||||||
|
|
||||||
|
[SerializeField, ShowOnly]
|
||||||
|
private bool _isOvercaffeinated = false;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private DeveloperNeeds _developerNeeds;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gibt die Grundeffizienz des Entwicklers zurück.
|
/// Gibt die Grunddaten des Entwicklers zurück.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double BaseEfficiency => _baseEfficiency;
|
public DeveloperStats BaseStats => _baseStats;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gibt die Anzahl der Finger zurück.
|
/// Gibt die Anzahl der Finger zurück.
|
||||||
|
@ -30,15 +74,153 @@ public class Developer : MonoBehaviour
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gibt die aktuelle Effizienz des Entwicklers in Prozent zurück.
|
/// Gibt die aktuelle Effizienz des Entwicklers in Prozent zurück.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double CurrentEfficiency => _currentCurrentEfficiency;
|
public double CurrentEfficiency => _currentEfficiency;
|
||||||
|
|
||||||
public string Name => _name;
|
public string Name => _name;
|
||||||
|
|
||||||
public void UpdateEfficiency()
|
[SerializeField]
|
||||||
|
private GameObject _caffeineNeed;
|
||||||
|
[SerializeField]
|
||||||
|
private GameObject _hungerNeed;
|
||||||
|
[SerializeField]
|
||||||
|
private GameObject _toiletNeed;
|
||||||
|
|
||||||
|
void Start()
|
||||||
{
|
{
|
||||||
_currentCurrentEfficiency = _baseEfficiency * (_fingersLeft / 10.0);
|
_developerNeeds = gameObject.GetComponent<DeveloperNeeds>();
|
||||||
|
|
||||||
|
_fingersLeft = _baseStats.Fingers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ContextMenu("Give Drink")]
|
||||||
|
private void TestDrink()
|
||||||
|
{
|
||||||
|
GiveDrink(0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ContextMenu("Give Food")]
|
||||||
|
private void TestFood()
|
||||||
|
{
|
||||||
|
GiveFood(0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ContextMenu("Drain Bladder")]
|
||||||
|
private void TestPee()
|
||||||
|
{
|
||||||
|
Pee(0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GiveDrink(double caffeineAmount)
|
||||||
|
{
|
||||||
|
_caffeineLevel += caffeineAmount;
|
||||||
|
|
||||||
|
if (_caffeineNeed != null && _caffeineLevel > GameManager.Instance.NeedNotificationThreshold)
|
||||||
|
{
|
||||||
|
NeedFullfilled(_caffeineNeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GiveFood(double foodAmount)
|
||||||
|
{
|
||||||
|
_hungerLevel += foodAmount;
|
||||||
|
|
||||||
|
if (_hungerNeed != null && _hungerLevel > GameManager.Instance.NeedNotificationThreshold)
|
||||||
|
{
|
||||||
|
NeedFullfilled(_hungerNeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Pee(double peeAmount)
|
||||||
|
{
|
||||||
|
_urinationDrain += peeAmount;
|
||||||
|
|
||||||
|
if (_toiletNeed != null && _urinationDrain > GameManager.Instance.NeedNotificationThreshold)
|
||||||
|
{
|
||||||
|
NeedFullfilled(_toiletNeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateStats(double caffeineDrain, double hungerDrain, double urinationDrain)
|
||||||
|
{
|
||||||
|
_caffeineLevel -= caffeineDrain * _baseStats.CaffeineDrainFactor;
|
||||||
|
_hungerLevel -= hungerDrain * _baseStats.HungerDrainFactor;
|
||||||
|
_urinationDrain -= urinationDrain * _baseStats.UrinationDrainFactor;
|
||||||
|
|
||||||
|
_caffeineLevel = Math.Clamp(_caffeineLevel, 0.0, 2.0);
|
||||||
|
_hungerLevel = Math.Clamp(_hungerLevel, 0.0, 1.0);
|
||||||
|
_urinationDrain = Math.Clamp(_urinationDrain, 0.0, 1.0);
|
||||||
|
|
||||||
|
_isHyperactive = _caffeineLevel > 1.0;
|
||||||
|
_isOvercaffeinated = _caffeineLevel > 1.5;
|
||||||
|
_isSleeping = _caffeineLevel <= 0.0;
|
||||||
|
|
||||||
|
if (_caffeineLevel < GameManager.Instance.NeedNotificationThreshold && _caffeineNeed == null)
|
||||||
|
{
|
||||||
|
_caffeineNeed = _developerNeeds.SpawnCaffeineNeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_hungerLevel < GameManager.Instance.NeedNotificationThreshold && _hungerNeed == null)
|
||||||
|
{
|
||||||
|
_hungerNeed = _developerNeeds.SpawnHungerNeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_urinationDrain < GameManager.Instance.NeedNotificationThreshold && _toiletNeed == null)
|
||||||
|
{
|
||||||
|
// TODO: Go to toilet
|
||||||
|
|
||||||
|
Debug.Log("Ich muss aufs Klo!");
|
||||||
|
|
||||||
|
_toiletNeed = _developerNeeds.SpawnToiletNeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_hungerLevel <= 0.0)
|
||||||
|
{
|
||||||
|
Die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void NeedFullfilled(GameObject needObject)
|
||||||
|
{
|
||||||
|
Instantiate(GameManager.Instance.NeedFullfilledParticleEffect, needObject.transform.position, needObject.transform.rotation);
|
||||||
|
Destroy(needObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateEfficiency()
|
||||||
|
{
|
||||||
|
_currentEfficiency = _baseStats.BaseEfficiency * (_fingersLeft / 10.0) * CalculateCaffeineEfficiency() * CalculateHungerEfficiency() * CalculateUrinationEfficiency();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Es könnte sich als schwierig erweisen, die Effizienz hoch zu halten.
|
||||||
|
// Man könnte ggf. die Funktionen so anpassen, dass sie eine ganze Weile 100% Effizienz geben.
|
||||||
|
|
||||||
|
private double CalculateCaffeineEfficiency()
|
||||||
|
{
|
||||||
|
if (_isSleeping)
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
// Die Formel hat schon recht vielversprechendes Verhalten im Bereich > 1
|
||||||
|
//if (_isHyperactive)
|
||||||
|
// return 1.0 + (_caffeineLevel - 1.0) * (_caffeineLevel - 1.0);
|
||||||
|
|
||||||
|
if (_isOvercaffeinated)
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
// https://easings.net/#easeOutCubic
|
||||||
|
return 1.0 - Math.Pow(1.0 - _caffeineLevel, 3.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private double CalculateHungerEfficiency()
|
||||||
|
{
|
||||||
|
// https://easings.net/#easeOutCirc
|
||||||
|
return Math.Sqrt(1.0 - Math.Pow(_caffeineLevel - 1.0, 2.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
private double CalculateUrinationEfficiency()
|
||||||
|
{
|
||||||
|
// https://easings.net/#easeOutExpo
|
||||||
|
return Math.Abs(_urinationDrain - 1.0) < 0.0001f ? 1.0 : 1.0 - Math.Pow(2, -10 * _urinationDrain);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Der Entwickler wird verletzt und der Idiot bricht sich ausgerechnet einen Finger...
|
/// Der Entwickler wird verletzt und der Idiot bricht sich ausgerechnet einen Finger...
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -22,6 +22,14 @@ public class DeveloperNeeds : MonoBehaviour
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Enums statt strings verwenden
|
||||||
|
// TODO: Multiple Needs möglich übereinander anzeigen?
|
||||||
|
|
||||||
|
public GameObject SpawnCaffeineNeed() => spawnNeed(Random.Range(0.0f, 1.0f) < 0.5f ? "coffee" : "mate");
|
||||||
|
public GameObject SpawnToiletNeed() => spawnNeed("toilet");
|
||||||
|
public GameObject SpawnHungerNeed() => spawnNeed("hunger");
|
||||||
|
public GameObject SpawnMoneyNeed() => spawnNeed("money");
|
||||||
|
|
||||||
public GameObject spawnNeed(string needName)
|
public GameObject spawnNeed(string needName)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -47,6 +55,7 @@ public class DeveloperNeeds : MonoBehaviour
|
||||||
context = "The NPC wants a raise, The NPC needs more money";
|
context = "The NPC wants a raise, The NPC needs more money";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Debug.LogError($"Unbekannter need \"{needName}\"");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
@ -7,7 +8,9 @@ using Utility;
|
||||||
|
|
||||||
public partial class GameManager : MonoBehaviourSingleton<GameManager>
|
public partial class GameManager : MonoBehaviourSingleton<GameManager>
|
||||||
{
|
{
|
||||||
[SerializeField] private Difficulty _difficulty = Difficulty.Medium;
|
[SerializeField] private Difficulty _difficulty = Difficulty.Medium;
|
||||||
|
|
||||||
|
public GameObject NeedFullfilledParticleEffect;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private double _totalGameDurationSeconds;
|
private double _totalGameDurationSeconds;
|
||||||
|
@ -18,14 +21,25 @@ public partial class GameManager : MonoBehaviourSingleton<GameManager>
|
||||||
[SerializeField, ShowOnly]
|
[SerializeField, ShowOnly]
|
||||||
private double _currentEfficiency = 0.0;
|
private double _currentEfficiency = 0.0;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private double _generalNeedDrainScaling = 0.001;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private List<Developer> _developers = new();
|
private List<Developer> _developers = new();
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private MultiFalsableBool _gameRunning = new(false);
|
private MultiFalsableBool _gameRunning = new(false);
|
||||||
|
|
||||||
|
[SerializeField, Tooltip("Der Schwellwert am dem eine Benachrichtigung für das Bedürfnis ausgelöst wird.")]
|
||||||
|
private double _needNotificationThreshold = 0.25;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private DifficultySettings _difficultySettings;
|
||||||
|
|
||||||
public Difficulty Difficulty => _difficulty;
|
public Difficulty Difficulty => _difficulty;
|
||||||
|
|
||||||
|
public double NeedNotificationThreshold => _needNotificationThreshold;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Wie weit das Spiel bereits fortgeschritten ist.
|
/// Wie weit das Spiel bereits fortgeschritten ist.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -57,7 +71,9 @@ public partial class GameManager : MonoBehaviourSingleton<GameManager>
|
||||||
{
|
{
|
||||||
TimeManager.Instance.Init();
|
TimeManager.Instance.Init();
|
||||||
|
|
||||||
_totalGameDurationSeconds = TimeManager.Instance.CalculateActualDeveloperTime(_difficulty, 4);
|
_difficultySettings = _difficulty.GetSettings();
|
||||||
|
|
||||||
|
_totalGameDurationSeconds = TimeManager.Instance.CalculateActualDeveloperTime(_difficultySettings, 4);
|
||||||
|
|
||||||
_remainingGameDurationSeconds = _totalGameDurationSeconds;
|
_remainingGameDurationSeconds = _totalGameDurationSeconds;
|
||||||
|
|
||||||
|
@ -131,8 +147,13 @@ public partial class GameManager : MonoBehaviourSingleton<GameManager>
|
||||||
{
|
{
|
||||||
double developerEfficiency = 0.0f;
|
double developerEfficiency = 0.0f;
|
||||||
|
|
||||||
|
double caffeineDrain = _generalNeedDrainScaling * Math.Pow(2, _difficultySettings.CaffeineDrainScaling * GameProgress);
|
||||||
|
double hungerDrain = _generalNeedDrainScaling * Math.Pow(2, _difficultySettings.HungerDrainScaling * GameProgress);
|
||||||
|
double urinationDrain = _generalNeedDrainScaling * Math.Pow(2, _difficultySettings.UrinationDrainScaling * GameProgress);
|
||||||
|
|
||||||
foreach (Developer developer in _developers)
|
foreach (Developer developer in _developers)
|
||||||
{
|
{
|
||||||
|
developer.UpdateStats(caffeineDrain, hungerDrain, urinationDrain);
|
||||||
developer.UpdateEfficiency();
|
developer.UpdateEfficiency();
|
||||||
developerEfficiency += developer.CurrentEfficiency;
|
developerEfficiency += developer.CurrentEfficiency;
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,6 +155,7 @@ public class NPC_Behavior : MonoBehaviour
|
||||||
/// Deletes the current need and its gameobject.
|
/// Deletes the current need and its gameobject.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>bool: wether successfully deleted the gameobject or not</returns>
|
/// <returns>bool: wether successfully deleted the gameobject or not</returns>
|
||||||
|
[ContextMenu("Fullfill Need")]
|
||||||
public bool NeedFullfilled()
|
public bool NeedFullfilled()
|
||||||
{
|
{
|
||||||
Destroy(_currentNeed);
|
Destroy(_currentNeed);
|
||||||
|
|
|
@ -54,11 +54,9 @@ public class TimeManager : MonoBehaviourSingleton<TimeManager>
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Berechnet die (real life) Sekunden, die die Entwickler bei 100% Effizienz benötigen um das Spiel bei gegebener Schwierigkeit zu entwickeln.
|
/// Berechnet die (real life) Sekunden, die die Entwickler bei 100% Effizienz benötigen um das Spiel bei gegebener Schwierigkeit zu entwickeln.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double CalculateActualDeveloperTime(Difficulty difficulty, int developerCount)
|
public double CalculateActualDeveloperTime(DifficultySettings difficultySettings, int developerCount)
|
||||||
{
|
{
|
||||||
DifficultySettings settings = difficulty.GetSettings();
|
return (_daysUntilRelease * _secondsPerDay * developerCount) / difficultySettings.DaysUntilReleaseFactor;
|
||||||
|
|
||||||
return (_daysUntilRelease * _secondsPerDay * developerCount) / settings.DaysUntilReleaseFactor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
|
|
|
@ -9,6 +9,7 @@ namespace Utility
|
||||||
Hard
|
Hard
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
public abstract class DifficultySettings
|
public abstract class DifficultySettings
|
||||||
{
|
{
|
||||||
public Difficulty Difficulty { get; protected set; }
|
public Difficulty Difficulty { get; protected set; }
|
||||||
|
@ -17,6 +18,10 @@ namespace Utility
|
||||||
/// Faktor, wie viel mehr Zeit man halt als die Entwickler bei 100% effizienz benötigen.
|
/// Faktor, wie viel mehr Zeit man halt als die Entwickler bei 100% effizienz benötigen.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double DaysUntilReleaseFactor { get; protected set; }
|
public double DaysUntilReleaseFactor { get; protected set; }
|
||||||
|
|
||||||
|
public double CaffeineDrainScaling { get; protected set; }
|
||||||
|
public double HungerDrainScaling { get; protected set; }
|
||||||
|
public double UrinationDrainScaling { get; protected set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EasyDifficulty : DifficultySettings
|
public class EasyDifficulty : DifficultySettings
|
||||||
|
@ -34,6 +39,9 @@ namespace Utility
|
||||||
{
|
{
|
||||||
Difficulty = Difficulty.Medium;
|
Difficulty = Difficulty.Medium;
|
||||||
DaysUntilReleaseFactor = 1.5;
|
DaysUntilReleaseFactor = 1.5;
|
||||||
|
CaffeineDrainScaling = 1.5;
|
||||||
|
HungerDrainScaling = 1.5;
|
||||||
|
UrinationDrainScaling = 1.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue