Added scoring. Interecepting swap and successful swap score remaining

dev-hazimBeforeMerge
Hazim Bin Ijaz 3 weeks ago
parent 8d3809fc1d
commit 8f0a623ed5

@ -300,6 +300,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3}
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 7049454171559621213} addedObject: {fileID: 7049454171559621213}
- targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3}
insertIndex: -1
addedObject: {fileID: 4321537148236331373}
m_SourcePrefab: {fileID: 100100000, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3}
--- !u!114 &741733315856861890 stripped --- !u!114 &741733315856861890 stripped
MonoBehaviour: MonoBehaviour:
@ -369,6 +372,7 @@ MonoBehaviour:
m_ServerCharacter: {fileID: 741733315856861890} m_ServerCharacter: {fileID: 741733315856861890}
m_PhysicsWrapper: {fileID: 6116655102486013040} m_PhysicsWrapper: {fileID: 6116655102486013040}
m_AbilitySystem: {fileID: 7049454171559621213} m_AbilitySystem: {fileID: 7049454171559621213}
m_UIMessageFeed: {fileID: 0}
--- !u!114 &4887850889182527394 --- !u!114 &4887850889182527394
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -747,6 +751,18 @@ MonoBehaviour:
abilities: abilities:
- {fileID: 11400000, guid: e4794e2f71f66a74486c797344695ce7, type: 2} - {fileID: 11400000, guid: e4794e2f71f66a74486c797344695ce7, type: 2}
currentAbilityIndicator: {fileID: 92142163933926358} currentAbilityIndicator: {fileID: 92142163933926358}
--- !u!114 &4321537148236331373
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6009713983291384756}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a73f85cd904406945a2192aaecb2c310, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!4 &6009713983291384766 stripped --- !u!4 &6009713983291384766 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} m_CorrespondingSourceObject: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3}

@ -1232,6 +1232,72 @@ MonoBehaviour:
ChildScenesToLoadConfig: ChildScenesToLoadConfig:
- {fileID: 102900000, guid: a542218ba547130469444ba04f9bef35, type: 3} - {fileID: 102900000, guid: a542218ba547130469444ba04f9bef35, type: 3}
- {fileID: 102900000, guid: f77e38f2b72c5f649902d637b3a70b42, type: 3} - {fileID: 102900000, guid: f77e38f2b72c5f649902d637b3a70b42, type: 3}
--- !u!1 &698889474
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 698889477}
- component: {fileID: 698889475}
- component: {fileID: 698889476}
m_Layer: 0
m_Name: ScoreManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &698889475
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 698889474}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalObjectIdHash: 2391970879
InScenePlacedSourceGlobalObjectIdHash: 0
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
--- !u!114 &698889476
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 698889474}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c42f66f946855da4b99f79c5bde1d545, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!4 &698889477
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 698889474}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &791609700 --- !u!1001 &791609700
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -8597,11 +8663,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 0.8529446 value: 0.85294455
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: 0.39434478 value: 0.3943448
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
@ -8609,7 +8675,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0.14352977 value: -0.14352979
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734516302391364, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734516302391364, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_UpdateMethod propertyPath: m_UpdateMethod
@ -8641,11 +8707,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734516695783279, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734516695783279, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: 0.30972984 value: 0.3097298
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734516695783279, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734516695783279, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0.1450697 value: -0.14506969
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3} - target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
@ -8758,15 +8824,15 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} - target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3}
propertyPath: m_LocalRotation.x propertyPath: m_LocalRotation.x
value: 0.3943448 value: 0.39434484
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} - target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: 0.31044644 value: 0.3104465
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} - target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3}
propertyPath: m_LocalRotation.z propertyPath: m_LocalRotation.z
value: -0.14352976 value: -0.1435298
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} - target: {fileID: 203267159508449512, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3}
propertyPath: m_LocalEulerAnglesHint.x propertyPath: m_LocalEulerAnglesHint.x
@ -9235,6 +9301,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
confirmationPanel: {fileID: 125665959027215112} confirmationPanel: {fileID: 125665959027215112}
swapwithname: {fileID: 0}
--- !u!4 &1486746210 --- !u!4 &1486746210
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -10669,3 +10736,4 @@ SceneRoots:
- {fileID: 1690610726} - {fileID: 1690610726}
- {fileID: 1486746210} - {fileID: 1486746210}
- {fileID: 396364068} - {fileID: 396364068}
- {fileID: 698889477}

@ -111,6 +111,8 @@ public class CrowManager : NetworkBehaviour
} }
} }
/// <summary> /// <summary>
/// RPC to notify clients about the Crow change. /// RPC to notify clients about the Crow change.
/// </summary> /// </summary>
@ -181,4 +183,5 @@ public class CrowManager : NetworkBehaviour
{ {
return currentCrow; return currentCrow;
} }
} }

