void updatePlayer(string[] player_info) { string key = player_info[0]; if (PlayerDictionary.ContainsKey(key)) { Debug.Log("player w/ id " + key + " exists"); PlayerDictionary[key].Missing = false; } else { if (numClones < maxNumClones) { PlayerDictionary.Add(key, new MInC_Player(numClones)); char[] playerID_char = key.ToCharArray(); float angle_rad = 2.0f * Mathf.PI * numClones / maxNumClones; #if !UNITY_EDITOR PluginFunc_AddPlayer(playerID_char, playerID_char.Length, 0); PluginFunc_SetPlayerAngle(playerID_char, playerID_char.Length, angle_rad / (2.0f * Mathf.PI)); #endif AddObject(angle_rad); numClones++; } } MInC_Player player = PlayerDictionary[key]; player.SeqPos_Next = Int32.Parse(player_info[1]); player.SeqSpeed_Next = Int32.Parse(player_info[2]); player.SeqOctave_Next = Int32.Parse(player_info[3]); player.SeqMute_Next = Int32.Parse(player_info[4]); player.Like = Int32.Parse(player_info[5]); }
public void AdvanceSelf() { MInC_Player self = PlayerDictionary [playerID]; #if !UNITY_EDITOR if (self.SeqPos_Cur > (numSeqs - 1)) { return; } #endif self.SeqPos_Cur = ++self.SeqPos_Next; // send updated sequence number to server SendPlayerParamValue("pos", playerID, self.SeqPos_Cur); // send updated sequence number to sequencer char[] playerID_char = playerID.ToCharArray(); #if !UNITY_EDITOR PluginFunc_SetSequence(playerID_char, playerID_char.Length, self.SeqPos_Cur); #endif UpdateSelfHeight(); #if true // compute ratio of vertical height to distance (magnitude) foreach (KeyValuePair <string, MInC_Player> entry in PlayerDictionary) { if (PlayerDictionary [entry.Key].clonePos >= 0) // not self { SetPlayerAudioHeight(entry.Key.ToCharArray(), PlayerDictionary [entry.Key].SeqPos_Cur); } } #endif }
void updatePlayers_Begin() { foreach (KeyValuePair <string, MInC_Player> entry in PlayerDictionary) { MInC_Player player = PlayerDictionary[entry.Key]; player.Missing = true; } PlayerDictionary[playerID].Missing = false; }
void UpdateSelfHeight() { MInC_Player self = PlayerDictionary [playerID]; // raise height GameObject cm = GameObject.Find("/CardboardMain"); if (cm != null) { Vector3 v = cm.GetComponent <Transform>().position; v.y = SeqPosToHeight(self.SeqPos_Cur); cm.GetComponent <Transform>().position = v; } }
void updatePlayers_End() { foreach (KeyValuePair <string, MInC_Player> entry in PlayerDictionary) { MInC_Player player = PlayerDictionary[entry.Key]; char[] playerID_char = entry.Key.ToCharArray(); if (player.Missing) { PlayerDictionary.Remove(entry.Key); #if !UNITY_EDITOR PluginFunc_RemovePlayer(playerID_char, playerID_char.Length); #endif Destroy(clones[player.clonePos]); clones[player.clonePos] = null; } else if (player.clonePos >= 0) // not self { GameObject go = clones[player.clonePos]; /* seq position */ if (player.SeqPos_Cur != player.SeqPos_Next) { player.SeqPos_Cur = player.SeqPos_Next; #if !UNITY_EDITOR PluginFunc_SetSequence(playerID_char, playerID_char.Length, player.SeqPos_Cur); #endif // raise height of player Vector3 v3 = go.GetComponent <Transform>().position; v3.y = SeqPosToHeight(player.SeqPos_Cur); go.GetComponent <Transform>().position = v3; #if true // set player amplitude based on ratio of height difference to distance (magnitude) SetPlayerAudioHeight(playerID_char, player.SeqPos_Cur); #endif bool playing = player.SeqPos_Cur > 0; // go.GetComponent<Renderer>().enabled = playing; #if !SCENE_SPHERES_ONLY go.GetComponentInChildren <ParticleSystem> ().GetComponent <Renderer> ().enabled = playing; #endif } /* seq speed */ if (player.SeqSpeed_Cur != player.SeqSpeed_Next) { player.SeqSpeed_Cur = player.SeqSpeed_Next; #if !UNITY_EDITOR PluginFunc_SetSpeed(playerID_char, playerID_char.Length, player.SeqSpeed_Cur); #endif } /* seq octave */ if (player.SeqOctave_Cur != player.SeqOctave_Next) { player.SeqOctave_Cur = player.SeqOctave_Next; #if !UNITY_EDITOR PluginFunc_SetOctave(playerID_char, playerID_char.Length, player.SeqOctave_Cur); #endif } /* seq mute */ if (player.SeqMute_Cur != player.SeqMute_Next) { player.SeqMute_Cur = player.SeqMute_Next; #if !UNITY_EDITOR PluginFunc_SetMute(playerID_char, playerID_char.Length, player.SeqMute_Cur); #endif } #if SCENE_SPHERES_ONLY Color c = Color.black; float v = 0.0f; #if !UNITY_EDITOR float amp = PluginFunc_GetPlayerPeakAmp(playerID_char, playerID_char.Length); float db = 20.0f * (float)Math.Log10(amp); v = (db + 90.0f) / 90.0f; v = v < 0.0f ? 0.0f: v; #endif c.g = v; go.GetComponent <Renderer>().material.color = c; #else /* like ? */ go.GetComponent <Renderer>().material.color = player.Like == 1 ? Color.red : Color.white; #endif } Debug.Log("player " + entry.Key + " pos=" + player.SeqPos_Cur + " speed=" + player.SeqSpeed_Cur + " octave=" + player.SeqOctave_Cur + " mute=" + player.SeqMute_Cur + " like=" + player.Like); } }
void Update() { if (Cardboard.SDK.Triggered && !blockTrigger) { AdvanceSelf(); Debug.Log("Cardboard.SDK.Triggered " + blockTrigger); } float self_angle = 1.0f - Cardboard.SDK.HeadPose.Orientation.eulerAngles.y / 360.0f; float self_angle_L = self_angle + 0.25f; float angle_rad = (1.0f - self_angle) * 2.0f * Mathf.PI; if (playerID != null) { MInC_Player self = PlayerDictionary [playerID]; if (!blockTrigger) { float height = SeqPosToHeight(self.SeqPos_Cur) + 3.0f; infoCanvas.GetComponent <Transform> ().position = new Vector3(Mathf.Sin(angle_rad) * radius, height, Mathf.Cos(angle_rad) * radius); infoCanvas.GetComponent <Transform> ().rotation = Quaternion.Euler(new Vector3(0, -self_angle * 360.0f, 0)); } GameObject infoText = GameObject.Find("/InfoCanvas/Panel/Like Button/Text"); string text = (self_angle * 360.0f).ToString("F0") + "\n" + self.SeqPos_Cur.ToString(); if (infoText != null) { infoText.GetComponent <Text>().text = text; } } #if !UNITY_EDITOR PluginFunc_SetOrientation(self_angle); #endif foreach (KeyValuePair <string, MInC_Player> entry in PlayerDictionary) { MInC_Player player = PlayerDictionary[entry.Key]; if (player.clonePos >= 0) // not self { float clone_angle = (float)player.clonePos / maxNumClones; float prox_L = Mathf.Abs(self_angle_L - clone_angle); prox_L = prox_L > 1.0f ? prox_L - 1.0f : prox_L > 0.5f ? 1.0f - prox_L : prox_L; float prox_C = prox_L - 0.25f; #if false float scale_R = (prox_C + 0.25f) / 0.5f; float scale_L = 1.0f - scale_R; Vector3 v3 = clones [player.clonePos].GetComponent <Transform>().position; #endif GameObject go = clones [player.clonePos]; if (player.SeqPos_Cur > 0) { float angle_degrees = player.SeqSpeed_Cur == 0 ? -0.5f : player.SeqSpeed_Cur == 2 ? -2.0f : -1.0f; go.GetComponent <Transform> ().Rotate(0, angle_degrees, 0); } #if !SCENE_SPHERES_ONLY go.GetComponentInChildren <TextMesh> ().text = entry.Key + "\n" + player.SeqPos_Cur.ToString(); #if false +"\n" + prox_C.ToString() + "\n" + player.clonePos.ToString() + ", " + clone_angle.ToString() + "\n" + scale_L.ToString() + " - " + scale_R.ToString() + "\n" + v3.x + ", " + v3.y + ", " + v3.z; #endif #endif } } }