Commit 9dbded49 authored by Abdulrahman Mohammed's avatar Abdulrahman Mohammed

Refactor Code

parent 5a5c1cbd
......@@ -15,7 +15,12 @@ MonoBehaviour:
IsDefault: 1
List:
- Override: 0
Prefab: {fileID: 4412426902708893551, guid: 60fb2096caaec3a43a1806dd5102250f, type: 3}
Prefab: {fileID: 4691952305033069124, guid: 5922d3cf9c6f4784f8277e3d39518356, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 8291014476316640429, guid: bc73aef3505b0e74eb22a46a63a2b23c, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
This diff is collapsed.
This diff is collapsed.
fileFormatVersion: 2
guid: 305dcdeb7575022409c6938d87885293
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- TS Hakwaty
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 211e41dbf7dc6084ebf61775ed1f787b
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- TS Hakwaty
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:
......@@ -14,5 +14,5 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::GameSetting
<MaxPlayersInGame>k__BackingField: 4
<MaxAnimalsInRound>k__BackingField: 16
<TimeOfRound>k__BackingField: 25
<TimeOfRound>k__BackingField: 60
<NumberOfRounds>k__BackingField: 5
This source diff could not be displayed because it is too large. You can view the blob instead.
fileFormatVersion: 2
guid: f29f892db576af24daa36fde66cc89c5
guid: 65e893d6d8280ff4eba19d6987deed16
PrefabImporter:
externalObjects: {}
userData:
......
......@@ -690,8 +690,8 @@ BoxCollider:
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1.5351193, y: 1.0282495, z: 0.9859204}
m_Center: {x: -2.7132186e-17, y: 0.4289297, z: -0.009721756}
m_Size: {x: 1.1762159, y: 1.8948627, z: 1.5460478}
m_Center: {x: -1.1483268e-16, y: 0.86223626, z: -0.25808057}
--- !u!114 &7800256244418275688
MonoBehaviour:
m_ObjectHideFlags: 0
......
......@@ -432,7 +432,7 @@ GameObject:
- component: {fileID: 4268953564234010434}
- component: {fileID: 778063317746192726}
m_Layer: 3
m_Name: 2_Animal
m_Name: 2_Lion
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
......@@ -520,8 +520,8 @@ BoxCollider:
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 0.89796656, y: 1.0282495, z: 1.2609953}
m_Center: {x: -2.7132186e-17, y: 0.4289297, z: -0.009721756}
m_Size: {x: 0.89796656, y: 1.6415781, z: 1.6153623}
m_Center: {x: 6.0341865e-16, y: 0.735594, z: 0.16746178}
--- !u!114 &1126594263064233863
MonoBehaviour:
m_ObjectHideFlags: 0
......
fileFormatVersion: 2
guid: 68bd54ad24006f94dbb146eb2fe9591e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
......@@ -780,8 +780,8 @@ BoxCollider:
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 0.5974028, y: 1.0282495, z: 0.9859204}
m_Center: {x: -2.7132186e-17, y: 0.4289297, z: -0.009721756}
m_Size: {x: 0.7342883, y: 1.3076124, z: 0.9859204}
m_Center: {x: -2.7132186e-17, y: 0.56861115, z: -0.009721756}
--- !u!114 &3092277464417715587
MonoBehaviour:
m_ObjectHideFlags: 0
......
......@@ -159,7 +159,7 @@ GameObject:
- component: {fileID: 4424878621612125368}
- component: {fileID: 9063519449268330463}
m_Layer: 5
m_Name: Text (TMP)
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
......@@ -212,7 +212,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Abdo 3
m_text: NPC 1
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
......@@ -296,7 +296,7 @@ GameObject:
- component: {fileID: 7835664114245254243}
- component: {fileID: 7338924785727903024}
m_Layer: 5
m_Name: Image
m_Name: Name
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
......@@ -545,6 +545,7 @@ GameObject:
- component: {fileID: 4213376746885646846}
- component: {fileID: 4343223469952472967}
- component: {fileID: 8643326269112809739}
- component: {fileID: 2981595010778208317}
m_Layer: 0
m_Name: NPC
m_TagString: Untagged
......@@ -682,6 +683,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: bcfadefcf1ce06049925c01fdae16752, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::RaycastWeapon
<_currentAnimal>k__BackingField: {fileID: 0}
hitPoint: {fileID: 2003801431433176889}
showRay: 1
ammoText: {fileID: 0}
......@@ -696,7 +698,6 @@ MonoBehaviour:
HeadDamage: 2
BodyDamage: 1
gunAnimator: {fileID: 6807650472467015968}
<_currentAnimal>k__BackingField: {fileID: 0}
--- !u!114 &4213376746885646846
MonoBehaviour:
m_ObjectHideFlags: 0
......@@ -709,7 +710,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 04fec1f29c777934d9d0ad6f3f05433b, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::PlayerScore
playerName: NPC 1
--- !u!114 &4343223469952472967
MonoBehaviour:
m_ObjectHideFlags: 0
......@@ -742,6 +742,20 @@ MonoBehaviour:
gunParent: {fileID: 2774262070360309853}
rotationSpeed: 10
_animal: {fileID: 0}
--- !u!114 &2981595010778208317
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6869359625592689313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d7d6b6aa5a393e40a69d8bb4d05b43e, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::PlayerDetails
<PlayerName>k__BackingField:
<PlayerImage>k__BackingField: {fileID: 0}
--- !u!1001 &97846783079897831
PrefabInstance:
m_ObjectHideFlags: 0
......
This diff is collapsed.
fileFormatVersion: 2
guid: 5922d3cf9c6f4784f8277e3d39518356
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 62a27678e4abd5d48b2a05691332883e, type: 3}
m_Name: Crocodile
m_EditorClassIdentifier: Assembly-CSharp::AnimalProperties
<AnimalSprite>k__BackingField: {fileID: 0}
<AnimalName>k__BackingField: 3
<AnimalType>k__BackingField: 2
<FoodType>k__BackingField: 0
<Environment>k__BackingField: 2
<SpecialAbilities>k__BackingField: 1
<Reproduction>k__BackingField: 0
<AnimalHealth>k__BackingField: 4
<patrolRange>k__BackingField: 20
<WalkSpeed>k__BackingField: 1.15
<RunSpeed>k__BackingField: 4
<CanAttack>k__BackingField: 1
fileFormatVersion: 2
guid: c5751bd233fcb604aab73e364bf81882
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
......@@ -13,7 +13,7 @@ MonoBehaviour:
m_Name: Lion
m_EditorClassIdentifier: Assembly-CSharp::AnimalProperties
<AnimalSprite>k__BackingField: {fileID: 0}
<AnimalName>k__BackingField: 10
<AnimalName>k__BackingField: 11
<AnimalType>k__BackingField: 1
<FoodType>k__BackingField: 0
<Environment>k__BackingField: 1
......
......@@ -13,7 +13,7 @@ MonoBehaviour:
m_Name: Ostrich
m_EditorClassIdentifier: Assembly-CSharp::AnimalProperties
<AnimalSprite>k__BackingField: {fileID: 0}
<AnimalName>k__BackingField: 9
<AnimalName>k__BackingField: 10
<AnimalType>k__BackingField: 0
<FoodType>k__BackingField: 1
<Environment>k__BackingField: 1
......
......@@ -19,6 +19,8 @@ MonoBehaviour:
<Environment>k__BackingField: 1
<SpecialAbilities>k__BackingField: 4
<Reproduction>k__BackingField: 0
<AnimalHealth>k__BackingField: 10
<WalkSpeed>k__BackingField: 0
<RunSpeed>k__BackingField: 0
<AnimalHealth>k__BackingField: 3
<patrolRange>k__BackingField: 20
<WalkSpeed>k__BackingField: 3
<RunSpeed>k__BackingField: 3
<CanAttack>k__BackingField: 0
......@@ -13,7 +13,7 @@ MonoBehaviour:
m_Name: Bear
m_EditorClassIdentifier: Assembly-CSharp::AnimalProperties
<AnimalSprite>k__BackingField: {fileID: 0}
<AnimalName>k__BackingField: 5
<AnimalName>k__BackingField: 6
<AnimalType>k__BackingField: 1
<FoodType>k__BackingField: 2
<Environment>k__BackingField: 2
......
......@@ -13,7 +13,7 @@ MonoBehaviour:
m_Name: Monkey
m_EditorClassIdentifier: Assembly-CSharp::AnimalProperties
<AnimalSprite>k__BackingField: {fileID: 0}
<AnimalName>k__BackingField: 4
<AnimalName>k__BackingField: 5
<AnimalType>k__BackingField: 1
<FoodType>k__BackingField: 1
<Environment>k__BackingField: 2
......
......@@ -4,6 +4,7 @@
بطريق,
دب_قطبي,
كلب_البحر,
تمساح,
// Forest
غزال,
......@@ -35,7 +36,7 @@ public enum FoodType
public enum Environment
{
يعيش_في_الجليد,
يعيش_في_الجليد,
يعيش_في_الصحراء,
يعيش_في_الغابة
}
......
using System.Collections;
using TMPro;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] TextMeshProUGUI timerText;
[SerializeField] int startRoundAfter;
public static GameManager Instance { get; private set; }
[field: SerializeField] public GameSetting GameSetting { get; private set; }
[field: SerializeField] public AnimalsQuestionGenerator AnimalsQuestionGenerator { get; private set; }
[field: SerializeField] public AnimalsSpawner AnimalsSpawner { get; private set; }
[field: SerializeField] public ScoreManager ScoreManager { get; private set; }
[field: SerializeField] public CursorVisible cursorVisible { get; private set; }
[field: SerializeField] public MatchManager MatchManager { get; private set; }
public InputManager InputManager { get; private set; }
private void Awake()
{
......@@ -15,4 +22,29 @@ public class GameManager : MonoBehaviour
else
Destroy(this);
}
private void Start()
{
InputManager = InputManager.Instance;
StartCoroutine(StartTimer());
}
IEnumerator StartTimer()
{
int timer = startRoundAfter;
WaitForSeconds waitForSeconds = new WaitForSeconds(1);
while (timer > 0)
{
timer--;
timerText.text = timer.ToString();
yield return waitForSeconds;
}
timerText.gameObject.SetActive(false);
StartMatch();
}
public void StartMatch()
{
AnimalsQuestionGenerator.gameObject.SetActive(true);
AnimalsSpawner.gameObject.SetActive(true);
MatchManager.gameObject.SetActive(true);
}
}
using EasyTransition;
using System;
using System.Collections;
using TMPro;
using UnityEngine;
......@@ -10,7 +11,8 @@ public class MatchManager : MonoBehaviour
[SerializeField] TransitionSettings transitionSettings;
[SerializeField] TextMeshProUGUI roundTimerText;
[SerializeField] TextMeshProUGUI matchRoundText;
[SerializeField] Fade fadeScreen;
ScoreManager _scoreManager;
TransitionManager _transitionManager;
int _currentMatch;
float _currentTimer;
......@@ -19,8 +21,8 @@ public class MatchManager : MonoBehaviour
_transitionManager = TransitionManager.Instance();
_currentMatch = 1;
_currentTimer = GameManager.Instance.GameSetting.TimeOfRound;
_scoreManager = GameManager.Instance.ScoreManager;
matchRoundText.text = $"Round: {_currentMatch}/{GameManager.Instance.GameSetting.NumberOfRounds}";
StartCoroutine(startTimer());
}
......@@ -34,19 +36,20 @@ public class MatchManager : MonoBehaviour
}
if(_currentMatch < GameManager.Instance.GameSetting.NumberOfRounds)
{
fadeScreen.FadeIn();
_currentMatch++;
_transitionManager.onTransitionCutPointReached += ChangeRound;
_transitionManager.Transition(transitionSettings, 1);
_transitionManager.Transition(transitionSettings, 3);
}
else
{
_transitionManager.Transition("MainMenu", transitionSettings, 1);
}
_scoreManager.ShowWinMenu();
DestroyAnimals();
StopNPC(true);
}
void ChangeRound()
{
fadeScreen.FadeOut();
GameManager.Instance.AnimalsQuestionGenerator.GengenerateNewQuestions(_currentMatch);
GameManager.Instance.AnimalsSpawner.Spawn();
StopNPC(false);
......
using System.Collections.Generic;
using System.Linq;
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
public class ScoreManager : MonoBehaviour
public class ScoreManager : NetworkBehaviour
{
[SerializeField] Transform leaderboardParent;
[SerializeField] LeaderboardText leaderboardPrefab;
[SerializeField] Transform leaderboardWinParent;
Dictionary<string, int> scoreList = new Dictionary<string, int>();
public void AddMeToLeaderboard(string playerName)
Dictionary<ulong, string> players = new Dictionary<ulong, string>();
Dictionary<ulong, int> scoreList = new Dictionary<ulong, int>();
Dictionary<ulong, LeaderboardText> leaderboardUIElements = new Dictionary<ulong, LeaderboardText>();
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
public void AddPlayersServerRpc(ulong playerId, string playerName)
{
Instantiate(leaderboardPrefab, leaderboardParent.transform);
AddScoreToList(playerName, 0);
if (!players.ContainsKey(playerId))
{
players.Add(playerId, playerName);
}
if (!scoreList.ContainsKey(playerId))
{
scoreList.Add(playerId, 0);
}
AddPlayerToLeaderboardClientRpc(playerId, playerName);
}
public void AddScoreToList(string playerName, int score)
[Rpc(SendTo.ClientsAndHost)]
private void AddPlayerToLeaderboardClientRpc(ulong playerId, string playerName)
{
if (!scoreList.ContainsKey(playerName)) scoreList.Add(playerName, score);
else scoreList[playerName] = score;
LeaderboardText newLeaderboardElement = Instantiate(leaderboardPrefab, leaderboardParent);
newLeaderboardElement.UpdatePlayerScore(playerId, playerName, 0);
leaderboardUIElements[playerId] = newLeaderboardElement;
}
public void AddScoreToList(ulong playerId, int score)
{
if (IsServer)
{
if (!scoreList.ContainsKey(playerId)) scoreList.Add(playerId, score);
else scoreList[playerId] = score;
UpdateLeaderboard();
UpdateLeaderboardClientRpc();
}
}
private void UpdateLeaderboard()
[Rpc(SendTo.ClientsAndHost)]
private void UpdateLeaderboardClientRpc()
{
var leaderboard = scoreList.OrderByDescending(x => x.Value).ToList();
Debug.Log(scoreList.Count);
Debug.Log(players.Count);
//var leaderboard = scoreList.OrderByDescending(x => x.Value).ToList();
for (int i = 0; i < leaderboard.Count; i++)
//for (int i = 0; i < leaderboard.Count; i++)
//{
// var score = leaderboard[i];
// leaderboardParent.GetChild(i).GetComponent<LeaderboardText>().UpdatePlayerScore(score.Key, score.Value);
//}
}
public void ShowWinMenu()
{
GameManager.Instance.InputManager.enabled = false;
GameManager.Instance.cursorVisible.ShowMouseCursor();
leaderboardWinParent.parent.gameObject.SetActive(true);
for (int i = 0; i < leaderboardWinParent.childCount; i++)
{
var score = leaderboard[i];
leaderboardParent.GetChild(i).GetComponent<LeaderboardText>().UpdatePlayerScore(score.Key, score.Value);
LeaderboardText player = leaderboardWinParent.GetChild(i).gameObject.GetComponent<LeaderboardText>();
string text = (i + 1).ToString() + " " + leaderboardParent.GetChild(i).GetComponent<LeaderboardText>().GetPlayerScore();
player.SetText(text);
}
}
}
......@@ -222,7 +222,7 @@ public class AnimalAi : MonoBehaviour
}
public void HitHunter() // call from animation attack event
{
if (_hunter.TryGetComponent<HumanHealth>(out HumanHealth humanHealth))
if (_hunter != null && _hunter.TryGetComponent<HumanHealth>(out HumanHealth humanHealth))
{
humanHealth.TakeDamage(this);
}
......
......@@ -95,8 +95,8 @@ public class Health : MonoBehaviour
}
public void EndRound()
{
dieParticleSystem.transform.parent = null;
dieParticleSystem.Play();
if (dieParticleSystem != null)
dieParticleSystem.Play();
healthParent.gameObject.SetActive(false);
......
using RTLTMPro;
using System;
using TMPro;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;
public class PlayerDetails : NetworkBehaviour
{
public NetworkVariable<FixedString32Bytes> PlayerName = new NetworkVariable<FixedString32Bytes>(writePerm: NetworkVariableWritePermission.Owner, readPerm: NetworkVariableReadPermission.Everyone);
[field: SerializeField] public Sprite PlayerImage { get; private set; }
[SerializeField] RTLTextMeshPro nameText;
public override void OnNetworkSpawn()
{
PlayerName.OnValueChanged += onNameChanged;
if (IsOwner)
{
PlayerName.Value = new FixedString32Bytes(PlayerPrefs.GetString("PlayerName"));
}
onNameChanged(default, PlayerName.Value);
}
private void onNameChanged(FixedString32Bytes previousValue, FixedString32Bytes newValue)
{
nameText.text = newValue.ToString();
}
}
fileFormatVersion: 2
guid: 5d7d6b6aa5a393e40a69d8bb4d05b43e
\ No newline at end of file
using System;
using Unity.Cinemachine;
using Unity.Netcode;
using Unity.Netcode.Components;
using UnityEngine;
using UnityEngine.AI;
public class PlayerMovement : MonoBehaviour
public class PlayerMovement : NetworkBehaviour
{
[SerializeField] CharacterController characterController;
[SerializeField] float moveSpeed;
......@@ -22,25 +25,49 @@ public class PlayerMovement : MonoBehaviour
characterController = GetComponent<CharacterController>();
_raycastWeapon = GetComponent<RaycastWeapon>();
}
public override void OnNetworkSpawn()
{
if(IsOwner)
{
transform.position = GetRandomPoint();
}
else
{
cam.gameObject.GetComponent<CinemachineCamera>().enabled = false;
enabled = false;
}
}
Vector3 GetRandomPoint()
{
Vector3 randomPoint = Vector3.zero + Random.insideUnitSphere * 30;
randomPoint.y = transform.position.y;
if (NavMesh.SamplePosition(randomPoint, out NavMeshHit hit, 2, NavMesh.AllAreas))
return randomPoint;
else return Vector3.zero;
}
void Update()
{
Gravity();
Movement();
Rotate();
}
private void Gravity()
{
if (!characterController.isGrounded)
_movementDirection.y -= 9.8f * 10 * Time.deltaTime;
}
void Movement()
{
if (_isDie) return;
_movementDirection = new Vector3(_inputManager.Move.x, _movementDirection.y, _inputManager.Move.y);
_movementDirection = new Vector3(_inputManager.Move.x, 0, _inputManager.Move.y);
_movementDirection = transform.TransformDirection(_movementDirection);
Gravity();
characterController.Move(_movementDirection * moveSpeed * Time.deltaTime);
}
private void Gravity()
{
if (!characterController.isGrounded)
_movementDirection.y += Physics.gravity.y * 2 * Time.deltaTime;
}
private void Rotate()
{
......@@ -48,26 +75,28 @@ public class PlayerMovement : MonoBehaviour
{
_rotationDirection += new Vector3(-_inputManager.Look.y, _inputManager.Look.x, 0) * rotateSpeed * Time.deltaTime;
_rotationDirection.x = Mathf.Clamp(_rotationDirection.x, -80, 80);
cam.transform.localRotation = Quaternion.Euler(_rotationDirection.x, 0f, 0f);
transform.rotation = Quaternion.Euler(0, _rotationDirection.y, 0);
}
else
{
Vector3 directionToAnimal = (_raycastWeapon._currentAnimal.transform.position - transform.position).normalized;
Vector3 bodyDir = _raycastWeapon._currentAnimal.position - transform.position;
bodyDir.y = 0;
float targetYRotation = Mathf.Atan2(directionToAnimal.x, directionToAnimal.z) * Mathf.Rad2Deg;
float differenceY = Mathf.DeltaAngle(_rotationDirection.y, targetYRotation);
_rotationDirection.y += differenceY * rotateSpeed * Time.deltaTime;
Quaternion newBodyRotation = Quaternion.LookRotation(bodyDir);
float bodyAngle = newBodyRotation.eulerAngles.y;
float distanceXZ = new Vector2(directionToAnimal.x, directionToAnimal.z).magnitude;
float targetXRotation = -Mathf.Atan2(directionToAnimal.y, distanceXZ) * Mathf.Rad2Deg;
float differenceX = Mathf.DeltaAngle(_rotationDirection.x, targetXRotation);
_rotationDirection.x += differenceX * rotateSpeed * Time.deltaTime;
float bodyDelta = Mathf.DeltaAngle(_rotationDirection.y, bodyAngle);
_rotationDirection.y += bodyDelta * 10 * Time.deltaTime;
cam.transform.localRotation = Quaternion.Euler(_rotationDirection.x, 0f, 0f);
transform.rotation = Quaternion.Euler(0, _rotationDirection.y, 0);
}
Quaternion newCamRotation = Quaternion.LookRotation(_raycastWeapon._currentAnimal.position - cam.transform.position);
float camAngle = newCamRotation.eulerAngles.x;
float camDelta = Mathf.DeltaAngle(_rotationDirection.x, camAngle);
_rotationDirection.x += camDelta * 10 * Time.deltaTime;
}
transform.rotation = Quaternion.Euler(0, _rotationDirection.y, 0);
cam.transform.localRotation = Quaternion.Euler(_rotationDirection.x, 0f, 0f);
}
private void OnEnable()
{
......
......@@ -20,7 +20,7 @@ public class ScanAnimals : MonoBehaviour
{
if (_inputManager.Interact)
{
if (Physics.Raycast(transform.position, _cam.transform.forward, out RaycastHit hit, 100, animalLayer))
if (Physics.Raycast(_cam.transform.position, _cam.transform.forward, out RaycastHit hit, 100, animalLayer))
{
if (hit.collider.TryGetComponent<AnimalDetails>(out AnimalDetails animalDetails))
{
......
using Unity.Netcode;
using UnityEngine;
public class Score : MonoBehaviour
public class Score : NetworkBehaviour
{
[SerializeField] string playerName;
int _score;
RaycastWeapon _raycastWeapon;
void Start()
private void OnEnable()
{
_raycastWeapon = GetComponent<RaycastWeapon>();
_raycastWeapon.onAnimalDie += AnimalDie;
GameManager.Instance.ScoreManager.AddMeToLeaderboard(playerName);
}
private void OnDisable()
{
_raycastWeapon.onAnimalDie -= AnimalDie;
}
public override void OnNetworkSpawn()
{
if (IsOwner)
{
// GameManager.Instance.ScoreManager.AddPlayersServerRpc(NetworkManager.Singleton.LocalClientId, PlayerPrefs.GetString("PlayerName"));
}
}
private void AnimalDie(int score)
{
_score += score;
......@@ -24,6 +32,9 @@ public class Score : MonoBehaviour
}
void AddScoreToLeaderboard()
{
GameManager.Instance.ScoreManager.AddScoreToList(playerName, _score);
if (IsOwner)
{
// GameManager.Instance.ScoreManager.UpdateScoreServerRpc(NetworkManager.Singleton.LocalClientId, _score);
}
}
}
......@@ -5,9 +5,16 @@ public class LeaderboardText : MonoBehaviour
{
[SerializeField] RTLTextMeshPro playerScoreText;
public void UpdatePlayerScore(string playerName, int score)
public void UpdatePlayerScore(ulong playerId,string playerName, int score)
{
playerScoreText.text = $"{playerName}: {score}";
}
public string GetPlayerScore()
{
return playerScoreText.text;
}
public void SetText(string text)
{
playerScoreText.text = text;
}
}
using DG.Tweening;
using DG.Tweening;
using System;
using System.Collections;
using TMPro;
......@@ -7,6 +7,8 @@ using UnityEngine;
public class RaycastWeapon : MonoBehaviour
{
public event Action<int> onAnimalDie;
[field: SerializeField] public Transform _currentAnimal { get; private set; }
[SerializeField] Transform hitPoint;
[SerializeField] bool showRay = true;
[SerializeField] TextMeshProUGUI ammoText;
......@@ -29,10 +31,7 @@ public class RaycastWeapon : MonoBehaviour
bool isReloading;
public event Action<int> onAnimalDie;
Camera _camera;
[field: SerializeField] public Transform _currentAnimal { get; private set; }
private void Start()
{
......@@ -71,21 +70,15 @@ public class RaycastWeapon : MonoBehaviour
else
{
Ray ray = _camera.ViewportPointToRay(new Vector3(.5f, .5f, 0));
Ray _ray = _camera.ViewportPointToRay(new Vector3(.5f, .5f, 0));
if (showRay)
Debug.DrawRay(ray.origin, ray.direction * 100, Color.blue, 1);
if (Physics.SphereCast(ray, rayRadius, out RaycastHit hit, 100, bodyPartLayer))
{
Debug.Log(hit.collider.name);
_currentAnimal = hit.collider.transform;
RaycastHit(hit);
}
}
}
void RaycastHit(RaycastHit hit)
{
if (hit.collider.TryGetComponent<IDamageable>(out IDamageable damageable))
......
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;
public class StartGame : MonoBehaviour
{
[SerializeField] TMP_InputField playerName;
[SerializeField] Button host;
[SerializeField] Button client;
void Start()
{
host.onClick.AddListener(() => { PlayerPrefs.SetString("PlayerName", playerName.text); gameObject.SetActive(false); NetworkManager.Singleton.StartHost(); });
client.onClick.AddListener(() => { PlayerPrefs.SetString("PlayerName", playerName.text); gameObject.SetActive(false); NetworkManager.Singleton.StartClient(); });
}
}
fileFormatVersion: 2
guid: aa4d058fbc279b04aaa4d4f6b4c21d5b
\ No newline at end of file
......@@ -63,7 +63,7 @@ Material:
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Texture: {fileID: 2800000, guid: 13387d8d6a0752545bdb9d6afc166724, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
......
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