Commit aa32937b by alsunj

Create server authorative rogue enemy

parent 39dc1546
......@@ -591,7 +591,7 @@ ModelImporter:
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events:
- time: 0.9712794
- time: 0.28687572
functionName: ReceiveTargetShotEventFromAnimator
data:
objectReferenceParameter: {fileID: 11500000, guid: f756dd42a94556a4489ea5f3fa82f1c2, type: 3}
......
......@@ -17,12 +17,9 @@ public class Enemy : NetworkBehaviour
private bool _isAiming;
private Vector3 _lookingDirection;
private bool _targetLocked;
private Collider[] hitColliders;
private Collider[]
hitColliders = new Collider[10]; //TODO: this should be the amount of players connected to the network.
private void Start()
public void InitializeEnemy()
{
_enemyManager = GetComponent<EnemyManager>();
if (_enemyManager != null)
......@@ -38,7 +35,7 @@ public class Enemy : NetworkBehaviour
if (_enemyAnimator != null)
{
_enemyAnimator.InitializeEvents(_enemyManager.enemyEvents);
_enemyAnimator.receiveTargetShotEventFromAnimator += TargetShotEndEventServerRpc;
_enemyAnimator.receiveTargetShotEventFromAnimator += TargetShotAnimationEndEventServerRpc;
_enemyAnimator.receiveTargetAimedEventFromAnimator += ShootTargetServerRpc;
_enemyAnimator.receiveTargetReloadEventFromAnimator += ReloadCrossbowServerRpc;
}
......@@ -52,32 +49,35 @@ public class Enemy : NetworkBehaviour
throw new Exception("EnemySettings is not set in the inspector");
}
if (arrow == null)
{
throw new Exception("Arrow is not set in the inspector");
}
if (weapon == null)
{
throw new Exception("Weapon is not set in the inspector");
}
_arrowSpawnPoint = weapon.transform.Find("ArrowSpawnPoint");
_arrowSpawnPoint = weapon.transform.Find("Skeleton_Crossbow/ArrowSpawnPoint");
if (_arrowSpawnPoint == null)
{
throw new Exception("ArrowSpawnPoint is not found as a child of Weapon");
}
if (arrow == null)
{
throw new Exception("Arrow is not set in the inspector");
}
InstantiateArrowServer();
hitColliders = new Collider[NetworkManager.Singleton.ConnectedClients.Count];
}
public void InstantiateArrowServer()
{
_instantiatedArrow = Instantiate(arrow, _arrowSpawnPoint.position, _arrowSpawnPoint.rotation)
.GetComponent<NetworkObject>();
_instantiatedArrow.Spawn();
// _instantiatedArrow.transform.SetParent(weapon.transform);
_instantiatedArrow.GetComponent<Arrow>().SetTargetTransform(_arrowSpawnPoint.transform);
_isCrossbowLoaded = true;
}
......@@ -97,35 +97,23 @@ public class Enemy : NetworkBehaviour
}
[ServerRpc(RequireOwnership = false)]
public void TargetShotEndEventServerRpc()
{
UpdateArrowTransformClientRpc(new NetworkObjectReference(_instantiatedArrow), _arrowSpawnPoint.position,
_arrowSpawnPoint.rotation);
}
[ClientRpc]
private void UpdateArrowTransformClientRpc(NetworkObjectReference arrowReference, Vector3 position,
Quaternion rotation)
[ServerRpc]
public void TargetShotAnimationEndEventServerRpc()
{
if (arrowReference.TryGet(out NetworkObject arrowObject))
{
arrowObject.transform.position = position;
arrowObject.transform.rotation = rotation;
}
_instantiatedArrow.GetComponent<Arrow>().RemoveTargetTransform();
_instantiatedArrow.GetComponent<Rigidbody>().linearVelocity = _lookingDirection * enemySettings.shootingRange;
//UpdateArrowTransformClientRpc(new NetworkObjectReference(_instantiatedArrow), _arrowSpawnPoint.position,
// _arrowSpawnPoint.rotation);
_enemyManager.enemyEvents.EnemyReload();
}
[ServerRpc(RequireOwnership = false)]
[ServerRpc]
private void ReloadCrossbowServerRpc()
{
//_instantiatedArrow.gameObject.SetActive(false);
// _instantiatedArrow.transform.SetParent(weapon.transform);
_instantiatedArrow.GetComponent<Rigidbody>().linearVelocity = Vector3.zero;
// _instantiatedArrow.gameObject.SetActive(false);
_instantiatedArrow.transform.position = _arrowSpawnPoint.position;
_instantiatedArrow.transform.rotation = _arrowSpawnPoint.rotation;
// _instantiatedArrow.transform.SetParent(weapon.transform);
_instantiatedArrow.GetComponent<Arrow>().SetTargetTransform(_arrowSpawnPoint.transform);
_targetLocked = false;
_isCrossbowLoaded = true;
}
......@@ -155,39 +143,23 @@ public class Enemy : NetworkBehaviour
}
_targetLocked = true;
RotateTowardsTargetClientRpc(closestCollider.gameObject.GetComponent<NetworkObject>().NetworkObjectId);
// RotateTowardsTargetClientRpc(closestCollider.gameObject.GetComponent<NetworkObject>().NetworkObjectId);
GameObject targetObject = closestCollider.gameObject;
_enemyManager.enemyEvents.EnemyAim();
_lookingDirection = (targetObject.transform.position - transform.position).normalized;
Quaternion lookRotation =
Quaternion.LookRotation(new Vector3(_lookingDirection.x, 0, _lookingDirection.z));
transform.DORotateQuaternion(lookRotation, 0.5f);
}
}
}
[ClientRpc]
private void RotateTowardsTargetClientRpc(ulong targetNetworkObjectId)
{
var targetObject = NetworkManager.Singleton.SpawnManager.SpawnedObjects[targetNetworkObjectId];
if (targetObject != null)
{
_enemyManager.enemyEvents.EnemyAim();
_lookingDirection = (targetObject.transform.position - transform.position).normalized;
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(_lookingDirection.x, 0, _lookingDirection.z));
transform.DORotateQuaternion(lookRotation, 0.5f);
}
}
[ServerRpc]
private void ShootTargetServerRpc()
{
_instantiatedArrow.transform.SetParent(null);
_instantiatedArrow.transform.rotation = weapon.transform.rotation;
_instantiatedArrow.GetComponent<Rigidbody>().linearVelocity = _lookingDirection * enemySettings.shootingRange;
_shootingTimer = enemySettings.shootingDelay;
_isCrossbowLoaded = false;
ShootTargetClientRpc();
}
[ClientRpc]
private void ShootTargetClientRpc()
{
_enemyManager.enemyEvents.EnemyAttack();
}
}
\ No newline at end of file
......@@ -33,8 +33,9 @@ public class EnemySpawner : MonoBehaviour
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
NetworkManager.Singleton.OnServerStarted += OnServerStartedServerRpc;
NetworkManager.Singleton.OnServerStopped += OnServerStoppedServerRpc;
OnServerStartedServerRpc();
//NetworkManager.Singleton.OnServerStarted += OnServerStartedServerRpc;
// NetworkManager.Singleton.OnServerStopped += OnServerStoppedServerRpc;
}
[ServerRpc]
......@@ -42,14 +43,15 @@ public class EnemySpawner : MonoBehaviour
{
if (!state)
{
NetworkManager.Singleton.OnServerStarted -= OnServerStartedServerRpc;
NetworkManager.Singleton.OnServerStopped -= OnServerStoppedServerRpc;
// NetworkManager.Singleton.OnServerStarted -= OnServerStartedServerRpc;
// NetworkManager.Singleton.OnServerStopped -= OnServerStoppedServerRpc;
}
}
[ServerRpc]
private void OnServerStartedServerRpc()
{
Debug.Log("Setting up enemy spawner");
ApplyExistingEnemyArrows();
FindEnemySpawnPositions();
FindEnemyConfig();
......@@ -68,7 +70,9 @@ public class EnemySpawner : MonoBehaviour
{
if (_RogueEnemySpawnTimer <= 0f)
{
Vector3 spawnPosition = GetSpawnPosition(_spawnedSlimeEnemyCount);
var random = new Unity.Mathematics.Random((uint)System.DateTime.Now.Ticks);
Vector3 spawnPosition = GetSpawnPosition(_spawnedRogueEnemyCount);
spawnPosition += new Vector3(random.NextFloat(-5f, 5f), 0, random.NextFloat(-5f, 5f));
SpawnRogueEnemyServerRpc(spawnPosition);
_spawnedRogueEnemyCount++;
_RogueEnemySpawnTimer = _RogueEnemySpawnCooldown;
......@@ -85,7 +89,9 @@ public class EnemySpawner : MonoBehaviour
{
if (_SlimeEnemySpawnTimer <= 0f)
{
var random = new Unity.Mathematics.Random((uint)System.DateTime.Now.Ticks);
Vector3 spawnPosition = GetSpawnPosition(_spawnedSlimeEnemyCount);
spawnPosition += new Vector3(random.NextFloat(-5f, 5f), 0, random.NextFloat(-5f, 5f));
SpawnSlimeEnemyServerRpc(spawnPosition);
_spawnedSlimeEnemyCount++;
......@@ -105,9 +111,16 @@ public class EnemySpawner : MonoBehaviour
GameObject spawnedEnemy =
Instantiate(_rogueEnemyPrefab, spawnPosition, Quaternion.identity, gameObject.transform);
spawnedEnemy.GetComponent<NetworkObject>().Spawn();
SpawnEnemyForClientRpc(spawnedEnemy);
}
}
[ClientRpc]
private void SpawnEnemyForClientRpc(GameObject spawnedEnemy)
{
spawnedEnemy.GetComponent<Enemy>().InitializeEnemy();
}
[ServerRpc]
private void SpawnSlimeEnemyServerRpc(Vector3 spawnPosition)
{
......@@ -115,6 +128,7 @@ public class EnemySpawner : MonoBehaviour
{
GameObject spawnedEnemy = Instantiate(_slimeEnemyPrefab, spawnPosition, Quaternion.identity);
spawnedEnemy.GetComponent<NetworkObject>().Spawn();
// spawnedEnemy.GetComponent<Enemy>().InitializeEnemy();
}
}
......
using System;
using UnityEngine;
using UnityEngine.UIElements;
public class Arrow : MonoBehaviour
{
public BoxCollider _boxCollider;
private Transform _targetTransform;
void Start()
{
_boxCollider = GetComponent<BoxCollider>();
}
private void Update()
{
FollowTarget();
}
private void FollowTarget()
{
if (_targetTransform != null)
{
gameObject.transform.position = _targetTransform.position;
gameObject.transform.rotation = _targetTransform.rotation;
}
}
public void SetTargetTransform(Transform targetTransform)
{
_targetTransform = targetTransform;
}
public void RemoveTargetTransform()
{
_targetTransform = null;
}
}
\ No newline at end of file
......@@ -222,11 +222,11 @@ public class ClientConnectionManager : NetworkBehaviour
if (IsServer)
{
Scene gameScene = SceneManager.GetSceneByName(scenename);
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= OnSceneLoadCompleted;
SceneManager.MoveGameObjectToScene(NetworkManager.Singleton.gameObject, gameScene);
SceneManager.MoveGameObjectToScene(gameConfigHolder, gameScene);
SceneManager.SetActiveScene(gameScene);
CheckSceneLoadCompletion(connectedClientIds, clientscompleted, clientstimedout);
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= OnSceneLoadCompleted;
}
}
......
using UnityEngine;
using UnityEngine.UIElements;
public class Arrow : MonoBehaviour
{
private BoxCollider _boxCollider;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
_boxCollider = GetComponent<BoxCollider>();
}
// Update is called once per frame
void Update()
{
}
}
\ No newline at end of file
......@@ -46,7 +46,7 @@ Rigidbody:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8885891558877188487}
serializedVersion: 4
m_Mass: 100
m_Mass: 2
m_Drag: 0
m_AngularDrag: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
......@@ -60,7 +60,7 @@ Rigidbody:
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
......@@ -77,6 +77,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5029c6c72ae05b4419cabf4c1e96e35f, type: 3}
m_Name:
m_EditorClassIdentifier:
_boxCollider: {fileID: 0}
--- !u!65 &8067914320767520699
BoxCollider:
m_ObjectHideFlags: 0
......
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6521650389184310774
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8993620249965639686}
m_Layer: 0
m_Name: ArrowSpawnPoint
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8993620249965639686
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6521650389184310774}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.005, y: 0.1774, z: 0.638}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1876210089091406831}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &6946634317865969344
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2178326088145859158}
m_Layer: 0
m_Name: Crossbow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2178326088145859158
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6946634317865969344}
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:
- {fileID: 1876210089091406831}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &2126572447912262660
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 2178326088145859158}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalPosition.x
value: 0.71318156
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalPosition.y
value: 1.1067611
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalRotation.w
value: -0.50000006
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalRotation.x
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalRotation.y
value: -0.49999994
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalRotation.z
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
propertyPath: m_Name
value: Skeleton_Crossbow
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
insertIndex: -1
addedObject: {fileID: 8993620249965639686}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
--- !u!4 &1876210089091406831 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: c88a69f7965560c47b6ffa4eed82887f, type: 3}
m_PrefabInstance: {fileID: 2126572447912262660}
m_PrefabAsset: {fileID: 0}
fileFormatVersion: 2
guid: 9180e072eabc06f4c9448c5d26b5425e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
......@@ -337,7 +337,7 @@ MonoBehaviour:
_slimeSpawnCooldownTime: 0.1
_rogueSpawnCooldownTime: 1
playerPrefab: {fileID: 7039287367920326276, guid: 702bb31d143eeaa4792be36b28160445, type: 3}
_startGameCountdownTimer: 10
_startGameCountdownTimer: 1
--- !u!114 &529219308
MonoBehaviour:
m_ObjectHideFlags: 0
......
......@@ -240,50 +240,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &863308618
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 863308619}
- component: {fileID: 863308620}
m_Layer: 0
m_Name: Helper
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!4 &863308619
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 863308618}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.057174295, y: 3.4774704, z: -5.9577436}
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!114 &863308620
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 863308618}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9484dda6623b48b4999b76e13e6dd9cc, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &865924115
GameObject:
m_ObjectHideFlags: 0
......@@ -988,4 +944,3 @@ SceneRoots:
- {fileID: 865924118}
- {fileID: 6950935288098905811}
- {fileID: 1817452062}
- {fileID: 863308619}
......@@ -12,6 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 616231e36fe89cd42bd7aea67dfa0ace, type: 3}
m_Name: RogueSettings
m_EditorClassIdentifier:
WeaponPrefab: {fileID: 6946634317865969344, guid: 9180e072eabc06f4c9448c5d26b5425e, type: 3}
targetLayer:
serializedVersion: 2
m_Bits: 512
......
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 sign in to comment