mirror of
https://github.com/ConjureETS/DeathBook.git
synced 2026-03-24 04:20:58 +00:00
Implemented level generation.
Signed-off-by: RosimInc <rosim_inc@hotmail.com>
This commit is contained in:
parent
5a01f17045
commit
c42bf9c4a3
9
Assets/Prefabs.meta
Normal file
9
Assets/Prefabs.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d5f769927ebd19846af8f5f75ec7ea05
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1439424313
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
341
Assets/Scenes/Creator.unity
Normal file
341
Assets/Scenes/Creator.unity
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!29 &1
|
||||||
|
SceneSettings:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PVSData:
|
||||||
|
m_PVSObjectsArray: []
|
||||||
|
m_PVSPortalsArray: []
|
||||||
|
m_OcclusionBakeSettings:
|
||||||
|
smallestOccluder: 5
|
||||||
|
smallestHole: .25
|
||||||
|
backfaceThreshold: 100
|
||||||
|
--- !u!104 &2
|
||||||
|
RenderSettings:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Fog: 0
|
||||||
|
m_FogColor: {r: .5, g: .5, b: .5, a: 1}
|
||||||
|
m_FogMode: 3
|
||||||
|
m_FogDensity: .00999999978
|
||||||
|
m_LinearFogStart: 0
|
||||||
|
m_LinearFogEnd: 300
|
||||||
|
m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1}
|
||||||
|
m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1}
|
||||||
|
m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1}
|
||||||
|
m_AmbientIntensity: 1
|
||||||
|
m_AmbientMode: 0
|
||||||
|
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_HaloStrength: .5
|
||||||
|
m_FlareStrength: 1
|
||||||
|
m_FlareFadeSpeed: 3
|
||||||
|
m_HaloTexture: {fileID: 0}
|
||||||
|
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
m_DefaultReflectionMode: 0
|
||||||
|
m_DefaultReflectionResolution: 128
|
||||||
|
m_ReflectionBounces: 1
|
||||||
|
m_ReflectionIntensity: 1
|
||||||
|
m_CustomReflection: {fileID: 0}
|
||||||
|
m_Sun: {fileID: 0}
|
||||||
|
--- !u!127 &3
|
||||||
|
LevelGameManager:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
--- !u!157 &4
|
||||||
|
LightmapSettings:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 5
|
||||||
|
m_GIWorkflowMode: 0
|
||||||
|
m_LightmapsMode: 1
|
||||||
|
m_GISettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_BounceScale: 1
|
||||||
|
m_IndirectOutputScale: 1
|
||||||
|
m_AlbedoBoost: 1
|
||||||
|
m_TemporalCoherenceThreshold: 1
|
||||||
|
m_EnvironmentLightingMode: 0
|
||||||
|
m_EnableBakedLightmaps: 1
|
||||||
|
m_EnableRealtimeLightmaps: 1
|
||||||
|
m_LightmapEditorSettings:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_Resolution: 2
|
||||||
|
m_BakeResolution: 40
|
||||||
|
m_TextureWidth: 1024
|
||||||
|
m_TextureHeight: 1024
|
||||||
|
m_AOMaxDistance: 1
|
||||||
|
m_Padding: 2
|
||||||
|
m_CompAOExponent: 0
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_TextureCompression: 1
|
||||||
|
m_FinalGather: 0
|
||||||
|
m_FinalGatherRayCount: 1024
|
||||||
|
m_LightmapSnapshot: {fileID: 0}
|
||||||
|
m_RuntimeCPUUsage: 25
|
||||||
|
--- !u!196 &5
|
||||||
|
NavMeshSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_BuildSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
agentRadius: .5
|
||||||
|
agentHeight: 2
|
||||||
|
agentSlope: 45
|
||||||
|
agentClimb: .400000006
|
||||||
|
ledgeDropHeight: 0
|
||||||
|
maxJumpAcrossDistance: 0
|
||||||
|
accuratePlacement: 0
|
||||||
|
minRegionArea: 2
|
||||||
|
cellSize: .166666672
|
||||||
|
manualCellSize: 0
|
||||||
|
m_NavMeshData: {fileID: 0}
|
||||||
|
--- !u!1 &61719360
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
serializedVersion: 4
|
||||||
|
m_Component:
|
||||||
|
- 4: {fileID: 61719365}
|
||||||
|
- 20: {fileID: 61719364}
|
||||||
|
- 92: {fileID: 61719363}
|
||||||
|
- 124: {fileID: 61719362}
|
||||||
|
- 81: {fileID: 61719361}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Main Camera
|
||||||
|
m_TagString: MainCamera
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!81 &61719361
|
||||||
|
AudioListener:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 61719360}
|
||||||
|
m_Enabled: 1
|
||||||
|
--- !u!124 &61719362
|
||||||
|
Behaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 61719360}
|
||||||
|
m_Enabled: 1
|
||||||
|
--- !u!92 &61719363
|
||||||
|
Behaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 61719360}
|
||||||
|
m_Enabled: 1
|
||||||
|
--- !u!20 &61719364
|
||||||
|
Camera:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 61719360}
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_ClearFlags: 1
|
||||||
|
m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
|
||||||
|
m_NormalizedViewPortRect:
|
||||||
|
serializedVersion: 2
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
width: 1
|
||||||
|
height: 1
|
||||||
|
near clip plane: .300000012
|
||||||
|
far clip plane: 1000
|
||||||
|
field of view: 49
|
||||||
|
orthographic: 0
|
||||||
|
orthographic size: 5
|
||||||
|
m_Depth: -1
|
||||||
|
m_CullingMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
m_RenderingPath: -1
|
||||||
|
m_TargetTexture: {fileID: 0}
|
||||||
|
m_TargetDisplay: 0
|
||||||
|
m_HDR: 0
|
||||||
|
m_OcclusionCulling: 1
|
||||||
|
m_StereoConvergence: 10
|
||||||
|
m_StereoSeparation: .0219999999
|
||||||
|
--- !u!4 &61719365
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 61719360}
|
||||||
|
m_LocalRotation: {x: -.259112954, y: .110958092, z: -.0299803261, w: -.958983839}
|
||||||
|
m_LocalPosition: {x: 2.95000005, y: 9.18000031, z: -15.3199997}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 0
|
||||||
|
--- !u!1 &736567784
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
serializedVersion: 4
|
||||||
|
m_Component:
|
||||||
|
- 4: {fileID: 736567788}
|
||||||
|
- 33: {fileID: 736567787}
|
||||||
|
- 135: {fileID: 736567786}
|
||||||
|
- 23: {fileID: 736567785}
|
||||||
|
- 114: {fileID: 736567789}
|
||||||
|
- 54: {fileID: 736567790}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Center
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!23 &736567785
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 1
|
||||||
|
m_ReceiveShadows: 1
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_SubsetIndices:
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_UseLightProbes: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_PreserveUVs: 1
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_AutoUVMaxDistance: .5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
--- !u!135 &736567786
|
||||||
|
SphereCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: .5
|
||||||
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!33 &736567787
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
--- !u!4 &736567788
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 2
|
||||||
|
--- !u!114 &736567789
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a24d489629b440b4d9fcfafc24239241, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
LinkObj: {fileID: 11495142, guid: fab430cecad80ad4391987a06b550cb7, type: 2}
|
||||||
|
PersonObj: {fileID: 11406500, guid: 646dd6566f9e1374caa3af8ad37c43d3, type: 2}
|
||||||
|
NumPeople: 100
|
||||||
|
AvgNumFriends: 20
|
||||||
|
SphereRadius: 7
|
||||||
|
rotationSpeed: .699999988
|
||||||
|
torqueForce: 35
|
||||||
|
--- !u!54 &736567790
|
||||||
|
Rigidbody:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 736567784}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Mass: 1
|
||||||
|
m_Drag: 0
|
||||||
|
m_AngularDrag: .800000012
|
||||||
|
m_UseGravity: 0
|
||||||
|
m_IsKinematic: 0
|
||||||
|
m_Interpolate: 0
|
||||||
|
m_Constraints: 0
|
||||||
|
m_CollisionDetection: 0
|
||||||
|
--- !u!1 &1126063559
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
serializedVersion: 4
|
||||||
|
m_Component:
|
||||||
|
- 4: {fileID: 1126063561}
|
||||||
|
- 108: {fileID: 1126063560}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Directional Light
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!108 &1126063560
|
||||||
|
Light:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1126063559}
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Type: 1
|
||||||
|
m_Color: {r: 1, g: .956862748, b: .839215696, a: 1}
|
||||||
|
m_Intensity: 1
|
||||||
|
m_Range: 10
|
||||||
|
m_SpotAngle: 30
|
||||||
|
m_CookieSize: 10
|
||||||
|
m_Shadows:
|
||||||
|
m_Type: 2
|
||||||
|
m_Resolution: -1
|
||||||
|
m_Strength: 1
|
||||||
|
m_Bias: .0500000007
|
||||||
|
m_NormalBias: .400000006
|
||||||
|
m_Cookie: {fileID: 0}
|
||||||
|
m_DrawHalo: 0
|
||||||
|
m_Flare: {fileID: 0}
|
||||||
|
m_RenderMode: 0
|
||||||
|
m_CullingMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
m_Lightmapping: 4
|
||||||
|
m_BounceIntensity: 1
|
||||||
|
m_ShadowRadius: 0
|
||||||
|
m_ShadowAngle: 0
|
||||||
|
m_AreaSize: {x: 1, y: 1}
|
||||||
|
--- !u!4 &1126063561
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_PrefabParentObject: {fileID: 0}
|
||||||
|
m_PrefabInternal: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1126063559}
|
||||||
|
m_LocalRotation: {x: .408217937, y: -.234569728, z: .109381676, w: .875426054}
|
||||||
|
m_LocalPosition: {x: 0, y: 3, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 1
|
||||||
8
Assets/Scenes/Creator.unity.meta
Normal file
8
Assets/Scenes/Creator.unity.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 99408b15168559b46a7d7832ffcbddde
|
||||||
|
timeCreated: 1439446751
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -3,9 +3,16 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace DeathBook.Model
|
namespace DeathBook.Model
|
||||||
{
|
{
|
||||||
class Friendship
|
public class Friendship
|
||||||
{
|
{
|
||||||
private Person friend1, friend2;
|
public Person friend1, friend2;
|
||||||
private int importance; //on a scale from 1 to 100
|
private int importance; //on a scale from 1 to 100
|
||||||
|
|
||||||
|
public Friendship(Person p1, Person p2, int scale)
|
||||||
|
{
|
||||||
|
friend1 = p1;
|
||||||
|
friend2 = p2;
|
||||||
|
importance = scale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,12 +7,18 @@ namespace DeathBook.Model
|
|||||||
{
|
{
|
||||||
private int score;
|
private int score;
|
||||||
|
|
||||||
private List<Person> peeps;
|
public List<Person> people;
|
||||||
private List<Friendship> friendships;
|
public List<Friendship> friendships;
|
||||||
|
|
||||||
|
|
||||||
//private Generator gen;
|
//private Generator gen;
|
||||||
private int gameTime;
|
private int gameTime;
|
||||||
private int globalAwareness;
|
private int globalAwareness;
|
||||||
|
|
||||||
|
public Level(List<Person> people, List<Friendship> friendships)
|
||||||
|
{
|
||||||
|
this.people = people;
|
||||||
|
this.friendships = friendships;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,41 +5,42 @@ namespace DeathBook.Model
|
|||||||
{
|
{
|
||||||
public class LevelGenerator
|
public class LevelGenerator
|
||||||
{
|
{
|
||||||
private int numFriends;
|
private int numPeople;
|
||||||
private int avgConnections;
|
private int avgConnections;
|
||||||
private float radius;
|
private float radius;
|
||||||
|
|
||||||
public Level GenerateLevel()
|
public Level GenerateLevel(int numPeople, int avgFriends, float radius)
|
||||||
{
|
{
|
||||||
//and here...
|
this.numPeople = numPeople;
|
||||||
|
this.avgConnections = avgFriends;
|
||||||
|
this.radius = radius;
|
||||||
|
|
||||||
List<Person> people = CreatePeople();
|
List<Person> people = CreatePeople();
|
||||||
List<Friendship> friendships = CreateFriendships(people);
|
List<Friendship> friendships = CreateFriendships(people);
|
||||||
|
|
||||||
return null;
|
return new Level(people, friendships);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Person> CreatePeople()
|
private List<Person> CreatePeople()
|
||||||
{
|
{
|
||||||
List<Person> people = new List<Person>(numFriends);
|
List<Person> people = new List<Person>(numPeople);
|
||||||
|
|
||||||
float dlong = Mathf.PI * (3 - Mathf.Sqrt(5)); //~2.39996323
|
float dlong = Mathf.PI * (3 - Mathf.Sqrt(5)); //~2.39996323
|
||||||
|
|
||||||
float dz = (2f / numFriends) * radius;
|
float dz = (2f / numPeople) * radius;
|
||||||
float longitude = 0f;
|
float longitude = 0f;
|
||||||
float z = radius - dz / 2;
|
float z = radius - dz / 2;
|
||||||
float r, x, y;
|
float r, x, y;
|
||||||
Person p;
|
Person p;
|
||||||
|
|
||||||
for (int i = 0; i < numFriends; i++)
|
for (int i = 0; i < numPeople; i++)
|
||||||
{
|
{
|
||||||
r = Mathf.Sqrt(radius * radius - z * z);
|
r = Mathf.Sqrt(radius * radius - z * z);
|
||||||
|
|
||||||
x = Mathf.Cos(longitude) * r;
|
x = Mathf.Cos(longitude) * r;
|
||||||
y = Mathf.Sin(longitude) * r;
|
y = Mathf.Sin(longitude) * r;
|
||||||
|
|
||||||
p = new Person(x,y,z);
|
p = new Person(i, x, y, z);
|
||||||
people.Add(p);
|
people.Add(p);
|
||||||
|
|
||||||
z -= dz;
|
z -= dz;
|
||||||
@ -47,31 +48,91 @@ 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<Friendship> CreateFriendships(List<Person> people)
|
||||||
{
|
{
|
||||||
|
Debug.Log("Creating friendships");
|
||||||
|
|
||||||
List<Friendship> friendships = new List<Friendship>();
|
List<Friendship> friendships = new List<Friendship>();
|
||||||
|
Person p1, p2;
|
||||||
|
|
||||||
float rSq = radius * radius;
|
int totalCount = people.Count;
|
||||||
|
int missing;
|
||||||
|
|
||||||
for (int i = 0, count = people.Count; i < count; i++)
|
LinkedList<DistanceNode> list = new LinkedList<DistanceNode>();
|
||||||
|
|
||||||
|
for (int i = 0; i < totalCount; i++)
|
||||||
{
|
{
|
||||||
for (int j = i+1; j < count; j++)
|
Debug.Log("Person " + (i+1));
|
||||||
|
p1 = people[i];
|
||||||
|
missing = avgConnections - p1.numFriends; // TODO Add randomness
|
||||||
|
|
||||||
|
if (missing <= 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
list.Clear();
|
||||||
|
|
||||||
|
for (int j = i+1; j < totalCount; j++)
|
||||||
{
|
{
|
||||||
// Nombre d'amis présents
|
p2 = people[j];
|
||||||
|
if (p2.numFriends < avgConnections * 1.2)
|
||||||
|
list.AddLast(new DistanceNode(p1, p2));
|
||||||
|
}
|
||||||
|
|
||||||
//
|
while (list.Count > 0 && missing > 0)
|
||||||
|
{
|
||||||
|
DistanceNode smallest = list.First.Value;
|
||||||
|
foreach (DistanceNode node in list)
|
||||||
|
{
|
||||||
|
if (node.dist < smallest.dist)
|
||||||
|
//TODO Add probabilities
|
||||||
|
smallest = node;
|
||||||
|
}
|
||||||
|
//TODO Code/use a heap instead
|
||||||
|
|
||||||
|
friendships.Add(CreateFriendship(p1, smallest.p));
|
||||||
|
missing--;
|
||||||
|
list.Remove(smallest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Debug.Log(friendships.Count);
|
||||||
|
return friendships;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Friendship CreateFriendship(Person p1, Person p2)
|
||||||
|
{
|
||||||
|
Friendship f = new Friendship(p1, p2, Random.Range(1,100));
|
||||||
//TODO
|
p1.AddFriendship(f);
|
||||||
return null;
|
p2.AddFriendship(f);
|
||||||
|
return f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class DistanceNode
|
||||||
|
{
|
||||||
|
public Person p;
|
||||||
|
public float dist;
|
||||||
|
|
||||||
|
public DistanceNode(Person p1, Person p2)
|
||||||
|
{
|
||||||
|
p = p2;
|
||||||
|
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
|
||||||
|
*
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,9 +5,11 @@ namespace DeathBook.Model
|
|||||||
{
|
{
|
||||||
public class Person
|
public class Person
|
||||||
{
|
{
|
||||||
|
public int id;
|
||||||
private string name;
|
private string name;
|
||||||
private List<Friendship> friendList = new List<Friendship>();
|
private List<Friendship> friendList = new List<Friendship>();
|
||||||
public Vector3 initialPosition;
|
public Vector3 initialPosition;
|
||||||
|
public int numFriends;
|
||||||
private int timeBetweenPosts; // f = 1/T;
|
private int timeBetweenPosts; // f = 1/T;
|
||||||
private int connectionTime;
|
private int connectionTime;
|
||||||
private int disconnectionTime;
|
private int disconnectionTime;
|
||||||
@ -19,11 +21,18 @@ namespace DeathBook.Model
|
|||||||
|
|
||||||
//private Node node;
|
//private Node node;
|
||||||
|
|
||||||
public Person(float x, float y, float z)
|
public Person(int id, float x, float y, float z)
|
||||||
{
|
{
|
||||||
|
this.id = id;
|
||||||
initialPosition = new Vector3(x, y, z);
|
initialPosition = new Vector3(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddFriendship(Friendship f)
|
||||||
|
{
|
||||||
|
friendList.Add(f);
|
||||||
|
numFriends++;
|
||||||
|
}
|
||||||
|
|
||||||
private bool isConnected(int time)
|
private bool isConnected(int time)
|
||||||
{
|
{
|
||||||
return disconnectionTime > time && time > connectionTime;
|
return disconnectionTime > time && time > connectionTime;
|
||||||
|
|||||||
119
Assets/Tests/SphereSR.cs
Normal file
119
Assets/Tests/SphereSR.cs
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DeathBook.Model;
|
||||||
|
|
||||||
|
public class SphereSR : MonoBehaviour
|
||||||
|
{
|
||||||
|
public FriendshipLink LinkObj;
|
||||||
|
public PersonTest PersonObj;
|
||||||
|
public int NumPeople = 50;
|
||||||
|
public int AvgNumFriends = 20;
|
||||||
|
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 PersonTest[] peopleNodes;
|
||||||
|
//TODO private Friendship[] friendships;
|
||||||
|
private GameObject[] nodes;
|
||||||
|
|
||||||
|
void Awake()
|
||||||
|
{
|
||||||
|
LevelGenerator lGen = new LevelGenerator();
|
||||||
|
Level lvl = lGen.GenerateLevel(NumPeople, AvgNumFriends, 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)
|
||||||
|
{
|
||||||
|
/* Sphere uniform distribution using the spiral method with the golden angle
|
||||||
|
* ~2.39996323 rad, the golden angle (the most irrational angle)
|
||||||
|
* is used here to make sure that the sin and cos functions
|
||||||
|
* dont end up drawing clusters of points and the spirals are way
|
||||||
|
* less visible.
|
||||||
|
*/
|
||||||
|
peopleNodes = new PersonTest[lvl.people.Count];
|
||||||
|
|
||||||
|
int ctr = 0;
|
||||||
|
foreach (Person p in lvl.people)
|
||||||
|
{
|
||||||
|
|
||||||
|
PersonTest pInst = Instantiate(PersonObj, p.initialPosition, Quaternion.identity) as PersonTest;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/Tests/SphereSR.cs.meta
Normal file
12
Assets/Tests/SphereSR.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a24d489629b440b4d9fcfafc24239241
|
||||||
|
timeCreated: 1439446791
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Loading…
x
Reference in New Issue
Block a user