Ejemplo n.º 1
0
        }                                                // 玩家在线状态

        //---------------------------------------------------------------------
        public override Task OnActivateAsync()
        {
            DelayDeactivation(TimeSpan.FromMinutes(1));

            PlayerServerState = PlayerServerState.Offline;

            TimerHandleUpdate = RegisterTimer((_) => _update(), null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000));

            return(base.OnActivateAsync());
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
    //--------------------- 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);
        }
    }
Ejemplo n.º 4
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);
    }
Ejemplo n.º 5
0
 private bool IsGuard(PlayerServerState pss)
 {
     return(pss.orderNum % 2 == 0);
 }
Ejemplo n.º 6
0
        //---------------------------------------------------------------------
        // 玩家在线状态改变
        Task ICellPlayerProxy.s2sPlayerServerStateChange(PlayerServerState new_state)
        {
            PlayerServerState = new_state;

            return(TaskDone.Done);
        }
Ejemplo n.º 7
0
        //---------------------------------------------------------------------
        // 玩家在线状态改变
        Task ICellPlayerProxy.s2sPlayerServerStateChange(PlayerServerState new_state)
        {
            PlayerServerState = new_state;

            return TaskDone.Done;
        }