PlayerManager.cs
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//UnityEngine.Debug.Log Dir http://docs.unity3d.com/Manual/UnityEngine.Debug.LogFiles.html
using UnityEngine;
using System;
using System.IO;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
public class PlayerManager : GenericPlayerManager {
private Server server = null;
private volatile Queue<Message> messages = new Queue<Message>();
private readonly Semaphore finalizationLocker = new Semaphore(0, 1);
private readonly object messageQueueLocker = new object();
public Semaphore FinalizationLocker {
get { return this.finalizationLocker; }
}
public object MessageQueueLocker {
get { return this.messageQueueLocker; }
}
public override void Start()
{
base.Start();
Screen.SetResolution(800, 600, false);
Debug.Log("PM.S(): Setting args");
string[] args = Environment.GetCommandLineArgs();
if (args.Length >= 5)
{
float speedRate = (int.Parse(args[4]) + 100F) / 100F;
if (speedRate > 100)
base.fadeLength = 0.5F;
DefaultSignSpeed ds = base.subtitles.DefaultWordSpeed;
base.subtitles.DefaultWordSpeed = new DefaultSignSpeed(
ds.Speed * speedRate,
ds.Max * speedRate
);
}
if (args.Length >= 6)
{
float speedRate = (int.Parse(args[5]) + 100F) / 100F;
if (speedRate > 100F)
base.fadeLength = 0.5F;
DefaultSignSpeed ds = base.subtitles.DefaultFirstLetterSpeed;
base.subtitles.DefaultFirstLetterSpeed = new DefaultSignSpeed(
ds.Speed * speedRate,
ds.Max * speedRate
);
ds = base.subtitles.DefaultLetterSpeed;
base.subtitles.DefaultLetterSpeed = new DefaultSignSpeed(
ds.Speed * speedRate,
ds.Max * speedRate
);
}
Debug.Log("PM.S(): Setting lockers");
// Starts thread to wait for app finalization
new Thread(new ThreadStart(waitFinalize)).Start();
Debug.Log("PM.S(): Starting server");
// Start server
server = new Server(this);
new Thread(new ThreadStart(server.StartCommunication)).Start();
// Starts communication thread and wait for finalize
StartCoroutine(MessageChecker());
}
public void enqueueMessage(Message message)
{
UnityEngine.Debug.Log("PM.eM(): " + message.Text + ", " + message.Time);
messages.Enqueue(message);
}
private void waitFinalize()
{
Debug.Log("PM.WF(): START");
FinalizationLocker.WaitOne();
Debug.Log("PM.WF(): Finalize command received");
Application.Quit();
}
IEnumerator MessageChecker()
{
Debug.Log("PM.MC(): START");
while (server.IsNotReady)
yield return null;
Debug.Log("PM.MC(): Starting to read messages");
CameraCapture.capture = true;
foreach (Message message in messages)
{
while ((CameraCapture.frameNumber * 1000) / CameraCapture.frameRate < message.Time)
yield return null;
UnityEngine.Debug.Log("PM.MC(): Loading " + message.Text);
base.playQueued(message.Text);
}
while (base.isPlaying() || base.isLoading())
yield return null;
UnityEngine.Debug.Log("PM.MC(): All done!");
server.SendFinalizeToCore();
CameraCapture.capture = false;
UnityEngine.Debug.Log("PM.MC(): CameraCapture.capture == " + CameraCapture.capture);
Application.Quit();
}
public override WWW loadAssetBundle(string aniName)
{
string assetPath = Application.dataPath + "/Bundles/" + aniName;
if ( ! File.Exists(assetPath))
return null;
try {
WWW www = new WWW("file://" + assetPath);
return www;
} catch (Exception e) {
UnityEngine.Debug.Log(e);
}
return null;
}
public override void onPlayingStateChange() { }
public override void onConnectionError(string gloss, string word) { }
}