mirror of
https://github.com/ConjureETS/DeathBook.git
synced 2026-03-25 13:00:59 +00:00
- More rotation related changes
This commit is contained in:
parent
1f055792f5
commit
2d92c524ed
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 8.7 KiB |
@ -135,7 +135,7 @@ Transform:
|
|||||||
m_PrefabInternal: {fileID: 100100000}
|
m_PrefabInternal: {fileID: 100100000}
|
||||||
m_GameObject: {fileID: 195142}
|
m_GameObject: {fileID: 195142}
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: -.573046267, y: -.809006572, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 495136}
|
- {fileID: 495136}
|
||||||
@ -151,15 +151,13 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 195142}
|
m_GameObject: {fileID: 195142}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: c495d00d780bd3d49866ec60f5efbf66, type: 3}
|
m_Script: {fileID: 11500000, guid: 9c9bbff116cac264d9d7fdcce8cf92e5, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
HighlightedColor: {r: 1, g: 1, b: 1, a: .501960814}
|
HighlightedColor: {r: 1, g: 1, b: 1, a: .258823544}
|
||||||
StartPoint: {fileID: 495136}
|
StartPoint: {fileID: 495136}
|
||||||
EndPoint: {fileID: 495134}
|
EndPoint: {fileID: 495134}
|
||||||
BeamLine: {fileID: 12095142}
|
BeamLine: {fileID: 12095142}
|
||||||
StartObject: {fileID: 0}
|
|
||||||
EndObject: {fileID: 0}
|
|
||||||
--- !u!120 &12095142
|
--- !u!120 &12095142
|
||||||
LineRenderer:
|
LineRenderer:
|
||||||
m_ObjectHideFlags: 1
|
m_ObjectHideFlags: 1
|
||||||
|
|||||||
@ -88,12 +88,14 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: d0907c1567bad554c8b995de3459e517, type: 3}
|
m_Script: {fileID: 11500000, guid: d0907c1567bad554c8b995de3459e517, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
LinkObj: {fileID: 11495142, guid: fab430cecad80ad4391987a06b550cb7, type: 2}
|
gameObjects:
|
||||||
PersonObj: {fileID: 11417564, guid: 7a5b1db47a2c30e419038df40dffa79a, type: 2}
|
LinkObj: {fileID: 11495142, guid: fab430cecad80ad4391987a06b550cb7, type: 2}
|
||||||
NumPeople: 50
|
PersonObj: {fileID: 11417564, guid: 7a5b1db47a2c30e419038df40dffa79a, type: 2}
|
||||||
AvgNumFriends: 8
|
levelOptions:
|
||||||
FriendshipLikeliness: .400000006
|
NumPeople: 50
|
||||||
SphereRadius: 7
|
AvgNumFriends: 8
|
||||||
|
FriendshipLikeliness: .400000006
|
||||||
|
SphereRadius: 7
|
||||||
rotationSpeed: .699999988
|
rotationSpeed: .699999988
|
||||||
torqueForce: 1
|
torqueForce: 1
|
||||||
DetailsPanel: {fileID: 0}
|
DetailsPanel: {fileID: 0}
|
||||||
|
|||||||
@ -395,7 +395,19 @@ MonoBehaviour:
|
|||||||
m_TargetGraphic: {fileID: 11443318}
|
m_TargetGraphic: {fileID: 11443318}
|
||||||
m_OnClick:
|
m_OnClick:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11476684}
|
||||||
|
m_MethodName: KillNode
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine, Version=0.0.0.0,
|
||||||
|
Culture=neutral, PublicKeyToken=null
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
|
m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
|
||||||
Culture=neutral, PublicKeyToken=null
|
Culture=neutral, PublicKeyToken=null
|
||||||
--- !u!114 &11411578
|
--- !u!114 &11411578
|
||||||
@ -457,8 +469,8 @@ MonoBehaviour:
|
|||||||
m_TargetGraphic: {fileID: 11431992}
|
m_TargetGraphic: {fileID: 11431992}
|
||||||
m_HandleRect: {fileID: 22417254}
|
m_HandleRect: {fileID: 22417254}
|
||||||
m_Direction: 2
|
m_Direction: 2
|
||||||
m_Value: 1
|
m_Value: .999378026
|
||||||
m_Size: .427392095
|
m_Size: .427392036
|
||||||
m_NumberOfSteps: 0
|
m_NumberOfSteps: 0
|
||||||
m_OnValueChanged:
|
m_OnValueChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
@ -1093,7 +1105,7 @@ RectTransform:
|
|||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_AnchorMin: {x: .5, y: 1}
|
m_AnchorMin: {x: .5, y: 1}
|
||||||
m_AnchorMax: {x: .5, y: 1}
|
m_AnchorMax: {x: .5, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: -65.9999924}
|
m_AnchoredPosition: {x: 0, y: -65.95298}
|
||||||
m_SizeDelta: {x: 90, y: 132}
|
m_SizeDelta: {x: 90, y: 132}
|
||||||
m_Pivot: {x: .5, y: .5}
|
m_Pivot: {x: .5, y: .5}
|
||||||
--- !u!224 &22462244
|
--- !u!224 &22462244
|
||||||
|
|||||||
@ -62,7 +62,7 @@ Transform:
|
|||||||
m_PrefabInternal: {fileID: 100100000}
|
m_PrefabInternal: {fileID: 100100000}
|
||||||
m_GameObject: {fileID: 193868}
|
m_GameObject: {fileID: 193868}
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: -544.163269, y: -235.973114, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 496448}
|
- {fileID: 496448}
|
||||||
@ -75,8 +75,8 @@ Transform:
|
|||||||
m_PrefabInternal: {fileID: 100100000}
|
m_PrefabInternal: {fileID: 100100000}
|
||||||
m_GameObject: {fileID: 136744}
|
m_GameObject: {fileID: 136744}
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: -9.99999975e-05}
|
m_LocalPosition: {x: 0, y: 0, z: -.00100000005}
|
||||||
m_LocalScale: {x: .899999976, y: .899999976, z: 1}
|
m_LocalScale: {x: .800000012, y: .800000012, z: 1}
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 498100}
|
- {fileID: 498100}
|
||||||
m_Father: {fileID: 410576}
|
m_Father: {fileID: 410576}
|
||||||
|
|||||||
@ -431,12 +431,12 @@ CanvasRenderer:
|
|||||||
RectTransform:
|
RectTransform:
|
||||||
m_PrefabParentObject: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832,
|
m_PrefabParentObject: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832,
|
||||||
type: 2}
|
type: 2}
|
||||||
m_PrefabInternal: {fileID: 1267491657}
|
m_PrefabInternal: {fileID: 1009381200}
|
||||||
--- !u!114 &724043967 stripped
|
--- !u!114 &724043967 stripped
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_PrefabParentObject: {fileID: 11476684, guid: c993e87661906234fba410e55ed66832,
|
m_PrefabParentObject: {fileID: 11476684, guid: c993e87661906234fba410e55ed66832,
|
||||||
type: 2}
|
type: 2}
|
||||||
m_PrefabInternal: {fileID: 1267491657}
|
m_PrefabInternal: {fileID: 1009381200}
|
||||||
m_Script: {fileID: 11500000, guid: 88fb1885d6f8fd6409e3866b7707a12a, type: 3}
|
m_Script: {fileID: 11500000, guid: 88fb1885d6f8fd6409e3866b7707a12a, type: 3}
|
||||||
--- !u!1 &997683484
|
--- !u!1 &997683484
|
||||||
GameObject:
|
GameObject:
|
||||||
@ -500,6 +500,100 @@ CanvasRenderer:
|
|||||||
m_PrefabParentObject: {fileID: 0}
|
m_PrefabParentObject: {fileID: 0}
|
||||||
m_PrefabInternal: {fileID: 0}
|
m_PrefabInternal: {fileID: 0}
|
||||||
m_GameObject: {fileID: 997683484}
|
m_GameObject: {fileID: 997683484}
|
||||||
|
--- !u!1001 &1009381200
|
||||||
|
Prefab:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
m_TransformParent: {fileID: 523974151}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_RootOrder
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchoredPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchoredPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_SizeDelta.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_SizeDelta.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMin.x
|
||||||
|
value: .0299999993
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: .0299999993
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMax.x
|
||||||
|
value: .970000029
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: .970000029
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_Pivot.x
|
||||||
|
value: .5
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_Pivot.y
|
||||||
|
value: .5
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMin.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMax.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
propertyPath: m_AnchorMax.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_ParentPrefab: {fileID: 100100000, guid: c993e87661906234fba410e55ed66832, type: 2}
|
||||||
|
m_IsPrefabParent: 0
|
||||||
--- !u!1 &1057734534
|
--- !u!1 &1057734534
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -651,100 +745,6 @@ Transform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 1
|
||||||
--- !u!1001 &1267491657
|
|
||||||
Prefab:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Modification:
|
|
||||||
m_TransformParent: {fileID: 523974151}
|
|
||||||
m_Modifications:
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalPosition.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalPosition.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalPosition.z
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalRotation.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalRotation.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalRotation.z
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_LocalRotation.w
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_RootOrder
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchoredPosition.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchoredPosition.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_SizeDelta.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_SizeDelta.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMin.x
|
|
||||||
value: .0299999993
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMin.y
|
|
||||||
value: .0299999993
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMax.x
|
|
||||||
value: .970000029
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMax.y
|
|
||||||
value: .970000029
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_Pivot.x
|
|
||||||
value: .5
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22436630, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_Pivot.y
|
|
||||||
value: .5
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMin.y
|
|
||||||
value: .572607875
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMax.x
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 22417254, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
propertyPath: m_AnchorMax.y
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
m_RemovedComponents: []
|
|
||||||
m_ParentPrefab: {fileID: 100100000, guid: c993e87661906234fba410e55ed66832, type: 2}
|
|
||||||
m_IsPrefabParent: 0
|
|
||||||
--- !u!1 &1413393085
|
--- !u!1 &1413393085
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@ -1,11 +1,22 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using DeathBook.Util;
|
||||||
|
using DeathBook.Model;
|
||||||
|
|
||||||
[RequireComponent(typeof(LineRenderer))]
|
[RequireComponent(typeof(LineRenderer))]
|
||||||
public class FriendshipLink : MonoBehaviour
|
public class Link : MonoBehaviour, IObserver
|
||||||
{
|
{
|
||||||
public Color HighlightedColor = new Color(1f, 1f, 1f, 0.5f);
|
private float highlightAlpha = 0.8f;
|
||||||
|
private float defaultAlpha = 0.5f;
|
||||||
|
|
||||||
|
private Color currentDefaultColor;
|
||||||
|
private Color currentHighlightColor;
|
||||||
|
|
||||||
|
private static float defaultScale = 0.03f;
|
||||||
|
private float hightlightScale = 0.2f;
|
||||||
|
|
||||||
|
private bool isHighlighted = false;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private Transform StartPoint;
|
private Transform StartPoint;
|
||||||
|
|
||||||
@ -16,16 +27,28 @@ public class FriendshipLink : MonoBehaviour
|
|||||||
private LineRenderer BeamLine;
|
private LineRenderer BeamLine;
|
||||||
//public ParticleSystem BeamParticles;
|
//public ParticleSystem BeamParticles;
|
||||||
|
|
||||||
[SerializeField]
|
|
||||||
private Transform StartObject;
|
private Transform StartObject;
|
||||||
|
private Transform EndObject;
|
||||||
[SerializeField]
|
|
||||||
private Transform EndObject;
|
private FriendshipLink model;
|
||||||
|
public FriendshipLink Model
|
||||||
|
{
|
||||||
|
get { return model; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
model = value;
|
||||||
|
model.Subscribe(this);
|
||||||
|
|
||||||
|
//Make it between 0.1 and 0.4
|
||||||
|
GetColors(Model.Awareness);
|
||||||
|
hightlightScale = Model.Importance * 0.3f + 0.1f;
|
||||||
|
Highlight(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private float LIFETIME_RATIO = 0.025f;
|
private float LIFETIME_RATIO = 0.025f;
|
||||||
|
|
||||||
private Renderer _renderer;
|
private Renderer _renderer;
|
||||||
private Color _defaultColor;
|
|
||||||
|
|
||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
@ -36,14 +59,21 @@ public class FriendshipLink : MonoBehaviour
|
|||||||
|
|
||||||
_renderer.material = Instantiate(_renderer.material);
|
_renderer.material = Instantiate(_renderer.material);
|
||||||
|
|
||||||
_defaultColor = _renderer.material.GetColor("_TintColor");
|
//_defaultColor = _renderer.material.GetColor("_TintColor");
|
||||||
|
|
||||||
//Activate(false);
|
//Activate(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Notify()
|
||||||
|
{
|
||||||
|
GetColors(Model.Awareness);
|
||||||
|
UpdateBeam();
|
||||||
|
//TODO SR
|
||||||
|
}
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
UpdateVisualEffects();
|
UpdateVisualEffects();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Activate(bool state)
|
public void Activate(bool state)
|
||||||
@ -79,10 +109,35 @@ public class FriendshipLink : MonoBehaviour
|
|||||||
EndObject = destination.transform;
|
EndObject = destination.transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Highlight(bool state, float weight)
|
public void Highlight(bool state)
|
||||||
{
|
{
|
||||||
// For now, the weight does nothing but it should eventually influence the intensity and size of the link
|
; isHighlighted = state;
|
||||||
|
UpdateBeam();
|
||||||
_renderer.material.SetColor("_TintColor", state ? HighlightedColor : _defaultColor);
|
}
|
||||||
}
|
|
||||||
|
private void GetColors(float level)
|
||||||
|
{
|
||||||
|
//If level is 0.0, green [0,1,0].
|
||||||
|
//If level is 0.5, yellow [1,1,0].
|
||||||
|
//If level is 1.0, red [1,0,0].
|
||||||
|
|
||||||
|
float r = 1f;
|
||||||
|
float g = 1f;
|
||||||
|
|
||||||
|
if (level < 0.5f)
|
||||||
|
r = Mathf.Lerp(0, 1, level*2);
|
||||||
|
else
|
||||||
|
g = Mathf.Lerp(1, 0, level * 2 - 1);
|
||||||
|
|
||||||
|
currentDefaultColor = new Color(r, g, 0f, defaultAlpha);
|
||||||
|
currentHighlightColor = new Color(r, g, 0f, highlightAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateBeam()
|
||||||
|
{
|
||||||
|
float width = isHighlighted ? hightlightScale : defaultScale;
|
||||||
|
BeamLine.SetWidth(width, width);
|
||||||
|
|
||||||
|
_renderer.material.SetColor("_TintColor", isHighlighted ? currentHighlightColor : currentDefaultColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: a24d489629b440b4d9fcfafc24239241
|
guid: 9c9bbff116cac264d9d7fdcce8cf92e5
|
||||||
timeCreated: 1439446791
|
timeCreated: 1439591140
|
||||||
licenseType: Free
|
licenseType: Free
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
@ -1,18 +1,61 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using DeathBook.Util;
|
||||||
|
|
||||||
namespace DeathBook.Model
|
namespace DeathBook.Model
|
||||||
{
|
{
|
||||||
public class Friendship
|
public class Friendship : Updatable
|
||||||
{
|
{
|
||||||
public Person friend1, friend2;
|
private Person self;
|
||||||
private int importance; //on a scale from 1 to 100
|
public Person Self { get { return self; } }
|
||||||
|
private Person friend;
|
||||||
|
public Person Friend { get { return friend; } }
|
||||||
|
|
||||||
|
private Friendship other;
|
||||||
|
public Friendship Other { get { return other; } set { other = value; } }
|
||||||
|
|
||||||
public Friendship(Person p1, Person p2, int scale)
|
private FriendshipLink link;
|
||||||
|
public FriendshipLink Link { get { return link; } }
|
||||||
|
|
||||||
|
private bool noticedDeath = false;
|
||||||
|
|
||||||
|
public Friendship(Person self, Person friend, FriendshipLink link)
|
||||||
{
|
{
|
||||||
friend1 = p1;
|
this.self = self;
|
||||||
friend2 = p2;
|
this.friend = friend;
|
||||||
importance = scale;
|
this.link = link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
if (noticedDeath)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//This function is only called when friend is dead
|
||||||
|
//awareness = Mathf.Min(awareness + deltaTime * CalculateWeight(), 1);
|
||||||
|
link.Awareness = Mathf.Min(link.Awareness + deltaTime * 0.1f, 1f);
|
||||||
|
if (link.Awareness >= 1f)
|
||||||
|
{
|
||||||
|
self.NoticeDeath(this);
|
||||||
|
noticedDeath = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns a number between 0 and 1
|
||||||
|
private float CalculateWeight()
|
||||||
|
{
|
||||||
|
float weight = 0;
|
||||||
|
|
||||||
|
weight += link.Importance;
|
||||||
|
//weight += friend.TimeBetweenPosts;
|
||||||
|
|
||||||
|
return weight * 0.1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*internal enum Knowledge
|
||||||
|
{
|
||||||
|
Alive, Doubt, Dead
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
30
Assets/Scripts/Models/FriendshipLink.cs
Normal file
30
Assets/Scripts/Models/FriendshipLink.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DeathBook.Util;
|
||||||
|
|
||||||
|
namespace DeathBook.Model
|
||||||
|
{
|
||||||
|
public class FriendshipLink : Observable
|
||||||
|
{
|
||||||
|
private Person friend1, friend2;
|
||||||
|
public Person Friend1 { get { return friend1; } }
|
||||||
|
public Person Friend2 { get { return friend2; } }
|
||||||
|
|
||||||
|
private float importance; //on a scale from 0 to 1
|
||||||
|
public float Importance { get { return importance; } }
|
||||||
|
|
||||||
|
private float awareness = 0; //on a scale from 0 to 1
|
||||||
|
public float Awareness
|
||||||
|
{
|
||||||
|
get { return awareness; }
|
||||||
|
set { awareness = value; NotifyObservers(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public FriendshipLink(Person p1, Person p2, float importance)
|
||||||
|
{
|
||||||
|
friend1 = p1;
|
||||||
|
friend2 = p2;
|
||||||
|
this.importance = importance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: c495d00d780bd3d49866ec60f5efbf66
|
guid: 5c672f95914b3f04088de0f562834941
|
||||||
timeCreated: 1439307989
|
timeCreated: 1439578834
|
||||||
licenseType: Free
|
licenseType: Free
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
@ -1,24 +1,40 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using DeathBook.Util;
|
||||||
|
|
||||||
namespace DeathBook.Model
|
namespace DeathBook.Model
|
||||||
{
|
{
|
||||||
public class Level
|
public class Level : Observable, Updatable
|
||||||
{
|
{
|
||||||
|
private const float TimeScale = 30f;
|
||||||
|
|
||||||
private int score;
|
private int score;
|
||||||
|
public int Score { get { return score; } }
|
||||||
|
|
||||||
public List<Person> people;
|
private List<Person> people;
|
||||||
public List<Friendship> friendships;
|
public List<Person> People { get { return people; } }
|
||||||
|
private List<FriendshipLink> friendships;
|
||||||
|
public List<FriendshipLink> Friendships { get { return friendships; } }
|
||||||
|
|
||||||
|
//1 = 1 minute
|
||||||
|
private float gameTime;
|
||||||
|
public int GameTime { get { return (int)(gameTime * TimeScale); } }
|
||||||
|
|
||||||
//private Generator gen;
|
private float globalAwareness; //on a scale from 0 to 1
|
||||||
private int gameTime;
|
public float GlobalAwareness { get { return globalAwareness; } }
|
||||||
private int globalAwareness;
|
|
||||||
|
|
||||||
public Level(List<Person> people, List<Friendship> friendships)
|
public Level(List<Person> people, List<FriendshipLink> friendships)
|
||||||
{
|
{
|
||||||
this.people = people;
|
this.people = people;
|
||||||
this.friendships = friendships;
|
this.friendships = friendships;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
gameTime += deltaTime;
|
||||||
|
NotifyObservers();
|
||||||
|
|
||||||
|
//TODO Global awareness - start trends
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,9 @@ namespace DeathBook.Model
|
|||||||
private float probability;
|
private float probability;
|
||||||
private float radius;
|
private float radius;
|
||||||
|
|
||||||
|
private const float minConnTime = 3;
|
||||||
|
private const float maxConnTime = 20;
|
||||||
|
|
||||||
public Level GenerateLevel(int numPeople, int avgFriends, float probability, float radius)
|
public Level GenerateLevel(int numPeople, int avgFriends, float probability, float radius)
|
||||||
{
|
{
|
||||||
this.numPeople = numPeople;
|
this.numPeople = numPeople;
|
||||||
@ -18,7 +21,7 @@ namespace DeathBook.Model
|
|||||||
this.radius = radius;
|
this.radius = radius;
|
||||||
|
|
||||||
List<Person> people = CreatePeople();
|
List<Person> people = CreatePeople();
|
||||||
List<Friendship> friendships = CreateFriendships(people);
|
List<FriendshipLink> friendships = CreateFriendships(people);
|
||||||
|
|
||||||
return new Level(people, friendships);
|
return new Level(people, friendships);
|
||||||
}
|
}
|
||||||
@ -48,7 +51,8 @@ namespace DeathBook.Model
|
|||||||
x = Mathf.Cos(longitude) * r;
|
x = Mathf.Cos(longitude) * r;
|
||||||
y = Mathf.Sin(longitude) * r;
|
y = Mathf.Sin(longitude) * r;
|
||||||
|
|
||||||
p = new Person(i, x, y, z);
|
p = CreatePerson(i, x, y, z);
|
||||||
|
|
||||||
people.Add(p);
|
people.Add(p);
|
||||||
|
|
||||||
z -= dz;
|
z -= dz;
|
||||||
@ -56,16 +60,12 @@ namespace DeathBook.Model
|
|||||||
longitude += dlong;
|
longitude += dlong;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log("People: " + people.Count);
|
|
||||||
|
|
||||||
return people;
|
return people;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Friendship> CreateFriendships(List<Person> people)
|
private List<FriendshipLink> CreateFriendships(List<Person> people)
|
||||||
{
|
{
|
||||||
Debug.Log("Creating friendships" + probability);
|
List<FriendshipLink> friendships = new List<FriendshipLink>();
|
||||||
|
|
||||||
List<Friendship> friendships = new List<Friendship>();
|
|
||||||
Person p1, p2;
|
Person p1, p2;
|
||||||
|
|
||||||
int totalCount = people.Count;
|
int totalCount = people.Count;
|
||||||
@ -76,7 +76,7 @@ namespace DeathBook.Model
|
|||||||
for (int i = 0; i < totalCount; i++)
|
for (int i = 0; i < totalCount; i++)
|
||||||
{
|
{
|
||||||
p1 = people[i];
|
p1 = people[i];
|
||||||
missing = avgConnections - p1.numFriends; // TODO Add randomness
|
missing = avgConnections - p1.FriendCount; // TODO Add randomness
|
||||||
|
|
||||||
if (missing <= 0)
|
if (missing <= 0)
|
||||||
continue;
|
continue;
|
||||||
@ -86,7 +86,7 @@ namespace DeathBook.Model
|
|||||||
for (int j = i+1; j < totalCount; j++)
|
for (int j = i+1; j < totalCount; j++)
|
||||||
{
|
{
|
||||||
p2 = people[j];
|
p2 = people[j];
|
||||||
if (p2.numFriends < avgConnections * 1.2)
|
if (p2.FriendCount < avgConnections * 1.2)
|
||||||
list.AddLast(new DistanceNode(p1, p2));
|
list.AddLast(new DistanceNode(p1, p2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,17 +112,33 @@ namespace DeathBook.Model
|
|||||||
list.Remove(smallest);
|
list.Remove(smallest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Debug.Log(friendships.Count);
|
|
||||||
return friendships;
|
return friendships;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Friendship CreateFriendship(Person p1, Person p2)
|
private FriendshipLink CreateFriendship(Person p1, Person p2)
|
||||||
{
|
{
|
||||||
Friendship f = new Friendship(p1, p2, Random.Range(1,100));
|
FriendshipLink f = new FriendshipLink(p1, p2, Random.value);
|
||||||
p1.AddFriendship(f);
|
Friendship f1 = new Friendship(p1, p2, f);
|
||||||
p2.AddFriendship(f);
|
Friendship f2 = new Friendship(p2, p1, f);
|
||||||
|
f1.Other = f2;
|
||||||
|
f2.Other = f1;
|
||||||
|
|
||||||
|
p1.AddFriendship(f1);
|
||||||
|
p2.AddFriendship(f2);
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Person CreatePerson(int id, float x, float y, float z)
|
||||||
|
{
|
||||||
|
Vector3 pos = new Vector3(x, y, z);
|
||||||
|
//Vector2 times =
|
||||||
|
|
||||||
|
Person p = new Person(id, pos);
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class DistanceNode
|
internal class DistanceNode
|
||||||
@ -133,19 +149,7 @@ namespace DeathBook.Model
|
|||||||
public DistanceNode(Person p1, Person p2)
|
public DistanceNode(Person p1, Person p2)
|
||||||
{
|
{
|
||||||
p = p2;
|
p = p2;
|
||||||
dist = (p2.initialPosition - p1.initialPosition).sqrMagnitude;
|
dist = (p2.InitialPosition - p1.InitialPosition).sqrMagnitude;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 1. Friendship urgency - 0-1
|
|
||||||
* Number of friends missing
|
|
||||||
* VS number of nodes left
|
|
||||||
*
|
|
||||||
* 2. Friendship possibility
|
|
||||||
* Closeness
|
|
||||||
* 0 < distance^2 < root(2)*rSq < 4*rSq
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|||||||
23
Assets/Scripts/Models/LevelManager.cs
Normal file
23
Assets/Scripts/Models/LevelManager.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace DeathBook.Model
|
||||||
|
{
|
||||||
|
public class LevelManager
|
||||||
|
{
|
||||||
|
private static LevelManager instance = new LevelManager();
|
||||||
|
public static LevelManager Instance { get {return instance; } }
|
||||||
|
|
||||||
|
private Level level = null;
|
||||||
|
public Level GameLevel { get { return level; } }
|
||||||
|
|
||||||
|
private LevelGenerator gen = new LevelGenerator();
|
||||||
|
|
||||||
|
private LevelManager() {}
|
||||||
|
|
||||||
|
public void NewLevel(int numPeople, int avgFriends, float probability, float radius)
|
||||||
|
{
|
||||||
|
level = gen.GenerateLevel(numPeople, avgFriends, probability, radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/Scripts/Models/LevelManager.cs.meta
Normal file
12
Assets/Scripts/Models/LevelManager.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ccfb5fe3d9ad971499b807bde15217c4
|
||||||
|
timeCreated: 1439591141
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -1,92 +1,124 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System;
|
using System;
|
||||||
|
using DeathBook.Util;
|
||||||
|
|
||||||
namespace DeathBook.Model
|
namespace DeathBook.Model
|
||||||
{
|
{
|
||||||
public class Person : Observable
|
public class Person : Observable, Updatable
|
||||||
{
|
{
|
||||||
|
public Action OnSelected;
|
||||||
|
|
||||||
public int id;
|
public int id;
|
||||||
private string name;
|
public int Id { get { return id; } }
|
||||||
private List<Friendship> friendList = new List<Friendship>();
|
|
||||||
public Vector3 initialPosition;
|
private string firstName;
|
||||||
public int numFriends;
|
private string lastName;
|
||||||
|
public string Name { get { return firstName + " " + lastName; } }
|
||||||
|
public string FirstName { get { return firstName; } }
|
||||||
|
|
||||||
|
private Vector3 initialPosition;
|
||||||
|
public Vector3 InitialPosition { get { return initialPosition; } }
|
||||||
|
|
||||||
|
private List<Friendship> friendsList = new List<Friendship>();
|
||||||
|
public List<Friendship> FriendList { get { return friendsList; } }
|
||||||
|
private List<Friendship> deadFriendsList = new List<Friendship>();
|
||||||
|
public List<Friendship> DeadFriendList { get { return deadFriendsList; } }
|
||||||
|
|
||||||
|
private int numAliveFriends = 0;
|
||||||
|
private int numDeadFriends = 0;
|
||||||
|
private int friendCount = 0;
|
||||||
|
public int FriendCount { get { return friendCount; } }
|
||||||
|
|
||||||
private int timeBetweenPosts; // f = 1/T;
|
private int timeBetweenPosts; // f = 1/T;
|
||||||
private int connectionTime;
|
public int TimeBetweenPosts { get { return timeBetweenPosts; } }
|
||||||
private int disconnectionTime;
|
|
||||||
private int awarenessLevel;
|
|
||||||
private bool alive;
|
|
||||||
|
|
||||||
private int happiness;
|
private float connectionTime;
|
||||||
private bool connected;
|
public float ConnectionTime { get { return connectionTime; } }
|
||||||
|
|
||||||
private Sprite picture;
|
private float disconnectionTime;
|
||||||
|
public float DisconnectionTime { get { return disconnectionTime; } }
|
||||||
|
|
||||||
//private Node node;
|
private float awarenessLevel = 0; //on a scale from 0 to 1
|
||||||
|
public float AwarenessLevel { get { return awarenessLevel; } }
|
||||||
|
|
||||||
public string Name
|
private bool alive = true;
|
||||||
{
|
public bool Alive { get { return alive; } }
|
||||||
get { return name; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Alive
|
private bool online = true;
|
||||||
{
|
public bool Online { get { return online; } }
|
||||||
get { return alive; }
|
|
||||||
}
|
private Sprite picture;
|
||||||
|
public Sprite Picture { get { return picture; } }
|
||||||
|
|
||||||
public int AwarenessLevel
|
|
||||||
{
|
|
||||||
get { return awarenessLevel; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Friendship> FriendList
|
public Person(int id, Vector3 pos)
|
||||||
{
|
|
||||||
get { return friendList; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int FriendsCount
|
|
||||||
{
|
|
||||||
get { return numFriends; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Online
|
|
||||||
{
|
|
||||||
get { return connected; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Sprite Picture
|
|
||||||
{
|
|
||||||
get { return picture; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Person(int id, float x, float y, float z)
|
|
||||||
{
|
{
|
||||||
this.id = id;
|
this.id = id;
|
||||||
initialPosition = new Vector3(x, y, z);
|
initialPosition = pos;
|
||||||
alive = true;
|
|
||||||
|
|
||||||
// For testing purposes
|
// TODO Use names from db
|
||||||
picture = UnityEngine.Random.Range(0, 2) == 0 ? PictureGenerator.GetFemalePicture() : PictureGenerator.GetMalePicture();
|
firstName = "Mark";
|
||||||
|
lastName = "Zuckerberg";
|
||||||
|
|
||||||
// Temporary
|
// For testing purposes
|
||||||
name = String.Format("Firstname{0} Lastname{0}", id);
|
picture = UnityEngine.Random.Range(0, 2) == 0 ? PictureGenerator.GetFemalePicture() : PictureGenerator.GetMalePicture();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddFriendship(Friendship f)
|
public void AddFriendship(Friendship f)
|
||||||
{
|
{
|
||||||
friendList.Add(f);
|
friendsList.Add(f);
|
||||||
numFriends++;
|
numAliveFriends++;
|
||||||
|
friendCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool isConnected(int time)
|
public void NotifyFriendWasKilled(Friendship f)
|
||||||
{
|
{
|
||||||
return disconnectionTime > time && time > connectionTime;
|
//Debug.Log("I am " + id + " and my friend " + f.Friend.Id + " was killed");
|
||||||
|
numAliveFriends--;
|
||||||
|
numDeadFriends++;
|
||||||
|
deadFriendsList.Add(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int calculateWeight()
|
public void Kill()
|
||||||
{
|
{
|
||||||
//friendCount * ____ + 1/timeBetweenPosts + }
|
//Debug.Log("Person " + id + " died!");
|
||||||
return 0;
|
alive = false;
|
||||||
|
foreach (Friendship f in friendsList)
|
||||||
|
f.Friend.NotifyFriendWasKilled(f.Other);
|
||||||
|
NotifyObservers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void NoticeDeath(Friendship f)
|
||||||
|
{
|
||||||
|
//TODO apply more rules here
|
||||||
|
awarenessLevel = Mathf.Min(AwarenessLevel + 0.2f, 1f);
|
||||||
|
//Debug.Log("I am " + id + " and I know my friend " + f.Friend.Id + " was killed.. " + AwarenessLevel);
|
||||||
|
//TODO remove from dead friends list to accelerate
|
||||||
|
NotifyObservers();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
//TODO Update if connected
|
||||||
|
int time = LevelManager.Instance.GameLevel.GameTime;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//The following actions are only performed if user is online
|
||||||
|
if (!Online)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (Friendship f in deadFriendsList)
|
||||||
|
f.Update(deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SelectNode()
|
||||||
|
{
|
||||||
|
if (OnSelected != null)
|
||||||
|
{
|
||||||
|
OnSelected();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
32
Assets/Scripts/Models/Utils.cs
Normal file
32
Assets/Scripts/Models/Utils.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DeathBook.Model
|
||||||
|
{
|
||||||
|
public class Utils
|
||||||
|
{
|
||||||
|
public static void Test()
|
||||||
|
{
|
||||||
|
float mean = 50;
|
||||||
|
float range = 50;
|
||||||
|
int numSteps = 2;
|
||||||
|
|
||||||
|
int numTries = 100;
|
||||||
|
|
||||||
|
for (int i = 0; i < numTries; i++)
|
||||||
|
{
|
||||||
|
Debug.Log(GetRandomValue(mean, range, numSteps));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float GetRandomValue(float mean, float range, int numSteps)
|
||||||
|
{
|
||||||
|
float sum = 0;
|
||||||
|
for (int i = 0; i < numSteps; i++)
|
||||||
|
{
|
||||||
|
sum += Random.value;
|
||||||
|
}
|
||||||
|
return (sum / numSteps * 2 - 1) * range + mean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/Scripts/Models/Utils.cs.meta
Normal file
12
Assets/Scripts/Models/Utils.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 710c7285af897124a8e7e5c5ecf05109
|
||||||
|
timeCreated: 1439506723
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -5,14 +5,27 @@ using DeathBook.Model;
|
|||||||
|
|
||||||
public class NetworkingSphere : MonoBehaviour
|
public class NetworkingSphere : MonoBehaviour
|
||||||
{
|
{
|
||||||
public FriendshipLink LinkObj;
|
public GameObjectsOptions gameObjects = new GameObjectsOptions();
|
||||||
public PersonNode PersonObj;
|
public LevelOptions levelOptions = new LevelOptions();
|
||||||
public int NumPeople = 50;
|
private NetworkDisconnection sphere;
|
||||||
public int AvgNumFriends = 20;
|
|
||||||
public float FriendshipLikeliness = 0.4f;
|
|
||||||
public float SphereRadius = 1f;
|
|
||||||
public float rotationSpeed = 0.7f;
|
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
public class GameObjectsOptions
|
||||||
|
{
|
||||||
|
public Link LinkObj;
|
||||||
|
public PersonNode PersonObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
public class LevelOptions
|
||||||
|
{
|
||||||
|
public int NumPeople = 50;
|
||||||
|
public int AvgNumFriends = 20;
|
||||||
|
public float FriendshipLikeliness = 0.4f;
|
||||||
|
public float SphereRadius = 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float rotationSpeed = 0.7f;
|
||||||
public float torqueForce = 50f;
|
public float torqueForce = 50f;
|
||||||
|
|
||||||
public PersonDetailsPanel DetailsPanel;
|
public PersonDetailsPanel DetailsPanel;
|
||||||
@ -21,23 +34,35 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
private Vector3 delta = new Vector3();
|
private Vector3 delta = new Vector3();
|
||||||
private Rigidbody rb;
|
private Rigidbody rb;
|
||||||
|
|
||||||
|
private LevelManager manager;
|
||||||
|
|
||||||
private PersonNode[] peopleNodes;
|
private PersonNode[] peopleNodes;
|
||||||
//TODO private Friendship[] friendships;
|
|
||||||
|
|
||||||
private PersonNode _selectedNode;
|
private PersonNode _selectedNode;
|
||||||
|
|
||||||
|
// Used to disable the physics when the user has clicked on a node
|
||||||
|
private bool _isRotatingTowardsNode = false;
|
||||||
|
|
||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
LevelGenerator lGen = new LevelGenerator();
|
manager = LevelManager.Instance;
|
||||||
Level lvl = lGen.GenerateLevel(NumPeople, AvgNumFriends, FriendshipLikeliness, SphereRadius);
|
manager.NewLevel(levelOptions.NumPeople, levelOptions.AvgNumFriends, levelOptions.FriendshipLikeliness, levelOptions.SphereRadius);
|
||||||
|
Level lvl = manager.GameLevel;
|
||||||
|
|
||||||
InstantiateNodes(lvl);
|
InstantiateNodes(lvl);
|
||||||
AssignLinks(lvl);
|
AssignLinks(lvl);
|
||||||
rb = GetComponent<Rigidbody>();
|
rb = GetComponent<Rigidbody>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*void OnGUI()
|
||||||
|
{
|
||||||
|
GUI.Button(new Rect(10, 100, 400, 40), manager.GameLevel.GameTime + "");
|
||||||
|
}*/
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
|
manager.GameLevel.Update(Time.deltaTime);
|
||||||
|
|
||||||
//TEMPORARY QUICK FIX: Even though we are never moving the sphere, it starts moving as soon as it stops rotating
|
//TEMPORARY QUICK FIX: Even though we are never moving the sphere, it starts moving as soon as it stops rotating
|
||||||
transform.position = Vector3.zero;
|
transform.position = Vector3.zero;
|
||||||
|
|
||||||
@ -48,12 +73,12 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(screenMousePos);
|
Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(screenMousePos);
|
||||||
|
|
||||||
// If the world position of the mouse is greater than the radius of the sphere, we are outside
|
// If the world position of the mouse is greater than the radius of the sphere, we are outside
|
||||||
if (Mathf.Sqrt(worldMousePos.x * worldMousePos.x + worldMousePos.y * worldMousePos.y) > SphereRadius + 1f)
|
if (Mathf.Sqrt(worldMousePos.x * worldMousePos.x + worldMousePos.y * worldMousePos.y) > levelOptions.SphereRadius + 1f)
|
||||||
{
|
{
|
||||||
transform.Rotate(Vector3.one * Time.deltaTime * rotationSpeed);
|
transform.Rotate(Vector3.one * Time.deltaTime * rotationSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
//when right btn clicked, call MoveSphere
|
//when right btn clicked, call the change rotation
|
||||||
if (Input.GetMouseButtonDown(1))
|
if (Input.GetMouseButtonDown(1))
|
||||||
{
|
{
|
||||||
dragging = true;
|
dragging = true;
|
||||||
@ -64,20 +89,21 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
delta = new Vector3();
|
delta = new Vector3();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dragging)
|
if (dragging && !_isRotatingTowardsNode)
|
||||||
{
|
{
|
||||||
MoveSphere();
|
MoveSphere();
|
||||||
}
|
}
|
||||||
|
|
||||||
//scroll
|
|
||||||
if (Input.GetAxis("Mouse ScrollWheel") != 0)
|
//scroll
|
||||||
{
|
if (Input.GetAxis("Mouse ScrollWheel") != 0)
|
||||||
// if (Camera.main.ScreenToViewportPoint(Input.mousePosition) < new Vector3(1,1,1))
|
{
|
||||||
if (Camera.main.ScreenToViewportPoint(Input.mousePosition).x < 1)
|
// if (Camera.main.ScreenToViewportPoint(Input.mousePosition) < new Vector3(1,1,1))
|
||||||
{
|
if (Camera.main.ScreenToViewportPoint(Input.mousePosition).x < 1)
|
||||||
Camera.main.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * 10f;
|
{
|
||||||
}
|
Camera.main.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * 10f;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveSphere()
|
void MoveSphere()
|
||||||
@ -97,13 +123,13 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
|
|
||||||
private void InstantiateNodes(Level lvl)
|
private void InstantiateNodes(Level lvl)
|
||||||
{
|
{
|
||||||
peopleNodes = new PersonNode[lvl.people.Count];
|
peopleNodes = new PersonNode[lvl.People.Count];
|
||||||
|
|
||||||
for (int i = 0; i < lvl.people.Count; i++)
|
for (int i = 0; i < lvl.People.Count; i++)
|
||||||
{
|
{
|
||||||
Person person = lvl.people[i];
|
Person person = lvl.People[i];
|
||||||
|
|
||||||
PersonNode pInst = Instantiate(PersonObj, person.initialPosition, Quaternion.identity) as PersonNode;
|
PersonNode pInst = Instantiate(gameObjects.PersonObj, person.InitialPosition, Quaternion.identity) as PersonNode;
|
||||||
|
|
||||||
pInst.OnClicked += OnNodeClicked;
|
pInst.OnClicked += OnNodeClicked;
|
||||||
|
|
||||||
@ -116,6 +142,8 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
|
|
||||||
private void OnNodeClicked(PersonNode node)
|
private void OnNodeClicked(PersonNode node)
|
||||||
{
|
{
|
||||||
|
if (node == _selectedNode) return;
|
||||||
|
|
||||||
if (_selectedNode != null)
|
if (_selectedNode != null)
|
||||||
{
|
{
|
||||||
_selectedNode.Select(false);
|
_selectedNode.Select(false);
|
||||||
@ -132,11 +160,12 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
|
|
||||||
private void AssignLinks(Level lvl)
|
private void AssignLinks(Level lvl)
|
||||||
{
|
{
|
||||||
foreach (Friendship f in lvl.friendships)
|
foreach (FriendshipLink f in lvl.Friendships)
|
||||||
{
|
{
|
||||||
FriendshipLink link = Instantiate(LinkObj) as FriendshipLink;
|
Link link = Instantiate(gameObjects.LinkObj) as Link;
|
||||||
int id1 = f.friend1.id;
|
int id1 = f.Friend1.id;
|
||||||
int id2 = f.friend2.id;
|
int id2 = f.Friend2.id;
|
||||||
|
link.Model = f;
|
||||||
link.AttachToObjects(peopleNodes[id1].gameObject, peopleNodes[id2].gameObject);
|
link.AttachToObjects(peopleNodes[id1].gameObject, peopleNodes[id2].gameObject);
|
||||||
|
|
||||||
// Temporary stuff, for testing
|
// Temporary stuff, for testing
|
||||||
@ -171,6 +200,9 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
|
|
||||||
private IEnumerator RotateTowardsNodeCoroutine(PersonNode node)
|
private IEnumerator RotateTowardsNodeCoroutine(PersonNode node)
|
||||||
{
|
{
|
||||||
|
_isRotatingTowardsNode = true;
|
||||||
|
rb.angularVelocity = Vector3.zero;
|
||||||
|
|
||||||
//Vector3 finalPos = new Vector3(0f, 0f, -SphereRadius);
|
//Vector3 finalPos = new Vector3(0f, 0f, -SphereRadius);
|
||||||
|
|
||||||
Quaternion initialRot = transform.localRotation;
|
Quaternion initialRot = transform.localRotation;
|
||||||
@ -184,10 +216,10 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
Vector3 longDir = nodePos;
|
Vector3 longDir = nodePos;
|
||||||
longDir.y = 0;
|
longDir.y = 0;
|
||||||
|
|
||||||
float longitude = Vector3.Angle(-Vector3.forward, longDir) * (longDir.x < 0 ? -1 : 1);
|
float xAngle = Mathf.Asin(nodePos.normalized.y) * Mathf.Rad2Deg; // Latitude
|
||||||
float latitude = Mathf.Asin(nodePos.normalized.y) * Mathf.Rad2Deg;
|
float yAngle = Vector3.Angle(-Vector3.forward, longDir) * (longDir.x < 0 ? -1 : 1); // Longitude
|
||||||
|
|
||||||
Quaternion finalRot = Quaternion.AngleAxis(-latitude, Vector3.right) * Quaternion.AngleAxis(longitude, Vector3.up);
|
Quaternion finalRot = Quaternion.AngleAxis(-xAngle, Vector3.right) * Quaternion.AngleAxis(yAngle, Vector3.up);
|
||||||
|
|
||||||
float ratio = 0f;
|
float ratio = 0f;
|
||||||
|
|
||||||
@ -199,5 +231,7 @@ public class NetworkingSphere : MonoBehaviour
|
|||||||
|
|
||||||
yield return null;
|
yield return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_isRotatingTowardsNode = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,30 +1,33 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
// Using an abstract class to avoid repeating code, but could be implemented as an interface if inheritance is somehow needed for the subjects
|
namespace DeathBook.Util
|
||||||
public abstract class Observable
|
{
|
||||||
{
|
// Using an abstract class to avoid repeating code, but could be implemented as an interface if inheritance is somehow needed for the subjects
|
||||||
private List<IObserver> observers;
|
public abstract class Observable
|
||||||
|
{
|
||||||
public Observable()
|
private List<IObserver> observers;
|
||||||
{
|
|
||||||
observers = new List<IObserver>();
|
public Observable()
|
||||||
}
|
{
|
||||||
|
observers = new List<IObserver>();
|
||||||
public void Subscribe(IObserver observer)
|
}
|
||||||
{
|
|
||||||
observers.Add(observer);
|
public void Subscribe(IObserver observer)
|
||||||
}
|
{
|
||||||
|
observers.Add(observer);
|
||||||
public void UnSubscribe(IObserver observer)
|
}
|
||||||
{
|
|
||||||
observers.Remove(observer);
|
public void UnSubscribe(IObserver observer)
|
||||||
}
|
{
|
||||||
|
observers.Remove(observer);
|
||||||
public void NotifyObservers()
|
}
|
||||||
{
|
|
||||||
foreach (IObserver observer in observers)
|
public void NotifyObservers()
|
||||||
{
|
{
|
||||||
observer.Notify();
|
foreach (IObserver observer in observers)
|
||||||
}
|
{
|
||||||
}
|
observer.Notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
public interface IObserver
|
namespace DeathBook.Util
|
||||||
{
|
{
|
||||||
void Notify();
|
public interface IObserver
|
||||||
|
{
|
||||||
|
void Notify();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
9
Assets/Scripts/ObserverPattern/IUpdatable.cs
Normal file
9
Assets/Scripts/ObserverPattern/IUpdatable.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace DeathBook.Util
|
||||||
|
{
|
||||||
|
public interface Updatable
|
||||||
|
{
|
||||||
|
void Update(float deltaTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/Scripts/ObserverPattern/IUpdatable.cs.meta
Normal file
12
Assets/Scripts/ObserverPattern/IUpdatable.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 897f94f455c7ce64394a644bd3cf070b
|
||||||
|
timeCreated: 1439591140
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -2,6 +2,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using DeathBook.Model;
|
using DeathBook.Model;
|
||||||
|
using DeathBook.Util;
|
||||||
|
|
||||||
public class PersonDetailsPanel : MonoBehaviour, IObserver
|
public class PersonDetailsPanel : MonoBehaviour, IObserver
|
||||||
{
|
{
|
||||||
@ -13,7 +14,7 @@ public class PersonDetailsPanel : MonoBehaviour, IObserver
|
|||||||
public Button XButton;
|
public Button XButton;
|
||||||
public GameObject Container;
|
public GameObject Container;
|
||||||
|
|
||||||
public Image UIFriendPicture;
|
public UIFriendPicture FriendPicture;
|
||||||
|
|
||||||
private PersonNode _node;
|
private PersonNode _node;
|
||||||
private Person _model;
|
private Person _model;
|
||||||
@ -49,6 +50,9 @@ public class PersonDetailsPanel : MonoBehaviour, IObserver
|
|||||||
{
|
{
|
||||||
Name.text = _model.Name;
|
Name.text = _model.Name;
|
||||||
|
|
||||||
|
KillButton.gameObject.SetActive(_model.Alive);
|
||||||
|
WatchButton.gameObject.SetActive(_model.Alive);
|
||||||
|
|
||||||
foreach (Transform picture in FriendsPanel.transform)
|
foreach (Transform picture in FriendsPanel.transform)
|
||||||
{
|
{
|
||||||
Destroy(picture.gameObject);
|
Destroy(picture.gameObject);
|
||||||
@ -67,17 +71,21 @@ public class PersonDetailsPanel : MonoBehaviour, IObserver
|
|||||||
|
|
||||||
for (int i = 0; i < _model.FriendList.Count; i++)
|
for (int i = 0; i < _model.FriendList.Count; i++)
|
||||||
{
|
{
|
||||||
Person friend = _model.FriendList[i].friend1 == _model ? _model.FriendList[i].friend2 : _model.FriendList[i].friend1;
|
Person friend = _model.FriendList[i].Friend;
|
||||||
|
|
||||||
Image friendPicture = Instantiate(UIFriendPicture) as Image;
|
UIFriendPicture friendPicture = Instantiate(FriendPicture) as UIFriendPicture;
|
||||||
|
|
||||||
friendPicture.sprite = friend.Picture;
|
friendPicture.Model = friend;
|
||||||
|
|
||||||
friendPicture.transform.SetParent(FriendsPanel.transform);
|
Image picture = friendPicture.Picture;
|
||||||
friendPicture.rectTransform.anchorMin = new Vector2(0.022f, 1f - (height - 0.01f) * (i + 1) - i * 0.01f);
|
|
||||||
friendPicture.rectTransform.anchorMax = new Vector2(0.26f, (1f - height * i));
|
picture.sprite = friend.Picture;
|
||||||
friendPicture.rectTransform.offsetMin = Vector2.zero;
|
|
||||||
friendPicture.rectTransform.offsetMax = Vector2.zero;
|
picture.transform.SetParent(FriendsPanel.transform);
|
||||||
|
picture.rectTransform.anchorMin = new Vector2(0.022f, 1f - (height - 0.01f) * (i + 1) - i * 0.01f);
|
||||||
|
picture.rectTransform.anchorMax = new Vector2(0.26f, (1f - height * i));
|
||||||
|
picture.rectTransform.offsetMin = Vector2.zero;
|
||||||
|
picture.rectTransform.offsetMax = Vector2.zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,4 +94,9 @@ public class PersonDetailsPanel : MonoBehaviour, IObserver
|
|||||||
Container.SetActive(false);
|
Container.SetActive(false);
|
||||||
_node.Select(false);
|
_node.Select(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void KillNode()
|
||||||
|
{
|
||||||
|
_node.Kill();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,161 +1,178 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DeathBook.Model;
|
using DeathBook.Model;
|
||||||
using System;
|
using DeathBook.Util;
|
||||||
|
using System;
|
||||||
[RequireComponent(typeof(Collider))]
|
|
||||||
public class PersonNode : MonoBehaviour, IObserver
|
[RequireComponent(typeof(Collider))]
|
||||||
{
|
public class PersonNode : MonoBehaviour, IObserver
|
||||||
public Action<PersonNode> OnClicked;
|
{
|
||||||
|
private const float UpdateFrequency = 0.5f;
|
||||||
public Color SelectedColor = Color.blue;
|
private float time = 0;
|
||||||
|
|
||||||
public Color StartColor = Color.green;
|
public Action<PersonNode> OnClicked;
|
||||||
public Color MiddleColor = Color.yellow;
|
|
||||||
public Color EndColor = Color.red;
|
public Color SelectedColor = Color.blue;
|
||||||
|
|
||||||
public Renderer internQuad;
|
public Color StartColor = Color.green;
|
||||||
public Renderer xQuad;
|
public Color MiddleColor = Color.yellow;
|
||||||
|
public Color EndColor = Color.red;
|
||||||
private List<FriendshipLink> _links;
|
|
||||||
private bool _highlighted = false;
|
public Renderer internQuad;
|
||||||
private bool _selected = false;
|
public Renderer xQuad;
|
||||||
|
|
||||||
private Person _model;
|
private List<Link> _links;
|
||||||
private Renderer _renderer;
|
private bool _highlighted = false;
|
||||||
private Transform _transform;
|
private bool _selected = false;
|
||||||
|
|
||||||
public Person Model
|
private Person _model;
|
||||||
{
|
private Renderer _renderer;
|
||||||
get { return _model; }
|
private Transform _transform;
|
||||||
set
|
|
||||||
{
|
|
||||||
_model = value;
|
public Person Model
|
||||||
_model.Subscribe(this);
|
{
|
||||||
UpdateInfo();
|
get { return _model; }
|
||||||
SetProfilePicture();
|
set
|
||||||
}
|
{
|
||||||
}
|
_model = value;
|
||||||
|
_model.Subscribe(this);
|
||||||
private void SetProfilePicture()
|
_model.OnSelected += () => { OnClicked(this); };
|
||||||
{
|
UpdateInfo();
|
||||||
internQuad.material.mainTexture = _model.Picture.texture;
|
SetProfilePicture();
|
||||||
internQuad.material.SetTexture("_MainTex", _model.Picture.texture);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Awake()
|
private void SetProfilePicture()
|
||||||
{
|
{
|
||||||
_links = new List<FriendshipLink>();
|
internQuad.material.mainTexture = _model.Picture.texture;
|
||||||
_renderer = GetComponent<Renderer>();
|
internQuad.material.SetTexture("_MainTex", _model.Picture.texture);
|
||||||
_transform = GetComponent<Transform>();
|
}
|
||||||
}
|
|
||||||
|
void Awake()
|
||||||
void Update()
|
{
|
||||||
{
|
_links = new List<Link>();
|
||||||
// Find another way to do it if it lags to much
|
_renderer = GetComponent<Renderer>();
|
||||||
_transform.LookAt(new Vector3(_transform.position.x, _transform.position.y, _transform.position.z + 1));
|
_transform = GetComponent<Transform>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddLink(FriendshipLink link)
|
void Update()
|
||||||
{
|
{
|
||||||
_links.Add(link);
|
time += Time.deltaTime;
|
||||||
}
|
if (time > UpdateFrequency)
|
||||||
|
{
|
||||||
public void Select(bool state)
|
_model.Update(time);
|
||||||
{
|
time = 0;
|
||||||
_selected = state;
|
}
|
||||||
UpdateLinks(state);
|
|
||||||
|
// Find another way to do it if it lags to much
|
||||||
if (state)
|
_transform.LookAt(new Vector3(_transform.position.x, _transform.position.y, _transform.position.z + 1));
|
||||||
{
|
}
|
||||||
_renderer.material.color = SelectedColor;
|
|
||||||
}
|
public void AddLink(Link link)
|
||||||
else
|
{
|
||||||
{
|
_links.Add(link);
|
||||||
UpdateInfo();
|
}
|
||||||
}
|
|
||||||
}
|
public void Select(bool state)
|
||||||
|
{
|
||||||
private void UpdateLinks(bool state)
|
_selected = state;
|
||||||
{
|
UpdateLinks(state);
|
||||||
foreach (FriendshipLink link in _links)
|
|
||||||
{
|
if (state)
|
||||||
link.Highlight(state, 1f);
|
{
|
||||||
}
|
_renderer.material.color = SelectedColor;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
public void Notify()
|
{
|
||||||
{
|
UpdateInfo();
|
||||||
UpdateInfo();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateInfo()
|
private void UpdateLinks(bool isHighlighted)
|
||||||
{
|
{
|
||||||
//If dead -> set offline until all friends are aware, then add a big red X to profile pic
|
foreach (Link link in _links)
|
||||||
if (_model.Alive)
|
{
|
||||||
{
|
link.Highlight(isHighlighted);
|
||||||
xQuad.enabled = false;
|
}
|
||||||
SetColors();
|
}
|
||||||
}
|
|
||||||
else
|
public void Kill()
|
||||||
{
|
{
|
||||||
xQuad.enabled = true;
|
_model.Kill();
|
||||||
gameObject.GetComponent<Renderer>().material.color = new Color32(50, 50, 50, 1);
|
}
|
||||||
UpdateLinks(false);
|
|
||||||
}
|
public void Notify()
|
||||||
}
|
{
|
||||||
|
//Debug.Log("Received notification! " + Model.AwarenessLevel);
|
||||||
private void SetColors()
|
UpdateInfo();
|
||||||
{
|
}
|
||||||
//set greyed out for offline
|
|
||||||
if (_model.Online)
|
private void UpdateInfo()
|
||||||
{
|
{
|
||||||
internQuad.material.color = new Color32(255, 255, 255, 1);
|
//If dead -> set offline until all friends are aware, then add a big red X to profile pic
|
||||||
}
|
if (_model.Alive)
|
||||||
else
|
{
|
||||||
{
|
xQuad.enabled = false;
|
||||||
internQuad.material.color = new Color32(80, 80, 80, 1);
|
SetColors();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (_model.AwarenessLevel < 0.5)
|
{
|
||||||
{
|
xQuad.enabled = true;
|
||||||
gameObject.GetComponent<Renderer>().material.color = Color.Lerp(StartColor, MiddleColor, _model.AwarenessLevel * 2);
|
gameObject.GetComponent<Renderer>().material.color = new Color32(50, 50, 50, 1);
|
||||||
}
|
UpdateLinks(false);
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
gameObject.GetComponent<Renderer>().material.color = Color.Lerp(MiddleColor, EndColor, _model.AwarenessLevel * 2 - 1);
|
|
||||||
}
|
private void SetColors()
|
||||||
}
|
{
|
||||||
|
//set greyed out for offline
|
||||||
void OnMouseEnter()
|
if (_model.Online)
|
||||||
{
|
{
|
||||||
if (!_selected && !_highlighted)
|
internQuad.material.color = new Color32(255, 255, 255, 1);
|
||||||
{
|
}
|
||||||
UpdateLinks(true);
|
else
|
||||||
}
|
{
|
||||||
|
internQuad.material.color = new Color32(80, 80, 80, 1);
|
||||||
_highlighted = true;
|
}
|
||||||
}
|
|
||||||
|
if (_model.AwarenessLevel < 0.5)
|
||||||
void OnMouseExit()
|
{
|
||||||
{
|
gameObject.GetComponent<Renderer>().material.color = Color.Lerp(StartColor, MiddleColor, _model.AwarenessLevel * 2);
|
||||||
if (!_selected)
|
}
|
||||||
{
|
else
|
||||||
UpdateLinks(false);
|
{
|
||||||
}
|
gameObject.GetComponent<Renderer>().material.color = Color.Lerp(MiddleColor, EndColor, _model.AwarenessLevel * 2 - 1);
|
||||||
|
}
|
||||||
_highlighted = false;
|
}
|
||||||
}
|
|
||||||
|
void OnMouseEnter()
|
||||||
void OnMouseDown()
|
{
|
||||||
{
|
if (!_selected && !_highlighted)
|
||||||
// The sphere should be subscribed to this event and update the data accordingly
|
{
|
||||||
if (OnClicked != null)
|
UpdateLinks(true);
|
||||||
{
|
}
|
||||||
OnClicked(this);
|
|
||||||
}
|
_highlighted = true;
|
||||||
|
}
|
||||||
Debug.Log("clicked");
|
|
||||||
}
|
void OnMouseExit()
|
||||||
}
|
{
|
||||||
|
if (!_selected)
|
||||||
|
{
|
||||||
|
UpdateLinks(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
_highlighted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnMouseDown()
|
||||||
|
{
|
||||||
|
// The sphere should be subscribed to this event and update the data accordingly
|
||||||
|
if (OnClicked != null)
|
||||||
|
{
|
||||||
|
OnClicked(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
33
Assets/Scripts/UIFriendPicture.cs
Normal file
33
Assets/Scripts/UIFriendPicture.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using System.Collections;
|
||||||
|
using DeathBook.Model;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
[RequireComponent(typeof(Image))]
|
||||||
|
public class UIFriendPicture : MonoBehaviour
|
||||||
|
{
|
||||||
|
private Person _model;
|
||||||
|
|
||||||
|
public Person Model
|
||||||
|
{
|
||||||
|
get { return _model; }
|
||||||
|
set { _model = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private Image _picture;
|
||||||
|
|
||||||
|
public Image Picture
|
||||||
|
{
|
||||||
|
get { return _picture; }
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awake()
|
||||||
|
{
|
||||||
|
_picture = GetComponent<Image>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnClick()
|
||||||
|
{
|
||||||
|
_model.SelectNode();
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/Scripts/UIFriendPicture.cs.meta
Normal file
12
Assets/Scripts/UIFriendPicture.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 343d57f2bac42ae48ba9722c53e5526f
|
||||||
|
timeCreated: 1439693427
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
1296
Assets/Tests/Gameplay_SR.unity
Normal file
1296
Assets/Tests/Gameplay_SR.unity
Normal file
File diff suppressed because it is too large
Load Diff
8
Assets/Tests/Gameplay_SR.unity.meta
Normal file
8
Assets/Tests/Gameplay_SR.unity.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 43c96e134d44b1646b218de6f0e4c659
|
||||||
|
timeCreated: 1439592514
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -1,114 +0,0 @@
|
|||||||
using UnityEngine;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using DeathBook.Model;
|
|
||||||
|
|
||||||
public class SphereSR : MonoBehaviour
|
|
||||||
{
|
|
||||||
public FriendshipLink LinkObj;
|
|
||||||
public PersonNode PersonObj;
|
|
||||||
public int NumPeople = 50;
|
|
||||||
public int AvgNumFriends = 20;
|
|
||||||
public float FriendshipLikeliness = 0.4f;
|
|
||||||
public float SphereRadius = 1f;
|
|
||||||
public float rotationSpeed = 0.7f;
|
|
||||||
|
|
||||||
public float torqueForce = 50f;
|
|
||||||
private bool dragging = false;
|
|
||||||
private Vector3 delta = new Vector3();
|
|
||||||
private Rigidbody rb;
|
|
||||||
|
|
||||||
private PersonNode[] peopleNodes;
|
|
||||||
//TODO private Friendship[] friendships;
|
|
||||||
private GameObject[] nodes;
|
|
||||||
|
|
||||||
void Awake()
|
|
||||||
{
|
|
||||||
LevelGenerator lGen = new LevelGenerator();
|
|
||||||
Level lvl = lGen.GenerateLevel(NumPeople, AvgNumFriends, FriendshipLikeliness, SphereRadius);
|
|
||||||
|
|
||||||
InstantiateNodes(lvl);
|
|
||||||
AssignLinks(lvl);
|
|
||||||
rb = GetComponent<Rigidbody>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update()
|
|
||||||
{
|
|
||||||
Vector3 screenMousePos = Input.mousePosition;
|
|
||||||
|
|
||||||
screenMousePos.z = transform.position.z - Camera.main.transform.position.z;
|
|
||||||
|
|
||||||
Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(screenMousePos);
|
|
||||||
|
|
||||||
// If the world position of the mouse is greater than the radius of the sphere, we are outside
|
|
||||||
if (Mathf.Sqrt(worldMousePos.x * worldMousePos.x + worldMousePos.y * worldMousePos.y) > SphereRadius + 1f)
|
|
||||||
{
|
|
||||||
transform.Rotate(Vector3.one * Time.deltaTime * rotationSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
//when right btn clicked, call the chnge rotation
|
|
||||||
if (Input.GetMouseButtonDown(1))
|
|
||||||
{
|
|
||||||
dragging = true;
|
|
||||||
}
|
|
||||||
else if (Input.GetMouseButtonUp(1))
|
|
||||||
{
|
|
||||||
dragging = false;
|
|
||||||
delta = new Vector3();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dragging)
|
|
||||||
{
|
|
||||||
MoveSphere();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveSphere()
|
|
||||||
{
|
|
||||||
float deltaX = Input.GetAxis("Mouse X");
|
|
||||||
float deltaY = Input.GetAxis("Mouse Y");
|
|
||||||
if (deltaX == 0 && deltaY == 0)
|
|
||||||
{
|
|
||||||
delta = new Vector3();
|
|
||||||
rb.angularVelocity *= 0.8f;
|
|
||||||
}
|
|
||||||
delta += new Vector3(deltaX, deltaY, 0);
|
|
||||||
//rigidbody.AddTorque();
|
|
||||||
rb.AddTorque(Vector3.down * delta.x * torqueForce * Time.deltaTime, ForceMode.Impulse);
|
|
||||||
rb.AddTorque(Vector3.right * delta.y * torqueForce * Time.deltaTime, ForceMode.Impulse);
|
|
||||||
Debug.Log(delta.x + ", " + delta.y);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InstantiateNodes(Level lvl)
|
|
||||||
{
|
|
||||||
peopleNodes = new PersonNode[lvl.people.Count];
|
|
||||||
|
|
||||||
int ctr = 0;
|
|
||||||
foreach (Person p in lvl.people)
|
|
||||||
{
|
|
||||||
|
|
||||||
PersonNode pInst = Instantiate(PersonObj, p.initialPosition, Quaternion.identity) as PersonNode;
|
|
||||||
|
|
||||||
pInst.transform.parent = this.transform;
|
|
||||||
|
|
||||||
peopleNodes[ctr++] = pInst;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AssignLinks(Level lvl)
|
|
||||||
{
|
|
||||||
foreach (Friendship f in lvl.friendships)
|
|
||||||
{
|
|
||||||
FriendshipLink link = Instantiate(LinkObj) as FriendshipLink;
|
|
||||||
int id1 = f.friend1.id;
|
|
||||||
int id2 = f.friend2.id;
|
|
||||||
link.AttachToObjects(peopleNodes[id1].gameObject, peopleNodes[id2].gameObject);
|
|
||||||
|
|
||||||
// Temporary stuff, for testing
|
|
||||||
peopleNodes[id1].AddLink(link);
|
|
||||||
peopleNodes[id2].AddLink(link);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user