コード例 #1
0
    /// <summary>
    /// Write each player's turns into the replay.
    /// </summary>
    public void ReplayWriteTurns(int Turn, CActionTurn[] Turns)
    {
        if (_replayState == EReplayState.RS_RECORD)
        {
            _replayWriter.Write((byte)1);
            _replayWriter.Write(Turn);

            for (int j = 0; j < Turns.Length; ++j)
            {
                CActionTurn turn = Turns[j];

                _replayWriter.Write((byte)2);
                _replayWriter.Write((byte)turn.mPlayerID);
                _replayWriter.Write((byte)turn.mActionBuffer.Count);

                for (int i = 0; i < turn.mActionBuffer.Count; ++i)
                {
                    CUserAction action = turn.mActionBuffer[i];
                    _replayWriter.Write((int)action.mID);
                    _replayWriter.Write(action.mInfo);
                    _replayWriter.Write(action.mX);
                    _replayWriter.Write(action.mY);
                }
            }

            _replayWriter.Flush();
        }
    }
コード例 #2
0
    private void _AddUserAction(CUserAction Action)
    {
        // TODO: don't gather actions while simulation is paused waiting for turns??

        Action.mPlayerID = _currentPlayer;
        Action.mTurn     = _simTickCount;
        _localActionBuffer.Add(Action);
    }
コード例 #3
0
    public override byte[] Serialize()
    {
        _writer.Write(mTurn.mTurn);
        _writer.Write((byte)mTurn.mPlayerID);
        _writer.Write((byte)mTurn.mActionBuffer.Count);
        _writer.Write((int)mTurn.mHash);

        for (int i = 0; i < mTurn.mActionBuffer.Count; ++i)
        {
            CUserAction action = mTurn.mActionBuffer[i];
            _writer.Write((int)action.mID);
            _writer.Write(action.mInfo);
            _writer.Write(action.mX);
            _writer.Write(action.mY);
        }

        _WriteHeader(type_e.T_TURN);

        return(_buffer.ToArray());
    }
コード例 #4
0
    override protected void _Deserialize()
    {
        int currentTurn = _reader.ReadInt32();
        int playerID    = _reader.ReadByte();
        int actionCount = _reader.ReadByte();
        int hash        = _reader.ReadInt32();

        mTurn       = new CActionTurn(playerID, currentTurn);
        mTurn.mHash = hash;

        for (int i = 0; i < actionCount; ++i)
        {
            CUserAction action = new CUserAction();
            action.mID       = (CUserAction.EType)_reader.ReadInt32();
            action.mInfo     = _reader.ReadInt32();
            action.mX        = _reader.ReadInt32();
            action.mY        = _reader.ReadInt32();
            action.mPlayerID = playerID;
            action.mTurn     = currentTurn;

            mTurn.mActionBuffer.Add(action);
            //Debug.Log("Got Action " + action.mPlayerID + " " + action.mID.ToString());
        }
    }
コード例 #5
0
 public void PushUserAction(CUserAction Action)
 {
     // TODO: Gather actions for distribution over network.
     _simThread.PushUserAction(Action);
 }
コード例 #6
0
    /// <summary>
    /// Get actions up to and including the specified game frame.
    /// </summary>
    public void ReplayGetTurns(int Turn, List <CActionTurn> ActionTurns)
    {
        if (_replayState != EReplayState.RS_VIEW)
        {
            return;
        }

        int currentTurn = 0;

        try
        {
            while (true)
            {
                int blockType = _replayReader.ReadByte();

                if (blockType == 1)
                {
                    currentTurn = _replayReader.ReadInt32();

                    if (currentTurn > Turn)
                    {
                        _replayReader.BaseStream.Seek(-5, SeekOrigin.Current);
                        return;
                    }
                    else if (currentTurn < Turn)
                    {
                        Debug.LogError("Can't be reading a turn less than current!");
                        return;
                    }
                }
                else if (blockType == 2)
                {
                    int playerID    = _replayReader.ReadByte();
                    int actionCount = _replayReader.ReadByte();

                    CActionTurn turn = new CActionTurn(playerID, currentTurn);

                    for (int i = 0; i < actionCount; ++i)
                    {
                        CUserAction action = new CUserAction();
                        action.mID       = (CUserAction.EType)_replayReader.ReadInt32();
                        action.mInfo     = _replayReader.ReadInt32();
                        action.mX        = _replayReader.ReadInt32();
                        action.mY        = _replayReader.ReadInt32();
                        action.mPlayerID = playerID;
                        action.mTurn     = currentTurn;

                        turn.mActionBuffer.Add(action);
                    }

                    ActionTurns.Add(turn);
                }
            }
        }
        catch (Exception e)
        {
            Debug.Log("Replay has ended: " + e.Message);
            _replayState = EReplayState.RS_NONE;
            return;
        }
    }
コード例 #7
0
 public void PushUserAction(CUserAction Action)
 {
     mEventBufferIn.PushEvent(new CThreadEvent(CThreadEvent.EType.T_ACTION, Action));
 }