/// <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(); } }
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); }
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()); }
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()); } }
public void PushUserAction(CUserAction Action) { // TODO: Gather actions for distribution over network. _simThread.PushUserAction(Action); }
/// <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; } }
public void PushUserAction(CUserAction Action) { mEventBufferIn.PushEvent(new CThreadEvent(CThreadEvent.EType.T_ACTION, Action)); }