diff --git a/LinearAlgebra/Matrix.cs b/LinearAlgebra/Matrix.cs index 95978be..e1b453c 100644 --- a/LinearAlgebra/Matrix.cs +++ b/LinearAlgebra/Matrix.cs @@ -3,12 +3,14 @@ using System.Diagnostics; using Passer.LinearAlgebra; #if UNITY_5_3_OR_NEWER using Vector3Float = UnityEngine.Vector3; +using Vector2Float = UnityEngine.Vector2; #endif +using Quaternion = UnityEngine.Quaternion; public readonly struct Slice { - public int start { get; } - public int stop { get; } - public Slice(int start, int stop) { + public uint start { get; } + public uint stop { get; } + public Slice(uint start, uint stop) { this.start = start; this.stop = stop; } @@ -27,21 +29,39 @@ public class Matrix2 { this.data = data; } + public Matrix2 Clone() { + float[,] data = new float[this.nRows, nCols]; + for (int rowIx = 0; rowIx < this.nRows; rowIx++) { + for (int colIx = 0; colIx < this.nCols; colIx++) + data[rowIx, colIx] = this.data[rowIx, colIx]; + } + return new Matrix2(data); + } + public static Matrix2 Zero(uint nRows, uint nCols) { return new Matrix2(nRows, nCols); } + public static Matrix2 FromVector3(Vector3Float v) { + float[,] result = new float[3, 1]; + result[0, 0] = v.x; + result[1, 0] = v.y; + result[2, 0] = v.z; + return new Matrix2(result); + } + public static Matrix2 Identity(uint size) { return Diagonal(1, size); - // float[,] resultData = new float[size, size]; - // for (int i = 0; i < size; i++) - // resultData[i, i] = 1.0f; - // return new Matrix2(resultData); + } + public static Matrix2 Identity(uint nRows, uint nCols) { + Matrix2 m = Zero(nRows, nCols); + m.FillDiagonal(1); + return m; } public static Matrix2 Diagonal(Matrix1 v) { - float[,] resultData = new float[v.magnitude, v.magnitude]; - for (int ix = 0; ix < v.magnitude; ix++) + float[,] resultData = new float[v.size, v.size]; + for (int ix = 0; ix < v.size; ix++) resultData[ix, ix] = v.data[ix]; return new Matrix2(resultData); } @@ -51,6 +71,16 @@ public class Matrix2 { resultData[ix, ix] = f; return new Matrix2(resultData); } + public void FillDiagonal(Matrix1 v) { + uint n = Math.Min(Math.Min(this.nRows, this.nCols), v.size); + for (int ix = 0; ix < n; ix++) + this.data[ix, ix] = v.data[ix]; + } + public void FillDiagonal(float f) { + uint n = Math.Min(this.nRows, this.nCols); + for (int ix = 0; ix < n; ix++) + this.data[ix, ix] = f; + } public static Matrix2 SkewMatrix(Vector3Float v) { float[,] result = new float[3, 3] { @@ -61,6 +91,44 @@ public class Matrix2 { return new Matrix2(result); } + public Vector3Float GetRow3(int rowIx) { + uint cols = this.nCols; + Vector3Float row = new() { + x = this.data[rowIx, 0], + y = this.data[rowIx, 1], + z = this.data[rowIx, 2] + }; + return row; + } + public void SetRow(int rowIx, Matrix1 v) { + for (uint ix = 0; ix < v.size; ix++) + this.data[rowIx, ix] = v.data[ix]; + } + public void SetRow3(int rowIx, Vector3Float v) { + this.data[rowIx, 0] = v.x; + this.data[rowIx, 1] = v.y; + this.data[rowIx, 2] = v.z; + } + + public Matrix1 GetColumn(int colIx) { + float[] column = new float[this.nRows]; + for (int i = 0; i < this.nRows; i++) { + column[i] = this.data[i, colIx]; + } + return new Matrix1(column); + } + + public static bool AllClose(Matrix2 A, Matrix2 B, float atol = 1e-08f) { + for (int i = 0; i < A.nRows; i++) { + for (int j = 0; j < A.nCols; j++) { + float d = MathF.Abs(A.data[i, j] - B.data[i, j]); + if (d > atol) + return false; + } + } + return true; + } + public Matrix2 Transpose() { float[,] resultData = new float[this.nCols, this.nRows]; for (uint rowIx = 0; rowIx < this.nRows; rowIx++) { @@ -70,6 +138,9 @@ public class Matrix2 { return new Matrix2(resultData); // double checked code } + public Matrix2 transposed { + get => Transpose(); + } public static Matrix2 operator -(Matrix2 m) { float[,] result = new float[m.nRows, m.nCols]; @@ -147,31 +218,51 @@ public class Matrix2 { ); } - public static Matrix2 operator *(Matrix2 A, float s) { float[,] result = new float[A.nRows, A.nCols]; for (int i = 0; i < A.nRows; i++) { for (int j = 0; j < A.nCols; j++) - result[i, j] += A.data[i, j] * s; + result[i, j] = A.data[i, j] * s; } return new Matrix2(result); } - public static Matrix2 operator *(float scalar, Matrix2 A) { - return A * scalar; + public static Matrix2 operator *(float s, Matrix2 A) { + return A * s; + } + + public static Matrix2 operator /(Matrix2 A, float s) { + float[,] result = new float[A.nRows, A.nCols]; + + for (int i = 0; i < A.nRows; i++) { + for (int j = 0; j < A.nCols; j++) + result[i, j] = A.data[i, j] / s; + } + + return new Matrix2(result); + } + public static Matrix2 operator /(float s, Matrix2 A) { + float[,] result = new float[A.nRows, A.nCols]; + + for (int i = 0; i < A.nRows; i++) { + for (int j = 0; j < A.nCols; j++) + result[i, j] = s / A.data[i, j]; + } + + return new Matrix2(result); } public Matrix2 Slice(Slice slice) { return Slice(slice.start, slice.stop); } - public Matrix2 Slice(int from, int to) { + public Matrix2 Slice(uint from, uint to) { if (from < 0 || to >= this.nRows) throw new System.ArgumentException("Slice index out of range."); float[,] result = new float[to - from, this.nCols]; int resultRowIx = 0; - for (int rowIx = from; rowIx < to; rowIx++) { + for (uint rowIx = from; rowIx < to; rowIx++) { for (int colIx = 0; colIx < this.nCols; colIx++) { result[resultRowIx, colIx] = this.data[rowIx, colIx]; } @@ -180,17 +271,36 @@ public class Matrix2 { return new Matrix2(result); } + public Matrix2 Slice(Slice rowRange, Slice colRange) { + return Slice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop)); + } + + public Matrix2 Slice((uint start, uint stop) rowRange, (uint start, uint stop) colRange) { + float[,] result = new float[rowRange.stop - rowRange.start, colRange.stop - colRange.start]; + + uint resultRowIx = 0; + uint resultColIx = 0; + for (uint i = rowRange.start; i < rowRange.stop; i++) { + for (uint j = colRange.start; j < colRange.stop; j++) + result[resultRowIx, resultColIx] = this.data[i, j]; + } + return new Matrix2(result); + } + public void UpdateSlice(Slice slice, Matrix2 m) { int mRowIx = 0; - for (int rowIx = slice.start; rowIx < slice.stop; rowIx++) { + for (uint rowIx = slice.start; rowIx < slice.stop; rowIx++, mRowIx++) { for (int colIx = 0; colIx < this.nCols; colIx++) this.data[rowIx, colIx] = m.data[mRowIx, colIx]; } } public void UpdateSlice(Slice rowRange, Slice colRange, Matrix2 m) { - for (int i = rowRange.start; i < rowRange.stop; i++) { - for (int j = colRange.start; j < colRange.stop; j++) - this.data[i, j] = m.data[i - rowRange.start, j - colRange.stop]; + UpdateSlice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop), m); + } + public void UpdateSlice((uint start, uint stop) rowRange, (uint start, uint stop) colRange, Matrix2 m) { + for (uint i = rowRange.start; i < rowRange.stop; i++) { + for (uint j = colRange.start; j < colRange.stop; j++) + this.data[i, j] = m.data[i - rowRange.start, j - colRange.start]; } } @@ -246,23 +356,63 @@ public class Matrix2 { return new Matrix2(inverse); } + + public float Determinant() { + uint n = this.nRows; + if (n != this.nCols) + throw new System.ArgumentException("Matrix must be square."); + + if (n == 1) + return this.data[0, 0]; // Base case for 1x1 matrix + + if (n == 2) // Base case for 2x2 matrix + return this.data[0, 0] * this.data[1, 1] - this.data[0, 1] * this.data[1, 0]; + + float det = 0; + for (int col = 0; col < n; col++) + det += (col % 2 == 0 ? 1 : -1) * this.data[0, col] * this.Minor(0, col).Determinant(); + + return det; + } + + // Helper function to compute the minor of a matrix + private Matrix2 Minor(int rowToRemove, int colToRemove) { + uint n = this.nRows; + float[,] minor = new float[n - 1, n - 1]; + + int r = 0, c = 0; + for (int i = 0; i < n; i++) { + if (i == rowToRemove) continue; + + c = 0; + for (int j = 0; j < n; j++) { + if (j == colToRemove) continue; + + minor[r, c] = this.data[i, j]; + c++; + } + r++; + } + + return new Matrix2(minor); + } } public class Matrix1 { public float[] data { get; } - public uint magnitude => (uint)data.GetLength(0); + public uint size => (uint)data.GetLength(0); - public Matrix1(uint magnitude) { - this.data = new float[magnitude]; + public Matrix1(uint size) { + this.data = new float[size]; } public Matrix1(float[] data) { this.data = data; } - public static Matrix1 Zero(uint magnitude) { - return new Matrix1(magnitude); + public static Matrix1 Zero(uint size) { + return new Matrix1(size); } public static Matrix1 FromVector2(Vector2Float v) { @@ -280,44 +430,88 @@ public class Matrix1 { return new Matrix1(result); } + public static Matrix1 FromQuaternion(Quaternion q) { + float[] result = new float[4]; + result[0] = q.x; + result[1] = q.y; + result[2] = q.z; + result[3] = q.w; + return new Matrix1(result); + } + public Vector2Float vector2 { get { - if (this.magnitude != 2) + if (this.size != 2) throw new System.ArgumentException("Matrix1 must be of size 2"); return new Vector2Float(this.data[0], this.data[1]); } } public Vector3Float vector3 { get { - if (this.magnitude != 3) + if (this.size != 3) throw new System.ArgumentException("Matrix1 must be of size 3"); return new Vector3Float(this.data[0], this.data[1], this.data[2]); } } + public Quaternion quaternion { + get { + if (this.size != 4) + throw new System.ArgumentException("Matrix1 must be of size 4"); + return new Quaternion(this.data[0], this.data[1], this.data[2], this.data[3]); + } + } + + public Matrix1 Clone() { + float[] data = new float[this.size]; + for (int rowIx = 0; rowIx < this.size; rowIx++) + data[rowIx] = this.data[rowIx]; + return new Matrix1(data); + } + + + public float magnitude { + get { + float sum = 0; + foreach (var elm in data) + sum += elm; + return sum / data.Length; + } + } + public static Matrix1 operator +(Matrix1 A, Matrix1 B) { + if (A.size != B.size) + throw new System.ArgumentException("Size of A must match size of B."); + + float[] result = new float[A.size]; + + for (int i = 0; i < A.size; i++) { + result[i] = A.data[i] + B.data[i]; + } + return new Matrix1(result); + } public Matrix2 Transpose() { - float[,] r = new float[1, this.magnitude]; - for (uint colIx = 0; colIx < this.magnitude; colIx++) + float[,] r = new float[1, this.size]; + for (uint colIx = 0; colIx < this.size; colIx++) r[1, colIx] = this.data[colIx]; return new Matrix2(r); } public static float Dot(Matrix1 a, Matrix1 b) { - if (a.magnitude != b.magnitude) + if (a.size != b.size) throw new System.ArgumentException("Vectors must be of the same length."); float result = 0.0f; - for (int i = 0; i < a.magnitude; i++) { + for (int i = 0; i < a.size; i++) { result += a.data[i] * b.data[i]; } return result; } public static Matrix1 operator *(Matrix1 A, float f) { - float[] result = new float[A.magnitude]; + float[] result = new float[A.size]; - for (int i = 0; i < A.magnitude; i++) + for (int i = 0; i < A.size; i++) result[i] += A.data[i] * f; return new Matrix1(result); @@ -329,197 +523,20 @@ public class Matrix1 { public Matrix1 Slice(Slice range) { return Slice(range.start, range.stop); } - public Matrix1 Slice(int from, int to) { - if (from < 0 || to >= this.magnitude) + public Matrix1 Slice(uint from, uint to) { + if (from < 0 || to >= this.size) throw new System.ArgumentException("Slice index out of range."); float[] result = new float[to - from]; int resultIx = 0; - for (int ix = from; ix < to; ix++) + for (uint ix = from; ix < to; ix++) result[resultIx++] = this.data[ix]; return new Matrix1(result); } public void UpdateSlice(Slice slice, Matrix1 v) { int vIx = 0; - for (int ix = slice.start; ix < slice.stop; ix++, vIx++) + for (uint ix = slice.start; ix < slice.stop; ix++, vIx++) this.data[ix] = v.data[vIx]; } -} - -// public class Matrix { -// private readonly uint rows = 0; -// private readonly uint cols = 0; -// private float[] data; - -// public Matrix(uint rows, uint cols) { -// this.rows = rows; -// this.cols = cols; -// } - -// public static float[,] Diagonal(float[] v) { -// float[,] r = new float[v.Length, v.Length]; -// for (int i = 0; i < v.Length; i++) { -// r[i, i] = v[i]; -// } -// return r; -// } - -// public static float[,] Transpose(float[,] m) { -// int rows = m.GetLength(0); -// int cols = m.GetLength(1); -// float[,] r = new float[cols, rows]; -// for (uint rowIx = 0; rowIx < rows; rowIx++) { -// for (uint colIx = 0; colIx < cols; colIx++) -// r[colIx, rowIx] = m[rowIx, colIx]; -// } -// return r; -// // double checked code -// } - -// public static void NegateColumn(float[,] m, uint colIx) { -// for (uint rowIx = 0; rowIx < m.GetLength(0); rowIx++) { -// m[rowIx, colIx] = -m[rowIx, colIx]; -// } -// } - -// public static float Determinant(float[,] matrix) { -// int n = matrix.GetLength(0); -// if (n != matrix.GetLength(1)) -// throw new System.ArgumentException("Matrix must be square."); - -// if (n == 1) -// return matrix[0, 0]; // Base case for 1x1 matrix - -// if (n == 2) // Base case for 2x2 matrix -// return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; - -// float det = 0; -// for (int col = 0; col < n; col++) -// det += (col % 2 == 0 ? 1 : -1) * matrix[0, col] * Determinant(Minor(matrix, 0, col)); - -// return det; -// } - -// // Helper function to compute the minor of a matrix -// private static float[,] Minor(float[,] matrix, int rowToRemove, int colToRemove) { -// int n = matrix.GetLength(0); -// float[,] minor = new float[n - 1, n - 1]; - -// int r = 0, c = 0; -// for (int i = 0; i < n; i++) { -// if (i == rowToRemove) continue; - -// c = 0; -// for (int j = 0; j < n; j++) { -// if (j == colToRemove) continue; - -// minor[r, c] = matrix[i, j]; -// c++; -// } -// r++; -// } - -// return minor; -// } - -// public static float[,] MultiplyMatrices(float[,] A, float[,] B) { -// int rowsA = A.GetLength(0); -// int colsA = A.GetLength(1); -// int rowsB = B.GetLength(0); -// int colsB = B.GetLength(1); - -// if (colsA != rowsB) -// throw new System.ArgumentException("Number of columns in A must match number of rows in B."); - -// float[,] result = new float[rowsA, colsB]; - -// for (int i = 0; i < rowsA; i++) { -// for (int j = 0; j < colsB; j++) { -// float sum = 0.0f; -// for (int k = 0; k < colsA; k++) -// sum += A[i, k] * B[k, j]; - -// result[i, j] = sum; -// } -// } - -// return result; -// // double checked code -// } - -// public static float[] MultiplyMatrixVector(float[,] A, float[] v) { -// int rows = A.GetLength(0); -// int cols = A.GetLength(1); -// float[] result = new float[rows]; - -// for (int i = 0; i < rows; i++) { -// for (int j = 0; j < cols; j++) { -// result[i] += A[i, j] * v[j]; -// } -// } - -// return result; -// } - -// // Vector-matrix multiplication -// public static Vector3Float MultiplyMatrixVector3(float[,] A, Vector3Float v) { -// return new Vector3Float( -// A[0, 0] * v.x + A[0, 1] * v.y + A[0, 2] * v.z, -// A[1, 0] * v.x + A[1, 1] * v.y + A[1, 2] * v.z, -// A[2, 0] * v.x + A[2, 1] * v.y + A[2, 2] * v.z -// ); -// } - -// public static float[,] MultiplyMatrixScalar(float[,] A, float s) { -// int rows = A.GetLength(0); -// int cols = A.GetLength(1); -// float[,] result = new float[rows, cols]; - -// for (int i = 0; i < rows; i++) { -// for (int j = 0; j < cols; j++) { -// result[i, j] += A[i, j] * s; -// } -// } - -// return result; -// } - -// public static float[] GetColumn(float[,] M, int col) { -// int rows = M.GetLength(0); -// float[] column = new float[rows]; -// for (int i = 0; i < rows; i++) { -// column[i] = M[i, col]; -// } -// return column; -// } - -// public static Vector3Float GetRow3(float[,] M, int rowIx) { -// int cols = M.GetLength(1); -// Vector3Float row = new( -// M[rowIx, 0], -// M[rowIx, 1], -// M[rowIx, 2] -// ); -// return row; -// } - -// public static void SetRow3(float[,] M, int rowIx, Vector3Float v) { -// M[rowIx, 0] = v.x; -// M[rowIx, 1] = v.y; -// M[rowIx, 2] = v.z; -// } - -// public static float Dot(float[] a, float[] b) { -// float sum = 0; -// for (int i = 0; i < a.Length; i++) sum += a[i] * b[i]; -// return sum; -// } - -// public static float[,] IdentityMatrix(int size) { -// float[,] I = new float[size, size]; -// for (int i = 0; i < size; i++) I[i, i] = 1.0f; -// return I; -// } - -// } \ No newline at end of file +} \ No newline at end of file diff --git a/LinearAlgebra/Quaternion.cs b/LinearAlgebra/Quaternion.cs index 55ad014..b1146ed 100644 --- a/LinearAlgebra/Quaternion.cs +++ b/LinearAlgebra/Quaternion.cs @@ -1,3 +1,5 @@ +using System; +using Quaternion = UnityEngine.Quaternion; namespace Passer.LinearAlgebra { public class QuaternionOf<T> { @@ -13,19 +15,58 @@ namespace Passer.LinearAlgebra { this.w = w; } - public static float[,] ToRotationMatrix(Quaternion q) { + public static Matrix2 ToRotationMatrix(Quaternion q) { float w = q.x, x = q.y, y = q.z, z = q.w; - return new float[,] + float[,] result = new float[,] { { 1 - 2 * (y * y + z * z), 2 * (x * y - w * z), 2 * (x * z + w * y) }, { 2 * (x * y + w * z), 1 - 2 * (x * x + z * z), 2 * (y * z - w * x) }, { 2 * (x * z - w * y), 2 * (y * z + w * x), 1 - 2 * (x * x + y * y) } }; + return new Matrix2(result); + } + + public static Quaternion FromRotationMatrix(Matrix2 m) { + float trace = m.data[0, 0] + m.data[1, 1] + m.data[2, 2]; + float w, x, y, z; + + if (trace > 0) { + float s = 0.5f / (float)Math.Sqrt(trace + 1.0f); + w = 0.25f / s; + x = (m.data[2, 1] - m.data[1, 2]) * s; + y = (m.data[0, 2] - m.data[2, 0]) * s; + z = (m.data[1, 0] - m.data[0, 1]) * s; + } + else { + if (m.data[0, 0] > m.data[1, 1] && m.data[0, 0] > m.data[2, 2]) { + float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[0, 0] - m.data[1, 1] - m.data[2, 2]); + w = (m.data[2, 1] - m.data[1, 2]) / s; + x = 0.25f * s; + y = (m.data[0, 1] + m.data[1, 0]) / s; + z = (m.data[0, 2] + m.data[2, 0]) / s; + } + else if (m.data[1, 1] > m.data[2, 2]) { + float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[1, 1] - m.data[0, 0] - m.data[2, 2]); + w = (m.data[0, 2] - m.data[2, 0]) / s; + x = (m.data[0, 1] + m.data[1, 0]) / s; + y = 0.25f * s; + z = (m.data[1, 2] + m.data[2, 1]) / s; + } + else { + float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[2, 2] - m.data[0, 0] - m.data[1, 1]); + w = (m.data[1, 0] - m.data[0, 1]) / s; + x = (m.data[0, 2] + m.data[2, 0]) / s; + y = (m.data[1, 2] + m.data[2, 1]) / s; + z = 0.25f * s; + } + } + + return new Quaternion(x, y, z, w); } } - public class Quaternion : QuaternionOf<float> { - public Quaternion(float x, float y, float z, float w) : base(x, y, z, w) { } - } + // public class Quaternion : QuaternionOf<float> { + // public Quaternion(float x, float y, float z, float w) : base(x, y, z, w) { } + // } } \ No newline at end of file diff --git a/Messages/BinaryMsg.cs b/Messages/BinaryMsg.cs index fb5d76c..22a0b80 100644 --- a/Messages/BinaryMsg.cs +++ b/Messages/BinaryMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A message containing binary data for custom communication diff --git a/Messages/DestroyMsg.cs b/Messages/DestroyMsg.cs index 660c142..1963bc3 100644 --- a/Messages/DestroyMsg.cs +++ b/Messages/DestroyMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message notifiying that a Thing no longer exists diff --git a/Messages/InvestigateMsg.cs b/Messages/InvestigateMsg.cs index d822fec..08d54d9 100644 --- a/Messages/InvestigateMsg.cs +++ b/Messages/InvestigateMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message to request details for a Thing diff --git a/Messages/LowLevelMessages.cs b/Messages/LowLevelMessages.cs index 2a067ea..01a579d 100644 --- a/Messages/LowLevelMessages.cs +++ b/Messages/LowLevelMessages.cs @@ -1,6 +1,6 @@ using Passer.LinearAlgebra; -namespace Passer.RoboidControl +namespace RoboidControl { public class LowLevelMessages { diff --git a/Messages/Messages.cs b/Messages/Messages.cs index d75e62b..2fa0045 100644 --- a/Messages/Messages.cs +++ b/Messages/Messages.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Root structure for all communcation messages diff --git a/Messages/ModelUrlMsg.cs b/Messages/ModelUrlMsg.cs index 01b6527..be15087 100644 --- a/Messages/ModelUrlMsg.cs +++ b/Messages/ModelUrlMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message for communicating the URL for a model of the thing diff --git a/Messages/NameMsg.cs b/Messages/NameMsg.cs index 57de3aa..632540f 100644 --- a/Messages/NameMsg.cs +++ b/Messages/NameMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message for communicating the name of a thing diff --git a/Messages/NetworkIdMsg.cs b/Messages/NetworkIdMsg.cs index fc095d0..8d81e27 100644 --- a/Messages/NetworkIdMsg.cs +++ b/Messages/NetworkIdMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A message communicating the network ID for that participant diff --git a/Messages/ParticipantMsg.cs b/Messages/ParticipantMsg.cs index 6ba3228..6af8fdb 100644 --- a/Messages/ParticipantMsg.cs +++ b/Messages/ParticipantMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A participant messages notifies other participants of its presence diff --git a/Messages/PoseMsg.cs b/Messages/PoseMsg.cs index 4f1320d..5edd583 100644 --- a/Messages/PoseMsg.cs +++ b/Messages/PoseMsg.cs @@ -1,6 +1,6 @@ using Passer.LinearAlgebra; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message to communicate the pose of the thing diff --git a/Messages/TextMsg.cs b/Messages/TextMsg.cs index c2dcf16..a1de990 100644 --- a/Messages/TextMsg.cs +++ b/Messages/TextMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message for sending generic text diff --git a/Messages/ThingMsg.cs b/Messages/ThingMsg.cs index e83827d..9725e23 100644 --- a/Messages/ThingMsg.cs +++ b/Messages/ThingMsg.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// Message providing generic information about a Thing diff --git a/Participant.cs b/Participant.cs index 286cf78..635f538 100644 --- a/Participant.cs +++ b/Participant.cs @@ -4,7 +4,7 @@ using System.Collections.Concurrent; using System.Net; using System.Net.Sockets; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A participant is used for communcation between things @@ -303,7 +303,10 @@ namespace Passer.RoboidControl { } protected virtual void Process(RemoteParticipant sender, ModelUrlMsg msg) { - Console.WriteLine($"Participant: Process model [{msg.networkId}/{msg.thingId}] {msg.url}"); + //Console.WriteLine($"Participant: Process model [{msg.networkId}/{msg.thingId}] {msg.url}"); + Thing thing = sender.Get(msg.networkId, msg.thingId); + if (thing != null) + thing.modelUrl = msg.url; Thing thing = sender.Get(msg.networkId, msg.thingId); if (thing != null) thing.modelUrl = msg.url; diff --git a/RemoteParticipant.cs b/RemoteParticipant.cs index 64b9fb4..ee5a0b9 100644 --- a/RemoteParticipant.cs +++ b/RemoteParticipant.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A reference to a participant, possibly on a remote location diff --git a/Sensors/DistanceSensor.cs b/Sensors/DistanceSensor.cs index 3967ae5..ade3998 100644 --- a/Sensors/DistanceSensor.cs +++ b/Sensors/DistanceSensor.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A sensor measuring the distance in the forward direction diff --git a/Sensors/TemperatureSensor.cs b/Sensors/TemperatureSensor.cs index edb9750..b0d6860 100644 --- a/Sensors/TemperatureSensor.cs +++ b/Sensors/TemperatureSensor.cs @@ -1,6 +1,6 @@ //using System; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A temperature sensor diff --git a/Sensors/TouchSensor.cs b/Sensors/TouchSensor.cs index 6ea7f77..a55ad57 100644 --- a/Sensors/TouchSensor.cs +++ b/Sensors/TouchSensor.cs @@ -1,4 +1,4 @@ -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A sensor which can detect touches diff --git a/SiteServer.cs b/SiteServer.cs index 9bd1ae9..178dceb 100644 --- a/SiteServer.cs +++ b/SiteServer.cs @@ -2,7 +2,7 @@ using System; using System.Net; using System.Net.Sockets; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A site server is a participant which provides a shared simulated environment @@ -52,7 +52,7 @@ namespace Passer.RoboidControl { protected override void Process(RemoteParticipant sender, NetworkIdMsg msg) { } protected override void Process(RemoteParticipant sender, ThingMsg msg) { - Console.WriteLine($"SiteServer: Process thing [{msg.networkId}/{msg.thingId}]"); + // Console.WriteLine($"SiteServer: Process thing [{msg.networkId}/{msg.thingId}]"); Thing thing = sender.Get(msg.networkId, msg.thingId); if (thing == null) { Thing newThing = null; @@ -63,7 +63,7 @@ namespace Passer.RoboidControl { } if (newThing == null) { newThing = new Thing(sender, msg.networkId, msg.thingId, msg.thingType); - Console.WriteLine("Created generic new core thing"); + // Console.WriteLine("Created generic new core thing"); } if (msg.parentId != 0) { Thing parentThing = Get(msg.networkId, msg.parentId); diff --git a/Thing.cs b/Thing.cs index 92d929d..29fa7c4 100644 --- a/Thing.cs +++ b/Thing.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using Passer.LinearAlgebra; -namespace Passer.RoboidControl { +namespace RoboidControl { /// <summary> /// A thing is the primitive building block diff --git a/Unity/DebugConsole.cs b/Unity/DebugConsole.cs index 5b4e4f6..70b587a 100644 --- a/Unity/DebugConsole.cs +++ b/Unity/DebugConsole.cs @@ -3,7 +3,7 @@ using System.IO; using System.Text; using UnityEngine; -namespace Passer.RoboidControl.Unity { +namespace RoboidControl.Unity { public class UnityLogWriter : TextWriter { public override void Write(char value) { diff --git a/Unity/DistanceSensor.cs b/Unity/DistanceSensor.cs index f8cc98a..e27e2f7 100644 --- a/Unity/DistanceSensor.cs +++ b/Unity/DistanceSensor.cs @@ -2,7 +2,7 @@ using System.Collections; using UnityEngine; -namespace Passer.RoboidControl.Unity { +namespace RoboidControl.Unity { /// <summary> /// The Unity representation of a distance sensor diff --git a/Unity/SiteServer.cs b/Unity/SiteServer.cs index ce665de..ee17799 100644 --- a/Unity/SiteServer.cs +++ b/Unity/SiteServer.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using UnityEngine; -namespace Passer.RoboidControl.Unity { +namespace RoboidControl.Unity { public class SiteServer : MonoBehaviour { public RoboidControl.SiteServer site; diff --git a/Unity/Thing.cs b/Unity/Thing.cs index 8515edb..d58c40c 100644 --- a/Unity/Thing.cs +++ b/Unity/Thing.cs @@ -3,7 +3,7 @@ using System.Collections; using UnityEngine; using UnityEngine.Networking; -namespace Passer.RoboidControl.Unity { +namespace RoboidControl.Unity { /// <summary> /// The representation of a Thing in Unity @@ -35,7 +35,7 @@ namespace Passer.RoboidControl.Unity { } public static Thing Create(RoboidControl.Thing core) { - Debug.Log("Creating new Unity thing"); + // Debug.Log("Creating new Unity thing"); GameObject gameObj = string.IsNullOrEmpty(core.name) ? new("Thing") : new(core.name); diff --git a/Unity/TouchSensor.cs b/Unity/TouchSensor.cs index 62f6b51..6e6ce44 100644 --- a/Unity/TouchSensor.cs +++ b/Unity/TouchSensor.cs @@ -1,7 +1,7 @@ #if UNITY_5_3_OR_NEWER using UnityEngine; -namespace Passer.RoboidControl.Unity { +namespace RoboidControl.Unity { /// <summary> /// The Unity representation of the TouchSensor