@ -146,6 +146,8 @@ namespace Unity.BossRoom.Gameplay.GameplayObjects.Character
public int? TargetPlatformId { get; private set; } = null; public int? TargetPlatformId { get; private set; } = null;
public bool IsOnAPlatform { get; private set; } = false; public bool IsOnAPlatform { get; private set; } = false;
public bool IsCrow { get; private set; } = false; public bool IsCrow { get; private set; } = false;
public bool IsSwapping { get; private set; } = false;
public UIStateDisplayHandler uIStateDisplayHandler; public UIStateDisplayHandler uIStateDisplayHandler;
@ -272,6 +274,7 @@ namespace Unity.BossRoom.Gameplay.GameplayObjects.Character
private void UpdatePlatformStatusClientRpc(bool status) private void UpdatePlatformStatusClientRpc(bool status)
{ {
IsOnAPlatform = status; // Update the value for all clients IsOnAPlatform = status; // Update the value for all clients
IsSwapping = false;
} }
@ -296,6 +299,7 @@ namespace Unity.BossRoom.Gameplay.GameplayObjects.Character
var pltpos = PlatformManager.Instance.GetPlatformPosition(platform.PlatformID); var pltpos = PlatformManager.Instance.GetPlatformPosition(platform.PlatformID);
pltpos.y = 0; pltpos.y = 0;
Debug.Log($"Platform position: {pltpos}."); Debug.Log($"Platform position: {pltpos}.");
IsSwapping = true;
ServerSendCharacterInputRpc(pltpos); ServerSendCharacterInputRpc(pltpos);
} }

