Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public int Write(ObservationWriter writer)
- {
- if (m_Board.Rows != m_Rows || m_Board.Columns != m_Columns || m_Board.NumCellTypes != m_NumCellTypes)
- {
- Debug.LogWarning(
- $"Board shape changes since sensor initialization. This may cause unexpected results. " +
- $"Old shape: Rows={m_Rows} Columns={m_Columns}, NumCellTypes={m_NumCellTypes} " +
- $"Current shape: Rows={m_Board.Rows} Columns={m_Board.Columns}, NumCellTypes={m_Board.NumCellTypes}"
- );
- }
- if (m_ObservationType == Match3ObservationType.Vector)
- {
- int offset = 0;
- for (var r = 0; r < m_Rows; r++)
- {
- for (var c = 0; c < m_Columns; c++)
- {
- var val = m_Board.GetCellType(r, c);
- for (var i = 0; i < m_NumCellTypes; i++)
- {
- writer[offset] = (i == val) ? 1.0f : 0.0f;
- offset++;
- }
- if (m_NumSpecialTypes > 0)
- {
- var special = m_Board.GetSpecialType(r, c);
- for (var i = 0; i < SpecialTypeSize; i++)
- {
- writer[offset] = (i == special) ? 1.0f : 0.0f;
- offset++;
- }
- }
- }
- }
- return offset;
- }
- else
- {
- // TODO combine loops? Only difference is inner-most statement.
- float[,] m_Valid =new float[m_Board.Rows, m_Board.Columns];
- for (int i = 0; i < m_Board.Rows; i++)
- {
- for (int j = 0; j < m_Board.Columns; j++)
- {
- m_Valid[i, i] = 0.0f;
- }
- }
- foreach (var move in m_Board.ValidMoves())
- {
- m_Valid[move.Row, move.Column] = 1.0f;
- }
- int offset = 0;
- for (var r = 0; r < m_Rows; r++)
- {
- for (var c = 0; c < m_Columns; c++)
- {
- writer[r, c, 0] = m_Valid[r, c];
- offset++;
- var val = m_Board.GetCellType(r, c);
- for (var i = 1; i < m_NumCellTypes+1; i++)
- {
- writer[r, c, i] = (i == val) ? 1.0f : 0.0f;
- offset++;
- }
- if (m_NumSpecialTypes > 0)
- {
- var special = m_Board.GetSpecialType(r, c);
- for (var i = 0; i < SpecialTypeSize; i++)
- {
- writer[offset] = (i == special) ? 1.0f : 0.0f;
- offset++;
- }
- }
- }
- }
- return offset;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement