Commit 3995fa3b authored by AinL's avatar AinL
Browse files

add: eat enemy

add: leaderboard
add: nickname changer
move: script files
update: project setting; resizable window
parent 636e74b4
Showing with 688 additions and 71 deletions
+688 -71
......@@ -39,6 +39,7 @@ MonoBehaviour:
- DestroySpaceship
- Fire
- RespawnSpaceship
- RPCRemoveRequest
DisableAutoOpenWizard: 1
ShowSettings: 0
DevRegionSetOnce: 1
......@@ -124,6 +124,7 @@ MonoBehaviour:
health: 1
size: 1
splitableHealthThreshold: 2
eatOtherThresholdFactor: 1.66
--- !u!54 &7904763328923688592
Rigidbody:
m_ObjectHideFlags: 0
......@@ -209,7 +210,7 @@ GameObject:
- component: {fileID: 5008932867226782349}
- component: {fileID: 3752674736368630228}
m_Layer: 0
m_Name: New Text
m_Name: Nickname Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
......@@ -223,7 +224,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7775670288862231465}
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 2, z: 0}
m_LocalPosition: {x: 0, y: 0, z: -0}
m_LocalScale: {x: 0.05895516, y: 0.05895516, z: 0.05895516}
m_Children: []
m_Father: {fileID: 3861806293270926113}
......
......@@ -316,6 +316,7 @@ MonoBehaviour:
scoreTextboxObject: {fileID: 1005848150}
playerPrefab: {fileID: 7970457776050004569, guid: cf0831828c9e1a74db538605b9dbbfd9,
type: 3}
alwaysCreateRoom: 0
--- !u!850595691 &714731879
LightingSettings:
m_ObjectHideFlags: 0
......@@ -377,6 +378,85 @@ LightingSettings:
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
--- !u!1 &802422768
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 802422769}
- component: {fileID: 802422771}
- component: {fileID: 802422770}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &802422769
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802422768}
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: 1807337566}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.5}
m_SizeDelta: {x: -20, y: -13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &802422770
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802422768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 2
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text:
--- !u!222 &802422771
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802422768}
m_CullTransparentMesh: 1
--- !u!1 &1005848150
GameObject:
m_ObjectHideFlags: 0
......@@ -411,7 +491,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -11.400005, y: 0}
m_AnchoredPosition: {x: -11.399994, y: 0}
m_SizeDelta: {x: -22.799988, y: 65.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1005848152
......@@ -548,6 +628,8 @@ RectTransform:
m_LocalScale: {x: 0, y: 0, z: 0}
m_Children:
- {fileID: 1005848151}
- {fileID: 1346965200}
- {fileID: 1807337566}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
......@@ -637,6 +719,181 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1173601659
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1173601660}
- component: {fileID: 1173601662}
- component: {fileID: 1173601661}
m_Layer: 5
m_Name: Placeholder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1173601660
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1173601659}
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: 1807337566}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.5}
m_SizeDelta: {x: -20, y: -13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1173601661
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1173601659}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 2
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 2
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: nickname...
--- !u!222 &1173601662
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1173601659}
m_CullTransparentMesh: 1
--- !u!1 &1346965199
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1346965200}
- component: {fileID: 1346965203}
- component: {fileID: 1346965202}
- component: {fileID: 1346965201}
m_Layer: 5
m_Name: Leaderboard
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1346965200
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1346965199}
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: 1017788992}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 68.8, y: -7.235077}
m_SizeDelta: {x: 176.8, y: -14.469858}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1346965201
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1346965199}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 49dd71f3d492815439354caef8f37e2b, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &1346965202
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1346965199}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 4a4df204c321f9c40b0dbfb1baaffb4c, type: 3}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 1
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1.25
m_Text: 'Leaderboard
1. Hello
2. World'
--- !u!222 &1346965203
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1346965199}
m_CullTransparentMesh: 1
--- !u!1 &1640989542
GameObject:
m_ObjectHideFlags: 0
......@@ -703,3 +960,158 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1807337565
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1807337566}
- component: {fileID: 1807337570}
- component: {fileID: 1807337569}
- component: {fileID: 1807337568}
- component: {fileID: 1807337567}
m_Layer: 5
m_Name: Nickname
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1807337566
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1807337565}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.75, y: 0.75, z: 0.75}
m_Children:
- {fileID: 1173601660}
- {fileID: 802422769}
m_Father: {fileID: 1017788992}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -71.4, y: 49.63}
m_SizeDelta: {x: 129.8, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1807337567
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1807337565}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5c382255faaf17749991c400c527c948, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &1807337568
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1807337565}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 1807337569}
m_TextComponent: {fileID: 802422770}
m_Placeholder: {fileID: 1173601661}
m_ContentType: 0
m_InputType: 0
m_AsteriskChar: 42
m_KeyboardType: 0
m_LineType: 0
m_HideMobileInput: 0
m_CharacterValidation: 0
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_CustomCaretColor: 0
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
m_Text:
m_CaretBlinkRate: 0.85
m_CaretWidth: 1
m_ReadOnly: 0
--- !u!114 &1807337569
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1807337565}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.3764706}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1807337570
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1807337565}
m_CullTransparentMesh: 1
fileFormatVersion: 2
guid: 44b6ebb445e3543459e5a6935de08729
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
......@@ -27,9 +27,9 @@ public class BodyController : MonoBehaviourPunCallbacks, IPunObservable
public GameObject arrorCenterGameObject;
public GameObject nicknameTextGameObject;
public float accelPerSec = 800;
public float rotatePerSec = 100;
public float maxAccel = 2000;
public float accelPerSec = 1800;
public float rotatePerSec = 250;
public float maxAccel = 4000;
public float accel = 0;
public float direction = 0;
......@@ -37,13 +37,48 @@ public class BodyController : MonoBehaviourPunCallbacks, IPunObservable
public float health = 1.0f;
public float size = 1.0f;
public float splitableHealthThreshold = 2.0f;
public float eatOtherThresholdFactor = 1.66f;
public event EventHandler BodyReleased;
public event EventHandler<BodySplitEventArgs> BodySplitRequested;
public event EventHandler BodyGatherRequested;
public event EventHandler BodyDestroyRequested;
public event EventHandler BodyReleased;
public event EventHandler<float> FoodEaten;
public event EventHandler<float> PlayerEaten;
float blockSplitBodyTimer = 0.0f;
float blockEatOtherTimer = 0.0f;
public bool GetFocus() { return focused; }
public void SetFocus(bool focused = true)
{
this.focused = focused;
if (focused)
{
this.arrorCenterGameObject.SetActive(true);
//this.direction = 0;
this.accel = 0;
arrorCenterGameObject.transform.localScale = new Vector3(1, 1, 1);
}
else
{
this.arrorCenterGameObject.SetActive(false);
}
}
public void SetHealth(float health)
{
this.health = health;
size = Mathf.Pow(Math.Max(0, this.health), 0.333333f);
transform.localScale = new Vector3(size, size, size);
this.gameObject.GetComponent<Rigidbody>().mass = size;
}
// Start is called before the first frame update
void Start()
......@@ -117,6 +152,8 @@ public class BodyController : MonoBehaviourPunCallbacks, IPunObservable
}
blockSplitBodyTimer -= Time.deltaTime;
blockEatOtherTimer -= Time.deltaTime;
}
void OnTriggerEnter(Collider col)
......@@ -131,33 +168,42 @@ public class BodyController : MonoBehaviourPunCallbacks, IPunObservable
}
}
public bool GetFocus() { return focused; }
public void SetFocus(bool focused = true)
void OnCollisionStay(Collision col)
{
this.focused = focused;
if (focused)
{
this.arrorCenterGameObject.SetActive(true);
//this.direction = 0;
this.accel = 0;
arrorCenterGameObject.transform.localScale = new Vector3(1, 1, 1);
}
else
var other = col.gameObject;
if(other.tag == "Player")
{
this.arrorCenterGameObject.SetActive(false);
var photonView = other.GetComponent<PhotonView>();
if (!photonView.IsMine)
{
var controller = other.GetComponent<BodyController>();
var otherHealth = controller.health;
if (health > otherHealth * eatOtherThresholdFactor && blockEatOtherTimer < 0)
{
//perform eat other
Debug.Log($"RPC: Send request to {photonView.Owner.NickName}");
photonView.RPC("RPCRemoveRequest", RpcTarget.All, this.photonView.Owner.NickName);
SetHealth(health + otherHealth);
PlayerEaten?.Invoke(this, otherHealth);
//block eat other for 0.5 sec
blockEatOtherTimer = 0.5f;
}
}
}
}
public void SetHealth(float health)
[PunRPC]
void RPCRemoveRequest(string caller)
{
this.health = health;
size = Mathf.Pow(Math.Max(0, this.health), 0.333333f);
transform.localScale = new Vector3(size, size, size);
this.gameObject.GetComponent<Rigidbody>().mass = size;
//requested
if (photonView.IsMine)
{
Debug.Log($"RPC: Remove requested. called by {caller}");
BodyDestroyRequested?.Invoke(this, null);
}
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
......
......@@ -6,6 +6,7 @@ public class CameraFollowing : MonoBehaviour
{
public GameObject targetObject;
public GameObject cameraObject;
public bool activeSmoothing = false;
// Start is called before the first frame update
......
......@@ -16,6 +16,15 @@ public class FoodScript : MonoBehaviourPunCallbacks, IPunObservable
public event EventHandler OnPlayerCollide;
void SetColor(Color value)
{
if (color != value)
{
color = value;
this.sphere.GetComponent<MeshRenderer>().material.color = color;
}
}
// Start is called before the first frame update
void Start()
{
......@@ -36,14 +45,6 @@ public class FoodScript : MonoBehaviourPunCallbacks, IPunObservable
OnPlayerCollide?.Invoke(this, null);
}
}
void SetColor(Color value)
{
if(color != value)
{
color = value;
this.sphere.GetComponent<MeshRenderer>().material.color = color;
}
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
......
......@@ -71,6 +71,8 @@ class BubblePlacer
public class GameManager : MonoBehaviourPunCallbacks, IPunObservable
{
public static List<GameManager> Instances = new List<GameManager>();
// Start is called before the first frame update
public List<GameObject> myBodies;
public int currentBodyIdx = 0;
......@@ -83,27 +85,61 @@ public class GameManager : MonoBehaviourPunCallbacks, IPunObservable
public float foodCreateInterval = 0.5f;
public int maxFoodCount = 1000;
public int mapRange = 50;
public float score = 0;
int foodCount = 0;
float foodCreateTimeElapsed = 0;
void Start()
public void SetScore(float score)
{
if (photonView.IsMine)
if (this.score != score)
{
this.score = score;
if (scoreTextboxObject) this.scoreTextboxObject.GetComponent<UnityEngine.UI.Text>().text = $"Score: {(int)score}";
}
}
public void SetCurrentBodyIdx(int idx)
{
if (currentBodyIdx != idx)
{
var me = PhotonNetwork.Instantiate(playerBodyPrefab.name, new Vector3(0, 0.505f, 0), Quaternion.identity);
if (me == null) throw new NullReferenceException();
myBodies.Add(me);
currentBodyIdx = idx;
foreach (var item in myBodies)
if (idx >= 0 && idx < myBodies.Count)
{
var controller = InitializeBodyGameObject(item);
var cameraWork = GetComponent<CameraFollowing>();
cameraWork.targetObject = myBodies[idx];
cameraWork.activeSmoothing = true;
}
}
}
currentBodyIdx = -1;
SetCurrentBodyIdx(0);
void Start()
{
if (photonView.IsMine)
{
AddNewBody();
}
Instances.Add(this);
}
void OnDestroy()
{
Instances.Remove(this);
}
void AddNewBody()
{
var me = PhotonNetwork.Instantiate(playerBodyPrefab.name, new Vector3(0, 0.505f, 0), Quaternion.identity);
if (me == null) throw new NullReferenceException();
myBodies.Add(me);
var controller = InitializeBodyGameObject(me);
currentBodyIdx = -1;
SetCurrentBodyIdx(myBodies.Count - 1);
}
BodyController InitializeBodyGameObject(GameObject body)
......@@ -111,11 +147,46 @@ public class GameManager : MonoBehaviourPunCallbacks, IPunObservable
var controller = body.GetComponent<BodyController>();
controller.BodyReleased += Controller_BodyReleased;
controller.FoodEaten += Controller_FoodEaten;
controller.PlayerEaten += Controller_PlayerEaten;
controller.BodySplitRequested += Controller_BodySplitRequested;
controller.BodyGatherRequested += Controller_BodyGatherRequested;
controller.BodyDestroyRequested += Controller_BodyDestroyRequested;
return controller;
}
private void Controller_PlayerEaten(object sender, float e)
{
SetScore(score + e * 200);
}
void Controller_BodyDestroyRequested(object sender, EventArgs e)
{
var caller = (BodyController)sender;
if(caller.photonView.IsMine)
{
for (int i = 0; i < myBodies.Count; i++)
{
if(myBodies[i].GetInstanceID() == caller.gameObject.GetInstanceID())
{
myBodies.RemoveAt(i);
currentBodyIdx = Math.Min(myBodies.Count-1, currentBodyIdx);
break;
}
}
PhotonNetwork.Destroy(caller.photonView);
if (myBodies.Count == 0)
{
//You dead!
Debug.Log("You dead!");
SetScore(0);
//Just make new body
AddNewBody();
}
}
}
//Following controller event calls only from local object.
void Controller_BodySplitRequested(object sender, BodySplitEventArgs e)
{
......@@ -201,30 +272,6 @@ public class GameManager : MonoBehaviourPunCallbacks, IPunObservable
}
}
public void SetScore(float score)
{
if (this.score != score)
{
this.score = score;
if(scoreTextboxObject) this.scoreTextboxObject.GetComponent<UnityEngine.UI.Text>().text = $"Score: {(int)score}";
}
}
public void SetCurrentBodyIdx(int idx)
{
if (currentBodyIdx != idx)
{
currentBodyIdx = idx;
if (idx >= 0 && idx < myBodies.Count)
{
var cameraWork = GetComponent<CameraFollowing>();
cameraWork.targetObject = myBodies[idx];
cameraWork.activeSmoothing = true;
}
}
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if(stream.IsWriting)
......
......@@ -25,7 +25,12 @@ public class NetworkManager : MonoBehaviourPunCallbacks
public void Connect()
{
var names = new[] { "AinL", "boerk", "Hello", "World", "Wow", "Test", "HelloWorld", "Joe", "Foo", "Bar", "foobar", "ASCII"};
var names = new[] {
"Josep", "Visual", "Hello", "World", "Wonder", "Studio", "Android", "Joe",
"Foo", "Bar", "foobar", "Sony", "Microsoft", "Windows", "Apple", "Dog",
"Cat", "Frog", "White", "Black", "Pick", "Slime", "Robot", "Haje", "Vaccine",
"Steam", "Train", "Car", "Cart", "Elephant", "Flower", "Seed", "Food"
};
PhotonNetwork.NickName = names[UnityEngine.Random.Range(0, names.Length)];
if (PhotonNetwork.IsConnected)
{
......
fileFormatVersion: 2
guid: 9483a3d6132fdef46aedeaf189777907
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Leaderboard : MonoBehaviour
{
class StrIntComparer : IComparer<(string, int)>
{
public int Compare((string, int) x, (string, int) y)
{
return y.Item2.CompareTo(x.Item2);
}
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
var scores = new List<(string, int)>();
foreach(var item in GameManager.Instances)
{
scores.Add((item.photonView.Owner.NickName, (int)item.score));
}
scores.Sort(new StrIntComparer());
var content = "Leaderboard\n";
for(int i=0; i<scores.Count; i++)
{
content += $"{i+1}. {scores[i].Item1}, {scores[i].Item2}\n";
}
this.GetComponent<UnityEngine.UI.Text>().text = content;
}
}
fileFormatVersion: 2
guid: 49dd71f3d492815439354caef8f37e2b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NicknameHandler : MonoBehaviourPunCallbacks
{
// Start is called before the first frame update
void Start()
{
GetComponent<UnityEngine.UI.InputField>().onValueChanged.AddListener((s) =>
{
PhotonNetwork.NickName = s;
});
}
public override void OnJoinedRoom()
{
GetComponent<UnityEngine.UI.InputField>().text = PhotonNetwork.NickName;
}
// Update is called once per frame
void Update()
{
}
}
fileFormatVersion: 2
guid: 5c382255faaf17749991c400c527c948
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
......@@ -82,7 +82,7 @@ PlayerSettings:
bakeCollisionMeshes: 0
forceSingleInstance: 0
useFlipModelSwapchain: 1
resizableWindow: 0
resizableWindow: 1
useMacAppStoreValidation: 0
macAppStoreCategory: public.app-category.games
gpuSkinning: 1
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment