} // 玩家在线状态 //--------------------------------------------------------------------- public override Task OnActivateAsync() { DelayDeactivation(TimeSpan.FromMinutes(1)); PlayerServerState = PlayerServerState.Offline; TimerHandleUpdate = RegisterTimer((_) => _update(), null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000)); return(base.OnActivateAsync()); }
PlayerServerState PlayerServerState { get; set; }// 玩家在线状态 //--------------------------------------------------------------------- public override Task OnActivateAsync() { DelayDeactivation(TimeSpan.FromMinutes(1)); PlayerServerState = PlayerServerState.Offline; TimerHandleUpdate = RegisterTimer((_) => _update(), null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000)); return base.OnActivateAsync(); }
//--------------------- win condition ------------------------- void CheckGuardCaughtRobber(PlayerServerState guardState, PlayerServerState robberState) { if (isGameOver) { return; } Vector3 guardForward = new Vector3(Mathf.Cos(Mathf.Deg2Rad * (guardState.rotation.y - 90)), 0, -Mathf.Sin(Mathf.Deg2Rad * (guardState.rotation.y - 90))); Vector3 guardToRobber = robberState.position - guardState.position; float visionAngle = Mathf.Abs(Vector3.Angle(guardForward, guardToRobber)); if (visionAngle > 90) { return; } //visionAngle = 180 - visionAngle; float distance = Vector3.Distance(guardState.position, robberState.position); if (distance < 20f && visionAngle < 20f) { RaycastHit hit; if (Physics.Raycast(guardState.position + new Vector3(0, 0.3f, 0), guardToRobber, out hit, 100f)) { if (hit.distance < distance) { return; } } Debug.Log(visionAngle); isGameOver = true; cmge.EndGameInAllClients(0); } }
void InitPlayer(NetworkConnection conn, int orderNum) { PlayerClientI playerClientI = playerClients[orderNum]; //only create a server state for the last entered player if (orderNum == playerServerStates.Count) { //only add one server state per player PlayerServerState newPlayerState = new PlayerServerState(); newPlayerState.position = possibleSpawnPositions[selectedSpawnPositions[orderNum]].position; newPlayerState.orderNum = orderNum; if (!IsGuard(newPlayerState))//if robber create a dropout point in the position { dropoutPoints.Add(newPlayerState.position); cmge.InstantiateDropoutObject(newPlayerState.position); newPlayerState.money = 0; } else { newPlayerState.money = totalGalleryValue; } Vector3 startingRotation = new Vector3(0, possibleSpawnPositions[selectedSpawnPositions[orderNum]].eulerAngles.y, 0); newPlayerState.rotation = startingRotation; newPlayerState.carriedObjIndex = -1; playerServerStates.Add(newPlayerState); playerClientI.UpdatePlayerState(newPlayerState.position, newPlayerState.rotation); playerClientI.UpdatePlayerState(newPlayerState.position, newPlayerState.rotation); } playerClientI.moveUp = false; playerClientI.moveLeft = false; playerClientI.moveRight = false; //all these methods are broadcasted to each client playerClientI.Init(orderNum); }
private bool IsGuard(PlayerServerState pss) { return(pss.orderNum % 2 == 0); }
//--------------------------------------------------------------------- // 玩家在线状态改变 Task ICellPlayerProxy.s2sPlayerServerStateChange(PlayerServerState new_state) { PlayerServerState = new_state; return(TaskDone.Done); }
//--------------------------------------------------------------------- // 玩家在线状态改变 Task ICellPlayerProxy.s2sPlayerServerStateChange(PlayerServerState new_state) { PlayerServerState = new_state; return TaskDone.Done; }