1 |
using System; |
2 |
using System.Collections.Generic; |
3 |
using Oni.Akira; |
4 |
using Oni.Imaging; |
5 |
using Oni.Motoko; |
6 |
using Oni.Physics; |
7 |
|
8 |
namespace Oni.Objects |
9 |
{ |
10 |
internal class TriggerClass : GunkObjectClass |
11 |
{ |
12 |
public Color Color; |
13 |
public int TimeOn; |
14 |
public int TimeOff; |
15 |
public float StartOffset; |
16 |
public float AnimScale; |
17 |
public Geometry RailGeometry; |
18 |
public GunkFlags RailGunkFlags; |
19 |
public string ActiveSoundName; |
20 |
public string HitSoundName; |
21 |
|
22 |
public static TriggerClass Read(InstanceDescriptor trig) |
23 |
{ |
24 |
var klass = new TriggerClass(); |
25 |
|
26 |
InstanceDescriptor railGeometryDescriptor; |
27 |
|
28 |
using (var reader = trig.OpenRead()) |
29 |
{ |
30 |
klass.Color = reader.ReadColor(); |
31 |
klass.TimeOn = reader.ReadUInt16(); |
32 |
klass.TimeOff = reader.ReadUInt16(); |
33 |
klass.StartOffset = reader.ReadSingle(); |
34 |
klass.AnimScale = reader.ReadSingle(); |
35 |
railGeometryDescriptor = reader.ReadInstance(); |
36 |
reader.Skip(4); |
37 |
klass.RailGunkFlags = (GunkFlags)reader.ReadInt32(); |
38 |
|
39 |
// we do not need the emitter and animation for now |
40 |
reader.Skip(8); |
41 |
//trge = reader.ReadInstanceLink<TRGEInstance>(); |
42 |
//oban = reader.ReadInstanceLink<OBANInstance>(); |
43 |
|
44 |
klass.ActiveSoundName = reader.ReadString(32) + ".amb"; |
45 |
klass.HitSoundName = reader.ReadString(32) + ".imp"; |
46 |
reader.Skip(8); |
47 |
} |
48 |
|
49 |
if (railGeometryDescriptor != null) |
50 |
klass.RailGeometry = GeometryDatReader.Read(railGeometryDescriptor); |
51 |
|
52 |
return klass; |
53 |
} |
54 |
|
55 |
public override ObjectGeometry[] GunkNodes |
56 |
{ |
57 |
get |
58 |
{ |
59 |
return new[] { |
60 |
new ObjectGeometry { |
61 |
Geometry = RailGeometry, |
62 |
Flags = RailGunkFlags |
63 |
} |
64 |
}; |
65 |
} |
66 |
} |
67 |
} |
68 |
} |