//Depricated Function /* * public void AIMove(int id, Vector3 pos) * { * NetworkStructs.AIMoveData msg = new NetworkStructs.AIMoveData(id, pos); * * Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.MOVEAI, NetworkStructs.getBytes(msg)), unreliableChannel); * } */ //if AI movement is detected that isn't local private void AIMoveDetected(NetworkStructs.AIMoveData data) { GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); foreach (GameObject enemy in enemies) { if (enemy.GetComponent <AIMineBot>().id == data.id) { enemy.GetComponent <AIMineBot>().RecieveMove(new Vector3(data.xPos, data.yPos, data.zPos)); return; } } }
//update the position of the AI private void AIPositionUpdate() { //iterate through our dictionary to make sure we don't have any duplicates and to make sure each AI moves foreach (AI a in AIList.Values) { if (!a.switchBack) { //tells the AI to keep moving a.current = Vector3.MoveTowards(a.current, a.pos1, 0.01f); if (Vector3.Magnitude(a.current - a.pos1) < 0.1f) { //tells the AI to swap directions a.switchBack = true; } } else { //tells the AI to keep moving in the opposite direction of the above movement a.current = Vector3.MoveTowards(a.current, a.pos2, 0.01f); if (Vector3.Magnitude(a.current - a.pos2) < 0.1f) { //tells the AI to swap directions again a.switchBack = false; } } //send delay so we aren't sending it a shit ton of times per second if (sendDelay <= lastSent && clients.Count != 0) { lastSent = 0; NetworkStructs.AIMoveData msg = new NetworkStructs.AIMoveData(a.id, a.current); Send(NetworkStructs.AddTag(NetworkStructs.MessageTypes.MOVEAI, NetworkStructs.getBytes(msg)), unreliableChannel); } else { lastSent += Time.deltaTime; } } }
private void Update() { //make sure the player is connected to the server and if they are reveal the chatbox if (!isConnected) { return; } else { chatBox.SetActive(true); } //message event handlers int recHostId; int connectionId; int channelId; byte[] recBuffer = new byte[1024]; int bufferSize = 1024; int dataSize; byte error; NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error); switch (recData) { case NetworkEventType.DataEvent: { NetworkStructs.MessageTypes type = (NetworkStructs.MessageTypes)recBuffer[0]; byte[] packet = new byte[1024]; Array.Copy(recBuffer, 1, packet, 0, bufferSize - 1); switch (type) { case NetworkStructs.MessageTypes.ASKNAME: //get username { NetworkStructs.NameRequestData data = NetworkStructs.fromBytes <NetworkStructs.NameRequestData>(packet); OnAskName(data); } break; case NetworkStructs.MessageTypes.CNN: //connection { NetworkStructs.NameRequestData data = NetworkStructs.fromBytes <NetworkStructs.NameRequestData>(packet); SpawnPlayer(data.str, data.id); //CallAIs(); SetupAIs(); } break; case NetworkStructs.MessageTypes.DC: //disconnection { NetworkStructs.IntData data = NetworkStructs.fromBytes <NetworkStructs.IntData>(packet); PlayerDisconnected(data.data); } break; case NetworkStructs.MessageTypes.MOVE: { NetworkStructs.PositionVelocityData data = NetworkStructs.fromBytes <NetworkStructs.PositionVelocityData>(packet); MovementDetected(data); } break; case NetworkStructs.MessageTypes.ROT: { NetworkStructs.RotationData data = NetworkStructs.fromBytes <NetworkStructs.RotationData>(packet); RotationgDetected(data); } break; case NetworkStructs.MessageTypes.MOVEAI: { NetworkStructs.AIMoveData data = NetworkStructs.fromBytes <NetworkStructs.AIMoveData>(packet); AIMoveDetected(data); } break; case NetworkStructs.MessageTypes.MESSAGE: { NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet); recieveMessage(data); } break; case NetworkStructs.MessageTypes.ADMIN: { NetworkStructs.StringData data = NetworkStructs.fromBytes <NetworkStructs.StringData>(packet); adminCommands(data.str, ourClientId); } break; default: //invalid key case //Debug.Log("INVALID CLIENT MESSAGE : " + msg); break; } } break; case NetworkEventType.BroadcastEvent: { } break; } }