@ -0,0 +1,34 @@
using UnityEngine;
using Unity.Netcode;
public class PlayerScoreComponent : NetworkBehaviour
{
public int CurrentScore { get; private set; }
public override void OnNetworkSpawn()
{
if (IsOwner && IsClient)
{
Debug.Log($"[PlayerScoreComponent] Requesting score initialization for Player {OwnerClientId}");
ScoreManager.Instance?.InitializePlayerScoreServerRpc(OwnerClientId);
}
// For the server player (host), ensure the PlayerScoreComponent is registered properly
if (IsServer && OwnerClientId == NetworkManager.Singleton.LocalClientId)
{
ScoreManager.Instance?.InitializePlayerScoreServerRpc(OwnerClientId);
}
}
public void UpdateScore(int newScore)
{
CurrentScore = newScore;
Debug.Log($"[PlayerScoreComponent] Player {OwnerClientId} score updated to {newScore}.");
UpdateScoreUI();
}
private void UpdateScoreUI()
{
// Update the player's score display in the UI.
Debug.Log($"[PlayerScoreComponent] Updated score UI for Player {OwnerClientId}: {CurrentScore}");
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a73f85cd904406945a2192aaecb2c310
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,137 @@
using System.Collections;
using System.Collections.Generic;
using Unity.Multiplayer.Samples.BossRoom;
using UnityEngine;
using Unity.Netcode;
public class ScoreManager : NetworkBehaviour
{
public static ScoreManager Instance { get; private set; }
private Dictionary<ulong, int> playerScores = new Dictionary<ulong, int>();
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
}
public override void OnNetworkSpawn()
{
if (IsServer)
{
StartCrowPenaltyCoroutineServerRpc();
}
}
[ServerRpc(RequireOwnership = false)]
public void InitializePlayerScoreServerRpc(ulong ownerClientId)
{
if (!playerScores.ContainsKey(ownerClientId))
{
playerScores[ownerClientId] = 200;
Debug.Log($"[ScoreManager] Player {ownerClientId} initialized with a starting score of 200.");
UpdatePlayerScoreClientRpc(ownerClientId, 200);
}
else
{
Debug.LogWarning($"[ScoreManager] Player {ownerClientId} already initialized.");
}
}
public void UpdatePlayerScore(ulong ownerClientId, int newScore)
{
if (playerScores.ContainsKey(ownerClientId))
{
playerScores[ownerClientId] = newScore;
Debug.Log($"[ScoreManager] Updating Player {ownerClientId} score to {newScore}.");
UpdatePlayerScoreClientRpc(ownerClientId, newScore);
}
else
{
Debug.LogError($"[ScoreManager] No entry found for Player {ownerClientId}. Cannot update score.");
}
}
public int GetPlayerScore(ulong ownerClientId)
{
if (playerScores.TryGetValue(ownerClientId, out var score))
{
return score;
}
Debug.LogError($"[ScoreManager] No entry found for Player {ownerClientId}.");
return 0; // Default score
}
[ServerRpc]
public void StartCrowPenaltyCoroutineServerRpc()
{
StartCoroutine(ApplyCrowPenaltyCoroutine());
}
private IEnumerator ApplyCrowPenaltyCoroutine()
{
yield return new WaitUntil(() => PlatformManager.Instance != null && PlatformManager.Instance.AreAllPlatformsOccupied());
while (true)
{
var modifications = new List<KeyValuePair<ulong, int>>();
foreach (var entry in playerScores)
{
var ownerClientId = entry.Key;
var score = entry.Value;
// Check if the player is the crow
if (CrowManager.Instance != null && CrowManager.Instance.GetCurrentCrow().OwnerClientId == ownerClientId)
{
var newScore = score - 2;
modifications.Add(new KeyValuePair<ulong, int>(ownerClientId, newScore));
Debug.Log($"[ScoreManager] Applied crow penalty to Player {ownerClientId}. New score: {newScore}");
}
}
// Apply the modifications after the iteration
foreach (var modification in modifications)
{
UpdatePlayerScore(modification.Key, modification.Value);
}
// Wait for the next penalty application
yield return new WaitForSeconds(5f);
}
}
[ClientRpc]
public void UpdatePlayerScoreClientRpc(ulong ownerClientId, int newScore)
{
Debug.Log($"[ScoreManager] Received score update for Player {ownerClientId}: {newScore}");
var playerScoreComponent = FindPlayerScoreComponent(ownerClientId);
if (playerScoreComponent != null)
{
playerScoreComponent.UpdateScore(newScore);
}
else
{
Debug.LogError($"[ScoreManager] Could not find PlayerScoreComponent for Player {ownerClientId}");
}
}
private PlayerScoreComponent FindPlayerScoreComponent(ulong ownerClientId)
{
foreach (var scoreComponent in FindObjectsOfType<PlayerScoreComponent>())
{
if (scoreComponent.OwnerClientId == ownerClientId)
{
return scoreComponent;
}
}
Debug.LogError($"[ScoreManager] Could not find PlayerScoreComponent for Player {ownerClientId}");
return null;
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c42f66f946855da4b99f79c5bde1d545
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -4,7 +4,7 @@
QualitySettings: QualitySettings:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 5 serializedVersion: 5
m_CurrentQuality: 4 m_CurrentQuality: 0
m_QualitySettings: m_QualitySettings:
- serializedVersion: 3 - serializedVersion: 3
name: Low name: Low
@ -29,6 +29,7 @@ QualitySettings:
billboardsFaceCameraPosition: 0 billboardsFaceCameraPosition: 0
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 25
lodBias: 0.3 lodBias: 0.3
maximumLODLevel: 1 maximumLODLevel: 1
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -79,6 +80,7 @@ QualitySettings:
billboardsFaceCameraPosition: 0 billboardsFaceCameraPosition: 0
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 25
lodBias: 0.4 lodBias: 0.4
maximumLODLevel: 0 maximumLODLevel: 0
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -129,6 +131,7 @@ QualitySettings:
billboardsFaceCameraPosition: 1 billboardsFaceCameraPosition: 1
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 25
lodBias: 1.5 lodBias: 1.5
maximumLODLevel: 0 maximumLODLevel: 0
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -179,6 +182,7 @@ QualitySettings:
billboardsFaceCameraPosition: 1 billboardsFaceCameraPosition: 1
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 50
lodBias: 2 lodBias: 2
maximumLODLevel: 0 maximumLODLevel: 0
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -229,6 +233,7 @@ QualitySettings:
billboardsFaceCameraPosition: 0 billboardsFaceCameraPosition: 0
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 50
lodBias: 0.4 lodBias: 0.4
maximumLODLevel: 1 maximumLODLevel: 1
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -278,6 +283,7 @@ QualitySettings:
billboardsFaceCameraPosition: 0 billboardsFaceCameraPosition: 0
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 100
lodBias: 1 lodBias: 1
maximumLODLevel: 0 maximumLODLevel: 0
enableLODCrossFade: 1 enableLODCrossFade: 1
@ -327,6 +333,7 @@ QualitySettings:
billboardsFaceCameraPosition: 0 billboardsFaceCameraPosition: 0
useLegacyDetailDistribution: 1 useLegacyDetailDistribution: 1
vSyncCount: 0 vSyncCount: 0
realtimeGICPUUsage: 25
lodBias: 1.5 lodBias: 1.5
maximumLODLevel: 0 maximumLODLevel: 0
enableLODCrossFade: 1 enableLODCrossFade: 1

Loading…
Cancel
Save