mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2024-11-22 15:02:54 +08:00
Render and select audio zones (box shapes only, no spheres yet)
This commit is contained in:
parent
b1f2918d12
commit
d8fd82c350
@ -415,6 +415,7 @@
|
|||||||
<Compile Include="WorldSearchForm.Designer.cs">
|
<Compile Include="WorldSearchForm.Designer.cs">
|
||||||
<DependentUpon>WorldSearchForm.cs</DependentUpon>
|
<DependentUpon>WorldSearchForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="World\AudioZones.cs" />
|
||||||
<Compile Include="World\Camera.cs" />
|
<Compile Include="World\Camera.cs" />
|
||||||
<Compile Include="Rendering\DirectX\DXForm.cs" />
|
<Compile Include="Rendering\DirectX\DXForm.cs" />
|
||||||
<Compile Include="Rendering\DirectX\DXManager.cs" />
|
<Compile Include="Rendering\DirectX\DXManager.cs" />
|
||||||
@ -435,7 +436,7 @@
|
|||||||
<Compile Include="GameFiles\FileTypes\YtdFile.cs" />
|
<Compile Include="GameFiles\FileTypes\YtdFile.cs" />
|
||||||
<Compile Include="World\Clouds.cs" />
|
<Compile Include="World\Clouds.cs" />
|
||||||
<Compile Include="World\Entity.cs" />
|
<Compile Include="World\Entity.cs" />
|
||||||
<Compile Include="World\PopZone.cs" />
|
<Compile Include="World\PopZones.cs" />
|
||||||
<Compile Include="World\Scenarios.cs" />
|
<Compile Include="World\Scenarios.cs" />
|
||||||
<Compile Include="World\Space.cs" />
|
<Compile Include="World\Space.cs" />
|
||||||
<Compile Include="World\Timecycle.cs" />
|
<Compile Include="World\Timecycle.cs" />
|
||||||
|
@ -236,7 +236,7 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
RelDatas = reldatas.ToArray();
|
RelDatas = reldatas.ToArray();
|
||||||
|
|
||||||
reldatas.Sort((d1, d2) => d1.Offset.CompareTo(d2.Offset));
|
reldatas.Sort((d1, d2) => d1.DataOffset.CompareTo(d2.DataOffset));
|
||||||
RelDatasSorted = reldatas.ToArray();
|
RelDatasSorted = reldatas.ToArray();
|
||||||
|
|
||||||
|
|
||||||
@ -306,8 +306,8 @@ namespace CodeWalker.GameFiles
|
|||||||
RelData d = new RelData(); //use this base object to construct the derived one...
|
RelData d = new RelData(); //use this base object to construct the derived one...
|
||||||
d.Name = name;
|
d.Name = name;
|
||||||
d.NameHash = hash;
|
d.NameHash = hash;
|
||||||
d.Offset = offset;
|
d.DataOffset = offset;
|
||||||
d.Length = length;
|
d.DataLength = length;
|
||||||
d.Data = data;
|
d.Data = data;
|
||||||
|
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ namespace CodeWalker.GameFiles
|
|||||||
{
|
{
|
||||||
//speech.dat4.rel, audioconfig.dat4.rel
|
//speech.dat4.rel, audioconfig.dat4.rel
|
||||||
|
|
||||||
if (d.Length == 1)
|
if (d.DataLength == 1)
|
||||||
{
|
{
|
||||||
byte b = br.ReadByte();
|
byte b = br.ReadByte();
|
||||||
switch (b)
|
switch (b)
|
||||||
@ -463,7 +463,7 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (d.Length == 2)
|
if (d.DataLength == 2)
|
||||||
{
|
{
|
||||||
byte b = br.ReadByte();
|
byte b = br.ReadByte();
|
||||||
switch (b)
|
switch (b)
|
||||||
@ -526,7 +526,7 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (d.Length == 4)
|
if (d.DataLength == 4)
|
||||||
{
|
{
|
||||||
uint h = br.ReadUInt32();
|
uint h = br.ReadUInt32();
|
||||||
return;
|
return;
|
||||||
@ -928,8 +928,8 @@ namespace CodeWalker.GameFiles
|
|||||||
{
|
{
|
||||||
public MetaHash NameHash { get; set; }
|
public MetaHash NameHash { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public uint Offset { get; set; }
|
public uint DataOffset { get; set; }
|
||||||
public uint Length { get; set; }
|
public uint DataLength { get; set; }
|
||||||
public byte[] Data { get; set; }
|
public byte[] Data { get; set; }
|
||||||
public byte TypeID { get; set; }
|
public byte TypeID { get; set; }
|
||||||
|
|
||||||
@ -938,8 +938,8 @@ namespace CodeWalker.GameFiles
|
|||||||
{
|
{
|
||||||
NameHash = d.NameHash;
|
NameHash = d.NameHash;
|
||||||
Name = d.Name;
|
Name = d.Name;
|
||||||
Offset = d.Offset;
|
DataOffset = d.DataOffset;
|
||||||
Length = d.Length;
|
DataLength = d.DataLength;
|
||||||
Data = d.Data;
|
Data = d.Data;
|
||||||
TypeID = d.TypeID;
|
TypeID = d.TypeID;
|
||||||
}
|
}
|
||||||
@ -955,7 +955,7 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
public string GetBaseString()
|
public string GetBaseString()
|
||||||
{
|
{
|
||||||
return Offset.ToString() + ", " + Length.ToString() + ": " + GetNameString();
|
return DataOffset.ToString() + ", " + DataLength.ToString() + ": " + GetNameString();
|
||||||
}
|
}
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
@ -2143,7 +2143,7 @@ namespace CodeWalker.GameFiles
|
|||||||
{
|
{
|
||||||
SpeechParams = 14,
|
SpeechParams = 14,
|
||||||
|
|
||||||
Unk37 = 37, //eg parent for sos/altruist - contains coords - toggle sound?
|
Unk37 = 37, //audio zone? eg parent for sos/altruist - contains coords - toggle sound?
|
||||||
Unk38 = 38, //eg sos, altruist morse - contains coords
|
Unk38 = 38, //eg sos, altruist morse - contains coords
|
||||||
|
|
||||||
StartTrackAction = 63,
|
StartTrackAction = 63,
|
||||||
@ -2207,38 +2207,38 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TC(typeof(EXP))] public class Dat151Unk37 : Dat151RelData //toggle sound?
|
public enum Dat151ZoneShape : uint
|
||||||
|
{
|
||||||
|
Box = 0,
|
||||||
|
Sphere = 1,
|
||||||
|
Line = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
[TC(typeof(EXP))] public class Dat151Unk37 : Dat151RelData //audio zone? toggle sound?
|
||||||
{
|
{
|
||||||
public uint UnkOffset0 { get; set; }
|
public uint UnkOffset0 { get; set; }
|
||||||
public FlagsUint Flags00 { get; set; }
|
public FlagsUint Flags00 { get; set; }
|
||||||
public FlagsUint Flags01 { get; set; }
|
public Dat151ZoneShape Shape { get; set; }
|
||||||
public FlagsUint Flags02 { get; set; }
|
public FlagsUint Flags02 { get; set; }
|
||||||
public Vector3 Pos01 { get; set; }
|
public Vector3 OuterPos { get; set; }
|
||||||
public float Unk01 { get; set; }
|
public float Unused01 { get; set; }
|
||||||
public Vector3 Size02 { get; set; }
|
public Vector3 OuterSize { get; set; }
|
||||||
public float Unk02 { get; set; }
|
public float Unused02 { get; set; }
|
||||||
public Vector3 Size03 { get; set; }
|
public Vector4 OuterVec1 { get; set; }
|
||||||
public float Unk03 { get; set; }
|
public Vector4 OuterVec2 { get; set; }
|
||||||
public Vector3 Size04 { get; set; }
|
public uint OuterAngle { get; set; }
|
||||||
public float Unk04 { get; set; }
|
public Vector3 OuterVec3 { get; set; }
|
||||||
public FlagsUint Flags03 { get; set; }
|
public Vector3 InnerPos { get; set; }
|
||||||
public Vector3 Vec05 { get; set; }
|
public float Unused06 { get; set; }
|
||||||
public Vector3 Pos06 { get; set; }
|
public Vector3 InnerSize { get; set; }
|
||||||
public float Unk06 { get; set; }
|
public float Unused07 { get; set; }
|
||||||
public Vector3 Size07 { get; set; }
|
public Vector4 InnerVec1 { get; set; }
|
||||||
public float Unk07 { get; set; }
|
public Vector4 InnerVec2 { get; set; }
|
||||||
public Vector3 Size08 { get; set; }
|
public uint InnerAngle { get; set; }
|
||||||
public float Unk08 { get; set; }
|
public Vector3 InnerVec3 { get; set; }
|
||||||
public Vector3 Size09 { get; set; }
|
public Vector4 Vec11 { get; set; }
|
||||||
public float Unk09 { get; set; }
|
public Vector4 Vec12 { get; set; }
|
||||||
public FlagsUint Flags04 { get; set; }
|
public Vector4 Vec13 { get; set; }
|
||||||
public Vector3 Vec10 { get; set; }
|
|
||||||
public Vector3 Vec11 { get; set; }
|
|
||||||
public float Unk11 { get; set; }
|
|
||||||
public Vector3 Vec12 { get; set; }
|
|
||||||
public float Unk12 { get; set; }
|
|
||||||
public Vector3 Vec13 { get; set; }
|
|
||||||
public float Unk13 { get; set; }
|
|
||||||
|
|
||||||
public FlagsUint Flags05 { get; set; }
|
public FlagsUint Flags05 { get; set; }
|
||||||
public byte Unk14 { get; set; }
|
public byte Unk14 { get; set; }
|
||||||
@ -2264,40 +2264,35 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Dat151Unk37(RelData d, BinaryReader br) : base(d, br)
|
public Dat151Unk37(RelData d, BinaryReader br) : base(d, br)
|
||||||
{
|
{
|
||||||
br.BaseStream.Position = 0; //1 byte was read already (TypeID)
|
br.BaseStream.Position = 0; //1 byte was read already (TypeID)
|
||||||
|
|
||||||
UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF);
|
UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF);
|
||||||
Flags00 = br.ReadUInt32();
|
Flags00 = br.ReadUInt32();
|
||||||
Flags01 = br.ReadUInt32();
|
Shape = (Dat151ZoneShape)br.ReadUInt32();
|
||||||
Flags02 = br.ReadUInt32();
|
Flags02 = br.ReadUInt32();
|
||||||
Pos01 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
OuterPos = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk01 = br.ReadSingle();
|
Unused01 = br.ReadSingle();
|
||||||
Size02 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
OuterSize = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk02 = br.ReadSingle();
|
Unused02 = br.ReadSingle();
|
||||||
Size03 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
OuterVec1 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk03 = br.ReadSingle();
|
OuterVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Size04 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
OuterAngle = br.ReadUInt32();//###
|
||||||
Unk04 = br.ReadSingle();
|
OuterVec3 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Flags03 = br.ReadUInt32();//###
|
InnerPos = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Vec05 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
Unused06 = br.ReadSingle();
|
||||||
Pos06 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
InnerSize = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk06 = br.ReadSingle();
|
Unused07 = br.ReadSingle();
|
||||||
Size07 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
InnerVec1 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk07 = br.ReadSingle();
|
InnerVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Size08 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
InnerAngle = br.ReadUInt32();//###
|
||||||
Unk08 = br.ReadSingle();
|
InnerVec3 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Size09 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
Vec11 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Unk09 = br.ReadSingle();
|
Vec12 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Flags04 = br.ReadUInt32();//###
|
Vec13 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
||||||
Vec10 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
Vec11 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
Unk11 = br.ReadSingle();
|
|
||||||
Vec12 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
Unk12 = br.ReadSingle();
|
|
||||||
Vec13 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());//perhaps not float
|
|
||||||
Unk13 = br.ReadSingle();
|
|
||||||
|
|
||||||
Flags05 = br.ReadUInt32();
|
Flags05 = br.ReadUInt32();
|
||||||
Unk14 = br.ReadByte();
|
Unk14 = br.ReadByte();
|
||||||
@ -2324,39 +2319,37 @@ namespace CodeWalker.GameFiles
|
|||||||
long bytesleft = br.BaseStream.Length - br.BaseStream.Position;
|
long bytesleft = br.BaseStream.Length - br.BaseStream.Position;
|
||||||
if (bytesleft != 0)
|
if (bytesleft != 0)
|
||||||
{
|
{
|
||||||
byte[] remainder = br.ReadBytes((int)bytesleft);
|
//byte[] remainder = br.ReadBytes((int)bytesleft);
|
||||||
for (int i = 0; i < remainder.Length; i++)
|
//for (int i = 0; i < remainder.Length; i++)
|
||||||
{
|
//{
|
||||||
if (remainder[i] != 0)
|
// if (remainder[i] != 0)
|
||||||
{ }
|
// { } //no hits here! probably got everything, i'm assuming the block is padded to 0x10 or something.
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//FlagsUint[] flags = new FlagsUint[t4];
|
//RecVec(Pos01);//debug coords output
|
||||||
//for (int i = 0; i < t4; i++)
|
//RecVec(Pos06);
|
||||||
//{
|
|
||||||
// flags[i] = br.ReadUInt32();
|
|
||||||
//}
|
|
||||||
//var t2 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
//var t3 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
//var t4 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
|
|
||||||
|
|
||||||
|
|
||||||
RecVec(Pos01);
|
if (Unused01 != 0)
|
||||||
//RecVec(Size02);
|
{ }//no hit
|
||||||
//RecVec(Size03);
|
if (Unused02 != 0)
|
||||||
//RecVec(Size04);
|
{ }//no hit
|
||||||
//RecVec(Vec05);
|
if (Unused06 != 0)
|
||||||
RecVec(Pos06);
|
{ }//no hit
|
||||||
//RecVec(Size07);
|
if (Unused07 != 0)
|
||||||
//RecVec(Size08);
|
{ }//no hit
|
||||||
//RecVec(Size09);
|
if (Shape != 0)
|
||||||
//RecVec(Vec10);
|
{ }//eg 1, 2
|
||||||
//RecVec(Vec11);
|
if (Flags02.Value != 0)
|
||||||
//RecVec(Vec12);
|
{ }//no hit
|
||||||
//RecVec(Vec13);
|
if (OuterAngle > 360)
|
||||||
|
{ }//no hit
|
||||||
|
if (InnerAngle > 360)
|
||||||
|
{ }//no hit
|
||||||
|
if (Flags05.Value != 0)
|
||||||
|
{ }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2374,8 +2367,8 @@ namespace CodeWalker.GameFiles
|
|||||||
public FlagsUint Unk07 { get; set; } //0xFFFFFFFF
|
public FlagsUint Unk07 { get; set; } //0xFFFFFFFF
|
||||||
public FlagsUint Unk08 { get; set; } //0
|
public FlagsUint Unk08 { get; set; } //0
|
||||||
public float Unk09 { get; set; } //1, 5, 100, ...
|
public float Unk09 { get; set; } //1, 5, 100, ...
|
||||||
public float Unk10 { get; set; } //0, 4, ... 100 ... min value?
|
public float InnerRad { get; set; } //0, 4, ... 100 ... min value?
|
||||||
public float Unk11 { get; set; } //15, 16, 12, 10, 20, 300 ... max value?
|
public float OuterRad { get; set; } //15, 16, 12, 10, 20, 300 ... max value?
|
||||||
public FlagsByte Unk12 { get; set; }
|
public FlagsByte Unk12 { get; set; }
|
||||||
public FlagsByte Unk13 { get; set; } //0,1,2,3,4,5
|
public FlagsByte Unk13 { get; set; } //0,1,2,3,4,5
|
||||||
public FlagsByte Unk14 { get; set; }
|
public FlagsByte Unk14 { get; set; }
|
||||||
@ -2425,8 +2418,8 @@ namespace CodeWalker.GameFiles
|
|||||||
Unk07 = br.ReadUInt32(); //0xFFFFFFFF
|
Unk07 = br.ReadUInt32(); //0xFFFFFFFF
|
||||||
Unk08 = br.ReadUInt32(); //0
|
Unk08 = br.ReadUInt32(); //0
|
||||||
Unk09 = br.ReadSingle(); //1, 5, 100, ...
|
Unk09 = br.ReadSingle(); //1, 5, 100, ...
|
||||||
Unk10 = br.ReadSingle(); //0, 4, ... 100 ... min value?
|
InnerRad = br.ReadSingle(); //0, 4, ... 100 ... min value?
|
||||||
Unk11 = br.ReadSingle(); //15, 16, 12, 10, 20, 300 ... max value?
|
OuterRad = br.ReadSingle(); //15, 16, 12, 10, 20, 300 ... max value?
|
||||||
Unk12 = br.ReadByte();
|
Unk12 = br.ReadByte();
|
||||||
Unk13 = br.ReadByte(); //0,1,2,3,4,5
|
Unk13 = br.ReadByte(); //0,1,2,3,4,5
|
||||||
Unk14 = br.ReadByte();
|
Unk14 = br.ReadByte();
|
||||||
|
246
World/AudioZones.cs
Normal file
246
World/AudioZones.cs
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
using CodeWalker.GameFiles;
|
||||||
|
using SharpDX;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CodeWalker.World
|
||||||
|
{
|
||||||
|
public class AudioZones // : BasePathData
|
||||||
|
{
|
||||||
|
public volatile bool Inited = false;
|
||||||
|
public GameFileCache GameFileCache;
|
||||||
|
|
||||||
|
//public Vector4[] GetNodePositions()
|
||||||
|
//{
|
||||||
|
// return null;
|
||||||
|
//}
|
||||||
|
//public EditorVertex[] GetPathVertices()
|
||||||
|
//{
|
||||||
|
// return null;
|
||||||
|
//}
|
||||||
|
//public EditorVertex[] GetTriangleVertices()
|
||||||
|
//{
|
||||||
|
// return TriangleVerts;
|
||||||
|
//}
|
||||||
|
//public EditorVertex[] TriangleVerts;
|
||||||
|
|
||||||
|
public List<AudioPlacement> Zones = new List<AudioPlacement>();
|
||||||
|
public List<AudioPlacement> Emitters = new List<AudioPlacement>();
|
||||||
|
public List<AudioPlacement> AllItems = new List<AudioPlacement>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void Init(GameFileCache gameFileCache, Action<string> updateStatus)
|
||||||
|
{
|
||||||
|
Inited = false;
|
||||||
|
|
||||||
|
GameFileCache = gameFileCache;
|
||||||
|
|
||||||
|
var rpfman = gameFileCache.RpfMan;
|
||||||
|
|
||||||
|
|
||||||
|
Zones.Clear();
|
||||||
|
Emitters.Clear();
|
||||||
|
AllItems.Clear();
|
||||||
|
|
||||||
|
|
||||||
|
Dictionary<uint, RpfFileEntry> dat151entries = new Dictionary<uint, RpfFileEntry>();
|
||||||
|
var audrpf = rpfman.FindRpfFile("x64\\audio\\audio_rel.rpf");
|
||||||
|
if (audrpf != null)
|
||||||
|
{
|
||||||
|
AddRpfDat151s(audrpf, dat151entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameFileCache.EnableDlc)
|
||||||
|
{
|
||||||
|
var updrpf = rpfman.FindRpfFile("update\\update.rpf");
|
||||||
|
if (updrpf != null)
|
||||||
|
{
|
||||||
|
AddRpfDat151s(updrpf, dat151entries);
|
||||||
|
}
|
||||||
|
foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load from current dlc rpfs
|
||||||
|
{
|
||||||
|
AddRpfDat151s(dlcrpf, dat151entries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var dat151entry in dat151entries.Values)
|
||||||
|
{
|
||||||
|
var relfile = rpfman.GetFile<RelFile>(dat151entry);
|
||||||
|
if (relfile != null)
|
||||||
|
{
|
||||||
|
foreach (var reldata in relfile.RelDatas)
|
||||||
|
{
|
||||||
|
if (reldata is Dat151Unk37)
|
||||||
|
{
|
||||||
|
Zones.Add(new AudioPlacement(relfile, reldata as Dat151Unk37));
|
||||||
|
}
|
||||||
|
else if (reldata is Dat151Unk38)
|
||||||
|
{
|
||||||
|
Emitters.Add(new AudioPlacement(relfile, reldata as Dat151Unk38));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AllItems.AddRange(Zones);
|
||||||
|
AllItems.AddRange(Emitters);
|
||||||
|
|
||||||
|
Inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void AddRpfDat151s(RpfFile rpffile, Dictionary<uint, RpfFileEntry> dat151entries)
|
||||||
|
{
|
||||||
|
if (rpffile.AllEntries == null) return;
|
||||||
|
foreach (var entry in rpffile.AllEntries)
|
||||||
|
{
|
||||||
|
if (entry is RpfFileEntry)
|
||||||
|
{
|
||||||
|
RpfFileEntry fentry = entry as RpfFileEntry;
|
||||||
|
if (entry.NameLower.EndsWith(".dat151.rel"))
|
||||||
|
{
|
||||||
|
if (dat151entries.ContainsKey(entry.NameHash))
|
||||||
|
{ }
|
||||||
|
dat151entries[entry.NameHash] = fentry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class AudioPlacement
|
||||||
|
{
|
||||||
|
public RelFile RelFile { get; set; }
|
||||||
|
public Dat151Unk37 AudioZone { get; set; }
|
||||||
|
public Dat151Unk38 AudioEmitter { get; set; }
|
||||||
|
public Dat151ZoneShape Shape { get; set; }
|
||||||
|
public string ShortTypeName { get; set; }
|
||||||
|
public string FullTypeName { get; set; }
|
||||||
|
public Vector3 InnerPos { get; set; }
|
||||||
|
public Vector3 InnerMin { get; set; }
|
||||||
|
public Vector3 InnerMax { get; set; }
|
||||||
|
public float InnerRad { get; set; }
|
||||||
|
public Quaternion InnerOri { get; set; }
|
||||||
|
public Vector3 OuterPos { get; set; }
|
||||||
|
public Vector3 OuterMin { get; set; }
|
||||||
|
public Vector3 OuterMax { get; set; }
|
||||||
|
public float OuterRad { get; set; }
|
||||||
|
public Quaternion OuterOri { get; set; }
|
||||||
|
public Vector3 HitboxPos { get; set; }
|
||||||
|
public Vector3 HitboxMin { get; set; }
|
||||||
|
public Vector3 HitboxMax { get; set; }
|
||||||
|
public Quaternion HitboxOri { get; set; }
|
||||||
|
public Quaternion HitboxOriInv { get; set; }
|
||||||
|
public float HitSphereRad { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AudioPlacement(RelFile rel, Dat151Unk37 zone)
|
||||||
|
{
|
||||||
|
RelFile = rel;
|
||||||
|
AudioZone = zone;
|
||||||
|
Shape = zone.Shape;
|
||||||
|
ShortTypeName = "AudioZone";
|
||||||
|
FullTypeName = "Audio Zone";
|
||||||
|
|
||||||
|
float deg2rad = (float)(Math.PI / 180.0);
|
||||||
|
|
||||||
|
switch (zone.Shape)
|
||||||
|
{
|
||||||
|
case Dat151ZoneShape.Box:
|
||||||
|
InnerPos = zone.InnerPos;
|
||||||
|
InnerMax = zone.InnerSize * 0.5f;
|
||||||
|
InnerMin = -InnerMax;
|
||||||
|
InnerOri = Quaternion.RotationAxis(Vector3.UnitZ, zone.InnerAngle * deg2rad);
|
||||||
|
break;
|
||||||
|
case Dat151ZoneShape.Sphere:
|
||||||
|
break;
|
||||||
|
case Dat151ZoneShape.Line:
|
||||||
|
InnerPos = zone.InnerPos;
|
||||||
|
InnerMin = new Vector3(-1.0f, -1.0f, 0.0f);
|
||||||
|
InnerMax = new Vector3(1.0f, 1.0f, (zone.InnerSize - zone.InnerPos).Length());
|
||||||
|
InnerOri = Quaternion.Invert(Quaternion.LookAtLH(zone.InnerPos, zone.InnerSize, Vector3.UnitZ));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
OuterPos = zone.OuterPos;
|
||||||
|
OuterMax = zone.OuterSize * 0.5f;
|
||||||
|
OuterMin = -OuterMax;
|
||||||
|
OuterOri = Quaternion.RotationAxis(Vector3.UnitZ, zone.OuterAngle * deg2rad);
|
||||||
|
|
||||||
|
bool useouter = ((InnerMax.X == 0) || (InnerMax.Y == 0) || (InnerMax.Z == 0));
|
||||||
|
HitboxPos = useouter ? OuterPos : InnerPos;
|
||||||
|
HitboxMax = useouter ? OuterMax : InnerMax;
|
||||||
|
HitboxMin = useouter ? OuterMin : InnerMin;
|
||||||
|
HitboxOri = useouter ? OuterOri : InnerOri;
|
||||||
|
HitboxOriInv = Quaternion.Invert(HitboxOri);
|
||||||
|
}
|
||||||
|
public AudioPlacement(RelFile rel, Dat151Unk38 emitter)
|
||||||
|
{
|
||||||
|
RelFile = rel;
|
||||||
|
AudioEmitter = emitter;
|
||||||
|
Shape = Dat151ZoneShape.Sphere;
|
||||||
|
ShortTypeName = "AudioEmitter";
|
||||||
|
FullTypeName = "Audio Emitter";
|
||||||
|
|
||||||
|
HitboxOri = Quaternion.Identity;
|
||||||
|
HitboxOriInv = Quaternion.Identity;
|
||||||
|
InnerPos = emitter.Position;
|
||||||
|
InnerRad = emitter.InnerRad;
|
||||||
|
OuterRad = emitter.OuterRad;
|
||||||
|
|
||||||
|
bool useouter = (InnerRad == 0);
|
||||||
|
HitboxPos = InnerPos;
|
||||||
|
HitSphereRad = useouter ? OuterRad : InnerRad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SetPosition(Vector3 pos)
|
||||||
|
{
|
||||||
|
bool useouter = ((InnerMax.X == 0) || (InnerMax.Y == 0) || (InnerMax.Z == 0));
|
||||||
|
Vector3 delta = pos - InnerPos;
|
||||||
|
InnerPos = pos;
|
||||||
|
OuterPos += delta;
|
||||||
|
HitboxPos = useouter ? OuterPos : InnerPos;
|
||||||
|
}
|
||||||
|
public void SetOrientation(Quaternion ori)
|
||||||
|
{
|
||||||
|
HitboxOri = ori;
|
||||||
|
HitboxOriInv = Quaternion.Invert(ori);
|
||||||
|
|
||||||
|
if (InnerOri == OuterOri)
|
||||||
|
{
|
||||||
|
InnerOri = HitboxOri;
|
||||||
|
OuterOri = HitboxOri;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//not sure yet how to allow independent rotation of inner & outer boxes...
|
||||||
|
//maybe only in project window?
|
||||||
|
bool useouter = ((InnerMax.X == 0) || (InnerMax.Y == 0) || (InnerMax.Z == 0));
|
||||||
|
if (useouter)
|
||||||
|
{
|
||||||
|
OuterOri = HitboxOri;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
InnerOri = HitboxOri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
16
WorldForm.Designer.cs
generated
16
WorldForm.Designer.cs
generated
@ -248,6 +248,7 @@ namespace CodeWalker
|
|||||||
this.ToolbarSelectDistantLodLightsButton = new System.Windows.Forms.ToolStripMenuItem();
|
this.ToolbarSelectDistantLodLightsButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.ToolbarSelectMloInstanceButton = new System.Windows.Forms.ToolStripMenuItem();
|
this.ToolbarSelectMloInstanceButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.ToolbarSelectScenarioButton = new System.Windows.Forms.ToolStripMenuItem();
|
this.ToolbarSelectScenarioButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.ToolbarSelectAudioButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.ToolbarMoveButton = new System.Windows.Forms.ToolStripButton();
|
this.ToolbarMoveButton = new System.Windows.Forms.ToolStripButton();
|
||||||
this.ToolbarRotateButton = new System.Windows.Forms.ToolStripButton();
|
this.ToolbarRotateButton = new System.Windows.Forms.ToolStripButton();
|
||||||
@ -986,6 +987,7 @@ namespace CodeWalker
|
|||||||
| System.Windows.Forms.AnchorStyles.Left)
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.MultiFindTextBox.Location = new System.Drawing.Point(0, 117);
|
this.MultiFindTextBox.Location = new System.Drawing.Point(0, 117);
|
||||||
|
this.MultiFindTextBox.MaxLength = 1048576;
|
||||||
this.MultiFindTextBox.Multiline = true;
|
this.MultiFindTextBox.Multiline = true;
|
||||||
this.MultiFindTextBox.Name = "MultiFindTextBox";
|
this.MultiFindTextBox.Name = "MultiFindTextBox";
|
||||||
this.MultiFindTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
this.MultiFindTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||||
@ -1033,7 +1035,8 @@ namespace CodeWalker
|
|||||||
"Train Track",
|
"Train Track",
|
||||||
"Distant Lod Lights",
|
"Distant Lod Lights",
|
||||||
"Mlo Instance",
|
"Mlo Instance",
|
||||||
"Scenario"});
|
"Scenario",
|
||||||
|
"Audio"});
|
||||||
this.SelectionModeComboBox.Location = new System.Drawing.Point(51, 30);
|
this.SelectionModeComboBox.Location = new System.Drawing.Point(51, 30);
|
||||||
this.SelectionModeComboBox.Name = "SelectionModeComboBox";
|
this.SelectionModeComboBox.Name = "SelectionModeComboBox";
|
||||||
this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21);
|
this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21);
|
||||||
@ -2754,7 +2757,8 @@ namespace CodeWalker
|
|||||||
this.ToolbarSelectTrainTrackButton,
|
this.ToolbarSelectTrainTrackButton,
|
||||||
this.ToolbarSelectDistantLodLightsButton,
|
this.ToolbarSelectDistantLodLightsButton,
|
||||||
this.ToolbarSelectMloInstanceButton,
|
this.ToolbarSelectMloInstanceButton,
|
||||||
this.ToolbarSelectScenarioButton});
|
this.ToolbarSelectScenarioButton,
|
||||||
|
this.ToolbarSelectAudioButton});
|
||||||
this.ToolbarSelectButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSelectButton.Image")));
|
this.ToolbarSelectButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSelectButton.Image")));
|
||||||
this.ToolbarSelectButton.ImageTransparentColor = System.Drawing.Color.Magenta;
|
this.ToolbarSelectButton.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||||
this.ToolbarSelectButton.Name = "ToolbarSelectButton";
|
this.ToolbarSelectButton.Name = "ToolbarSelectButton";
|
||||||
@ -2863,6 +2867,13 @@ namespace CodeWalker
|
|||||||
this.ToolbarSelectScenarioButton.Text = "Scenario";
|
this.ToolbarSelectScenarioButton.Text = "Scenario";
|
||||||
this.ToolbarSelectScenarioButton.Click += new System.EventHandler(this.ToolbarSelectScenarioButton_Click);
|
this.ToolbarSelectScenarioButton.Click += new System.EventHandler(this.ToolbarSelectScenarioButton_Click);
|
||||||
//
|
//
|
||||||
|
// ToolbarSelectAudioButton
|
||||||
|
//
|
||||||
|
this.ToolbarSelectAudioButton.Name = "ToolbarSelectAudioButton";
|
||||||
|
this.ToolbarSelectAudioButton.Size = new System.Drawing.Size(181, 22);
|
||||||
|
this.ToolbarSelectAudioButton.Text = "Audio";
|
||||||
|
this.ToolbarSelectAudioButton.Click += new System.EventHandler(this.ToolbarSelectAudioButton_Click);
|
||||||
|
//
|
||||||
// toolStripSeparator1
|
// toolStripSeparator1
|
||||||
//
|
//
|
||||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||||
@ -3445,5 +3456,6 @@ namespace CodeWalker
|
|||||||
private System.Windows.Forms.ToolStripMenuItem ToolbarNewScenarioButton;
|
private System.Windows.Forms.ToolStripMenuItem ToolbarNewScenarioButton;
|
||||||
private System.Windows.Forms.ToolStripMenuItem ToolbarOpenScenarioButton;
|
private System.Windows.Forms.ToolStripMenuItem ToolbarOpenScenarioButton;
|
||||||
private System.Windows.Forms.CheckBox PopZonesCheckBox;
|
private System.Windows.Forms.CheckBox PopZonesCheckBox;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem ToolbarSelectAudioButton;
|
||||||
}
|
}
|
||||||
}
|
}
|
293
WorldForm.cs
293
WorldForm.cs
@ -57,6 +57,7 @@ namespace CodeWalker
|
|||||||
Trains trains = new Trains();
|
Trains trains = new Trains();
|
||||||
Scenarios scenarios = new Scenarios();
|
Scenarios scenarios = new Scenarios();
|
||||||
PopZones popzones = new PopZones();
|
PopZones popzones = new PopZones();
|
||||||
|
AudioZones audiozones = new AudioZones();
|
||||||
|
|
||||||
|
|
||||||
bool MouseLButtonDown = false;
|
bool MouseLButtonDown = false;
|
||||||
@ -136,6 +137,7 @@ namespace CodeWalker
|
|||||||
List<MapSphere> BoundingSpheres = new List<MapSphere>();
|
List<MapSphere> BoundingSpheres = new List<MapSphere>();
|
||||||
List<MapBox> HilightBoxes = new List<MapBox>();
|
List<MapBox> HilightBoxes = new List<MapBox>();
|
||||||
List<MapBox> SelectionBoxes = new List<MapBox>();
|
List<MapBox> SelectionBoxes = new List<MapBox>();
|
||||||
|
List<MapBox> WhiteBoxes = new List<MapBox>();
|
||||||
|
|
||||||
|
|
||||||
bool controllightdir = false; //if not, use timecycle
|
bool controllightdir = false; //if not, use timecycle
|
||||||
@ -185,6 +187,8 @@ namespace CodeWalker
|
|||||||
|
|
||||||
bool renderpopzones = false;
|
bool renderpopzones = false;
|
||||||
|
|
||||||
|
bool renderaudiozones = false;
|
||||||
|
|
||||||
|
|
||||||
float timeofday = 12.0f;
|
float timeofday = 12.0f;
|
||||||
bool controltimeofday = true;
|
bool controltimeofday = true;
|
||||||
@ -565,6 +569,7 @@ namespace CodeWalker
|
|||||||
|
|
||||||
UpdateWidgets();
|
UpdateWidgets();
|
||||||
|
|
||||||
|
WhiteBoxes.Clear();
|
||||||
SelectionBoxes.Clear();
|
SelectionBoxes.Clear();
|
||||||
HilightBoxes.Clear();
|
HilightBoxes.Clear();
|
||||||
BoundingBoxes.Clear();
|
BoundingBoxes.Clear();
|
||||||
@ -855,7 +860,7 @@ namespace CodeWalker
|
|||||||
|
|
||||||
Vector3 movevec = Vector3.Zero;
|
Vector3 movevec = Vector3.Zero;
|
||||||
|
|
||||||
if (MapViewEnabled == true)
|
if (MapViewEnabled)
|
||||||
{
|
{
|
||||||
if (kbmovefwd) movevec.Y += 1.0f;
|
if (kbmovefwd) movevec.Y += 1.0f;
|
||||||
if (kbmovebck) movevec.Y -= 1.0f;
|
if (kbmovebck) movevec.Y -= 1.0f;
|
||||||
@ -1566,7 +1571,7 @@ namespace CodeWalker
|
|||||||
if (((ent.Position.X + r) > cvwmin) && ((ent.Position.X - r) < cvwmax) && ((ent.Position.Y + r) > cvhmin) && ((ent.Position.Y - r) < cvhmax))
|
if (((ent.Position.X + r) > cvwmin) && ((ent.Position.X - r) < cvwmax) && ((ent.Position.Y + r) > cvhmin) && ((ent.Position.Y - r) < cvhmax))
|
||||||
{
|
{
|
||||||
//minZ = Math.Min(minZ, ent.BBMin.Z);
|
//minZ = Math.Min(minZ, ent.BBMin.Z);
|
||||||
maxZ = Math.Max(maxZ, ent.BBMax.Z);
|
maxZ = Math.Max(maxZ, ent.BBMax.Z+50.0f);//add some bias to avoid clipping things...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1770,6 +1775,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
RenderWorldPopZones();
|
RenderWorldPopZones();
|
||||||
}
|
}
|
||||||
|
if (renderaudiozones || (SelectionMode == MapSelectionMode.Audio))
|
||||||
|
{
|
||||||
|
RenderWorldAudioZones();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private bool RenderWorldYmapIsVisible(YmapFile ymap)
|
private bool RenderWorldYmapIsVisible(YmapFile ymap)
|
||||||
{
|
{
|
||||||
@ -2063,14 +2072,101 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
shaders.Enqueue(rnd);
|
shaders.Enqueue(rnd);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RenderWorldAudioZones()
|
||||||
|
{
|
||||||
|
if (!audiozones.Inited) return;
|
||||||
|
|
||||||
|
//renderaudzonelist.Clear();
|
||||||
|
//renderaudzonelist.AddRange(audzones.Zones.Values);
|
||||||
|
|
||||||
|
if (ProjectForm != null)
|
||||||
|
{
|
||||||
|
//ProjectForm.GetVisibleAudioZones(camera, renderaudzonelist);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//RenderablePathBatch rnd = renderableCache.GetRenderablePathBatch(audiozones);
|
||||||
|
//if ((rnd != null) && (rnd.IsLoaded))
|
||||||
|
//{
|
||||||
|
// shaders.Enqueue(rnd);
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
BoundingBox bbox = new BoundingBox();
|
||||||
|
Ray mray = new Ray();
|
||||||
|
mray.Position = camera.MouseRay.Position + camera.Position;
|
||||||
|
mray.Direction = camera.MouseRay.Direction;
|
||||||
|
float hitdist = float.MaxValue;
|
||||||
|
|
||||||
|
MapBox lastHitOuterBox = new MapBox();
|
||||||
|
MapBox mb = new MapBox();
|
||||||
|
|
||||||
|
for (int i = 0; i < audiozones.AllItems.Count; i++)
|
||||||
|
{
|
||||||
|
var placement = audiozones.AllItems[i];
|
||||||
|
switch (placement.Shape)
|
||||||
|
{
|
||||||
|
case Dat151ZoneShape.Box:
|
||||||
|
case Dat151ZoneShape.Line:
|
||||||
|
|
||||||
|
mb.CamRelPos = placement.InnerPos - camera.Position;
|
||||||
|
mb.BBMin = placement.InnerMin;
|
||||||
|
mb.BBMax = placement.InnerMax;
|
||||||
|
mb.Orientation = placement.InnerOri;
|
||||||
|
mb.Scale = Vector3.One;
|
||||||
|
HilightBoxes.Add(mb);
|
||||||
|
|
||||||
|
mb.CamRelPos = placement.OuterPos - camera.Position;
|
||||||
|
mb.BBMin = placement.OuterMin;
|
||||||
|
mb.BBMax = placement.OuterMax;
|
||||||
|
mb.Orientation = placement.OuterOri;
|
||||||
|
mb.Scale = Vector3.One;
|
||||||
|
BoundingBoxes.Add(mb);
|
||||||
|
|
||||||
|
Vector3 hbcamrel = (placement.HitboxPos - camera.Position);
|
||||||
|
Ray mraytrn = new Ray();
|
||||||
|
mraytrn.Position = placement.HitboxOriInv.Multiply(camera.MouseRay.Position - hbcamrel);
|
||||||
|
mraytrn.Direction = placement.HitboxOriInv.Multiply(mray.Direction);
|
||||||
|
bbox.Minimum = placement.HitboxMin;
|
||||||
|
bbox.Maximum = placement.HitboxMax;
|
||||||
|
if (mraytrn.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0))
|
||||||
|
{
|
||||||
|
CurMouseHit.Audio = placement;
|
||||||
|
CurMouseHit.HitDist = hitdist;
|
||||||
|
CurMouseHit.CamRel = hbcamrel;
|
||||||
|
CurMouseHit.AABB = bbox;
|
||||||
|
lastHitOuterBox = mb; //highlight the outer box
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Dat151ZoneShape.Sphere:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;//shouldn't get here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurMouseHit.Audio != null)
|
||||||
|
{
|
||||||
|
//hilight the outer bounds of moused item
|
||||||
|
switch (CurMouseHit.Audio.Shape)
|
||||||
|
{
|
||||||
|
case Dat151ZoneShape.Box:
|
||||||
|
case Dat151ZoneShape.Line:
|
||||||
|
HilightBoxes.Add(lastHitOuterBox);
|
||||||
|
break;
|
||||||
|
case Dat151ZoneShape.Sphere:
|
||||||
|
//HilightSpheres.Add(lastHitOuterSphere);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void RenderSingleItem()
|
private void RenderSingleItem()
|
||||||
{
|
{
|
||||||
//start point for model view mode rendering
|
//start point for model view mode rendering
|
||||||
@ -2869,72 +2965,31 @@ namespace CodeWalker
|
|||||||
//immediately render the entity bounding boxes/spheres - depending on boundsmode
|
//immediately render the entity bounding boxes/spheres - depending on boundsmode
|
||||||
|
|
||||||
|
|
||||||
//////rendering grass instance batch bounding boxes...
|
|
||||||
////shaders.SetDepthStencilMode(context, renderboundsclip ? DepthStencilMode.Enabled : DepthStencilMode.DisableAll);
|
|
||||||
////var shader = shaders.Bounds;
|
|
||||||
////shader.SetMode(BoundsShaderMode.Box);
|
|
||||||
////shader.SetShader(context);
|
|
||||||
////shader.SetInputLayout(context, VertexType.Default);
|
|
||||||
////shader.SetSceneVars(context, camera);
|
|
||||||
////shader.SetColourVars(context, new Vector4(0, 0, 1, 1));
|
|
||||||
////for (int i = 0; i < shaders.RenderInstBatches.Count; i++)
|
|
||||||
////{
|
|
||||||
//// var b = shaders.RenderInstBatches[i];
|
|
||||||
//// var bpos = b.Batch.GrassInstanceBatch.Position;
|
|
||||||
//// var camrel = bpos - camera.Position;
|
|
||||||
//// var bbmin = b.Batch.GrassInstanceBatch.Batch.BatchAABB.min.XYZ() - bpos;
|
|
||||||
//// var bbmax = b.Batch.GrassInstanceBatch.Batch.BatchAABB.max.XYZ() - bpos;
|
|
||||||
//// shader.SetBoxVars(context, camrel, bbmin, bbmax, Quaternion.Identity, Vector3.One);
|
|
||||||
//// shader.DrawBox(context);
|
|
||||||
////}
|
|
||||||
////shader.UnbindResources(context);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var mode = boundsmode; //try avoid multithreading issues
|
|
||||||
bool clip = renderboundsclip;
|
bool clip = renderboundsclip;
|
||||||
|
|
||||||
switch (SelectionMode)
|
switch (SelectionMode)
|
||||||
{
|
{
|
||||||
case MapSelectionMode.EntityExtension:
|
|
||||||
case MapSelectionMode.ArchetypeExtension:
|
|
||||||
case MapSelectionMode.TimeCycleModifier:
|
|
||||||
case MapSelectionMode.CarGenerator:
|
|
||||||
case MapSelectionMode.DistantLodLights:
|
|
||||||
case MapSelectionMode.Grass:
|
|
||||||
case MapSelectionMode.Collision:
|
|
||||||
case MapSelectionMode.NavMesh:
|
|
||||||
case MapSelectionMode.Path:
|
|
||||||
case MapSelectionMode.TrainTrack:
|
|
||||||
case MapSelectionMode.Scenario:
|
|
||||||
mode = BoundsShaderMode.Box;
|
|
||||||
break;
|
|
||||||
case MapSelectionMode.WaterQuad:
|
case MapSelectionMode.WaterQuad:
|
||||||
case MapSelectionMode.MloInstance:
|
case MapSelectionMode.MloInstance:
|
||||||
mode = BoundsShaderMode.Box;
|
|
||||||
clip = false;
|
clip = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mode == BoundsShaderMode.None)
|
|
||||||
{ return; }
|
|
||||||
|
|
||||||
Vector3 colour = new Vector3(0, 0, 1) * globalLights.HdrIntensity;
|
Vector3 colour = new Vector3(0, 0, 1) * globalLights.HdrIntensity;
|
||||||
Vector3 colourhi = new Vector3(0, 1, 1) * globalLights.HdrIntensity;
|
Vector3 colourhi = new Vector3(0, 1, 1) * globalLights.HdrIntensity;
|
||||||
|
|
||||||
shaders.SetDepthStencilMode(context, clip ? DepthStencilMode.Enabled : DepthStencilMode.DisableAll);
|
shaders.SetDepthStencilMode(context, clip ? DepthStencilMode.Enabled : DepthStencilMode.DisableAll);
|
||||||
var shader = shaders.Bounds;
|
var shader = shaders.Bounds;
|
||||||
shader.SetMode(mode);
|
|
||||||
shader.SetShader(context);
|
|
||||||
shader.SetInputLayout(context, VertexType.Default);
|
|
||||||
shader.SetSceneVars(context, camera, null, globalLights);
|
|
||||||
shader.SetColourVars(context, new Vector4(colour, 1));
|
|
||||||
|
|
||||||
|
if ((BoundingBoxes.Count > 0) || (HilightBoxes.Count > 0))
|
||||||
if (mode == BoundsShaderMode.Box)
|
|
||||||
{
|
{
|
||||||
|
shader.SetMode(BoundsShaderMode.Box);
|
||||||
|
shader.SetShader(context);
|
||||||
|
shader.SetInputLayout(context, VertexType.Default);
|
||||||
|
shader.SetSceneVars(context, camera, null, globalLights);
|
||||||
|
shader.SetColourVars(context, new Vector4(colour, 1));
|
||||||
|
|
||||||
for (int i = 0; i < BoundingBoxes.Count; i++)
|
for (int i = 0; i < BoundingBoxes.Count; i++)
|
||||||
{
|
{
|
||||||
MapBox mb = BoundingBoxes[i];
|
MapBox mb = BoundingBoxes[i];
|
||||||
@ -2949,8 +3004,15 @@ namespace CodeWalker
|
|||||||
shader.DrawBox(context);
|
shader.DrawBox(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mode == BoundsShaderMode.Sphere)
|
|
||||||
|
if (BoundingSpheres.Count > 0)
|
||||||
{
|
{
|
||||||
|
shader.SetMode(BoundsShaderMode.Sphere);
|
||||||
|
shader.SetShader(context);
|
||||||
|
shader.SetInputLayout(context, VertexType.Default);
|
||||||
|
shader.SetSceneVars(context, camera, null, globalLights);
|
||||||
|
shader.SetColourVars(context, new Vector4(colour, 1));
|
||||||
|
|
||||||
for (int i = 0; i < BoundingSpheres.Count; i++)
|
for (int i = 0; i < BoundingSpheres.Count; i++)
|
||||||
{
|
{
|
||||||
MapSphere ms = BoundingSpheres[i];
|
MapSphere ms = BoundingSpheres[i];
|
||||||
@ -2960,6 +3022,7 @@ namespace CodeWalker
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
shader.UnbindResources(context);
|
shader.UnbindResources(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3019,6 +3082,9 @@ namespace CodeWalker
|
|||||||
case MapSelectionMode.Scenario:
|
case MapSelectionMode.Scenario:
|
||||||
change = change || (LastMouseHit.ScenarioNode != PrevMouseHit.ScenarioNode);
|
change = change || (LastMouseHit.ScenarioNode != PrevMouseHit.ScenarioNode);
|
||||||
break;
|
break;
|
||||||
|
case MapSelectionMode.Audio:
|
||||||
|
change = change || (LastMouseHit.Audio != PrevMouseHit.Audio);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3086,6 +3152,10 @@ namespace CodeWalker
|
|||||||
ori = sp.Orientation;
|
ori = sp.Orientation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (CurMouseHit.Audio != null)
|
||||||
|
{
|
||||||
|
ori = CurMouseHit.Audio.HitboxOri;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
shaders.SetDepthStencilMode(context, clip ? DepthStencilMode.Enabled : DepthStencilMode.DisableAll);
|
shaders.SetDepthStencilMode(context, clip ? DepthStencilMode.Enabled : DepthStencilMode.DisableAll);
|
||||||
@ -3272,6 +3342,22 @@ namespace CodeWalker
|
|||||||
//clip = false;
|
//clip = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selectionItem.Audio != null)
|
||||||
|
{
|
||||||
|
var au = selectionItem.Audio;
|
||||||
|
camrel = au.HitboxPos - camera.Position;
|
||||||
|
ori = au.HitboxOri;
|
||||||
|
bbmin = au.HitboxMin;
|
||||||
|
bbmax = au.HitboxMax;
|
||||||
|
|
||||||
|
MapBox wbox = new MapBox();
|
||||||
|
wbox.CamRelPos = au.OuterPos - camera.Position;
|
||||||
|
wbox.BBMin = au.OuterMin;
|
||||||
|
wbox.BBMax = au.OuterMax;
|
||||||
|
wbox.Orientation = au.OuterOri;
|
||||||
|
wbox.Scale = scale;
|
||||||
|
WhiteBoxes.Add(wbox);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -3452,23 +3538,28 @@ namespace CodeWalker
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (SelectionBoxes.Count > 0)
|
Vector3 coloursel = new Vector3(0, 1, 0) * globalLights.HdrIntensity * 5.0f;
|
||||||
|
Vector3 colourwht = new Vector3(1, 1, 1) * globalLights.HdrIntensity * 10.0f;
|
||||||
|
var shader = shaders.Bounds;
|
||||||
|
shader.SetMode(BoundsShaderMode.Box);
|
||||||
|
shader.SetShader(context);
|
||||||
|
shader.SetInputLayout(context, VertexType.Default);
|
||||||
|
shader.SetSceneVars(context, camera, null, globalLights);
|
||||||
|
shader.SetColourVars(context, new Vector4(colourwht, 1));
|
||||||
|
for (int i = 0; i < WhiteBoxes.Count; i++)
|
||||||
{
|
{
|
||||||
Vector3 coloursel = new Vector3(0, 1, 0) * globalLights.HdrIntensity * 5.0f;
|
MapBox mb = WhiteBoxes[i];
|
||||||
var shader = shaders.Bounds;
|
shader.SetBoxVars(context, mb.CamRelPos, mb.BBMin, mb.BBMax, mb.Orientation, mb.Scale);
|
||||||
shader.SetMode(BoundsShaderMode.Box);
|
shader.DrawBox(context);
|
||||||
shader.SetShader(context);
|
|
||||||
shader.SetInputLayout(context, VertexType.Default);
|
|
||||||
shader.SetSceneVars(context, camera, null, globalLights);
|
|
||||||
shader.SetColourVars(context, new Vector4(coloursel, 1));
|
|
||||||
for (int i = 0; i < SelectionBoxes.Count; i++)
|
|
||||||
{
|
|
||||||
MapBox mb = SelectionBoxes[i];
|
|
||||||
shader.SetBoxVars(context, mb.CamRelPos, mb.BBMin, mb.BBMax, mb.Orientation, mb.Scale);
|
|
||||||
shader.DrawBox(context);
|
|
||||||
}
|
|
||||||
shader.UnbindResources(context);
|
|
||||||
}
|
}
|
||||||
|
shader.SetColourVars(context, new Vector4(coloursel, 1));
|
||||||
|
for (int i = 0; i < SelectionBoxes.Count; i++)
|
||||||
|
{
|
||||||
|
MapBox mb = SelectionBoxes[i];
|
||||||
|
shader.SetBoxVars(context, mb.CamRelPos, mb.BBMin, mb.BBMax, mb.Orientation, mb.Scale);
|
||||||
|
shader.DrawBox(context);
|
||||||
|
}
|
||||||
|
shader.UnbindResources(context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5539,6 +5630,11 @@ namespace CodeWalker
|
|||||||
ToolbarDeleteItemButton.Enabled = true;
|
ToolbarDeleteItemButton.Enabled = true;
|
||||||
ToolbarDeleteItemButton.Text = "Delete scenario point";
|
ToolbarDeleteItemButton.Text = "Delete scenario point";
|
||||||
}
|
}
|
||||||
|
else if (item.Audio != null)
|
||||||
|
{
|
||||||
|
SelectionEntityTabPage.Text = item.Audio.ShortTypeName;
|
||||||
|
SelEntityPropertyGrid.SelectedObject = item.Audio;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectionEntityTabPage.Text = "Entity";
|
SelectionEntityTabPage.Text = "Entity";
|
||||||
@ -5883,6 +5979,9 @@ namespace CodeWalker
|
|||||||
UpdateStatus("Loading popzones...");
|
UpdateStatus("Loading popzones...");
|
||||||
popzones.Init(gameFileCache, UpdateStatus);
|
popzones.Init(gameFileCache, UpdateStatus);
|
||||||
|
|
||||||
|
UpdateStatus("Loading audio zones...");
|
||||||
|
audiozones.Init(gameFileCache, UpdateStatus);
|
||||||
|
|
||||||
UpdateStatus("Loading world...");
|
UpdateStatus("Loading world...");
|
||||||
space.Init(gameFileCache, UpdateStatus);
|
space.Init(gameFileCache, UpdateStatus);
|
||||||
|
|
||||||
@ -7357,6 +7456,10 @@ namespace CodeWalker
|
|||||||
mode = MapSelectionMode.Scenario;
|
mode = MapSelectionMode.Scenario;
|
||||||
ToolbarSelectScenarioButton.Checked = true;
|
ToolbarSelectScenarioButton.Checked = true;
|
||||||
break;
|
break;
|
||||||
|
case "Audio":
|
||||||
|
mode = MapSelectionMode.Audio;
|
||||||
|
ToolbarSelectAudioButton.Checked = true;
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
SelectionMode = mode;
|
SelectionMode = mode;
|
||||||
@ -8930,6 +9033,12 @@ namespace CodeWalker
|
|||||||
SetMouseSelect(true);
|
SetMouseSelect(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ToolbarSelectAudioButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
SetSelectionMode("Audio");
|
||||||
|
SetMouseSelect(true);
|
||||||
|
}
|
||||||
|
|
||||||
private void ToolbarMoveButton_Click(object sender, EventArgs e)
|
private void ToolbarMoveButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetWidgetMode(ToolbarMoveButton.Checked ? "Default" : "Position");
|
SetWidgetMode(ToolbarMoveButton.Checked ? "Default" : "Position");
|
||||||
@ -9324,6 +9433,7 @@ namespace CodeWalker
|
|||||||
public TrainTrackNode TrainTrackNode { get; set; }
|
public TrainTrackNode TrainTrackNode { get; set; }
|
||||||
public ScenarioNode ScenarioNode { get; set; }
|
public ScenarioNode ScenarioNode { get; set; }
|
||||||
public MCScenarioChainingEdge ScenarioEdge { get; set; }
|
public MCScenarioChainingEdge ScenarioEdge { get; set; }
|
||||||
|
public AudioPlacement Audio { get; set; }
|
||||||
|
|
||||||
public bool MultipleSelection { get; set; }
|
public bool MultipleSelection { get; set; }
|
||||||
public Vector3 MultipleSelectionCenter { get; set; }
|
public Vector3 MultipleSelectionCenter { get; set; }
|
||||||
@ -9354,7 +9464,8 @@ namespace CodeWalker
|
|||||||
(TrainTrackNode != null) ||
|
(TrainTrackNode != null) ||
|
||||||
(DistantLodLights != null) ||
|
(DistantLodLights != null) ||
|
||||||
(MloEntityDef != null) ||
|
(MloEntityDef != null) ||
|
||||||
(ScenarioNode != null);
|
(ScenarioNode != null) ||
|
||||||
|
(Audio != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9381,7 +9492,8 @@ namespace CodeWalker
|
|||||||
|| (NavPoly != mhit.NavPoly)
|
|| (NavPoly != mhit.NavPoly)
|
||||||
|| (PathNode != mhit.PathNode)
|
|| (PathNode != mhit.PathNode)
|
||||||
|| (TrainTrackNode != mhit.TrainTrackNode)
|
|| (TrainTrackNode != mhit.TrainTrackNode)
|
||||||
|| (ScenarioNode != mhit.ScenarioNode);
|
|| (ScenarioNode != mhit.ScenarioNode)
|
||||||
|
|| (Audio != mhit.Audio);
|
||||||
}
|
}
|
||||||
public bool CheckForChanges()
|
public bool CheckForChanges()
|
||||||
{
|
{
|
||||||
@ -9401,7 +9513,8 @@ namespace CodeWalker
|
|||||||
|| (PathNode != null)
|
|| (PathNode != null)
|
||||||
|| (PathLink != null)
|
|| (PathLink != null)
|
||||||
|| (TrainTrackNode != null)
|
|| (TrainTrackNode != null)
|
||||||
|| (ScenarioNode != null);
|
|| (ScenarioNode != null)
|
||||||
|
|| (Audio != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -9426,6 +9539,7 @@ namespace CodeWalker
|
|||||||
MloEntityDef = null;
|
MloEntityDef = null;
|
||||||
ScenarioNode = null;
|
ScenarioNode = null;
|
||||||
ScenarioEdge = null;
|
ScenarioEdge = null;
|
||||||
|
Audio = null;
|
||||||
MultipleSelection = false;
|
MultipleSelection = false;
|
||||||
AABB = new BoundingBox();
|
AABB = new BoundingBox();
|
||||||
GeometryIndex = 0;
|
GeometryIndex = 0;
|
||||||
@ -9492,6 +9606,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
name = ScenarioNode.ToString();
|
name = ScenarioNode.ToString();
|
||||||
}
|
}
|
||||||
|
if (Audio != null)
|
||||||
|
{
|
||||||
|
name = Audio.ShortTypeName + " " + FloatUtil.GetVector3String(Audio.InnerPos);
|
||||||
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9554,6 +9672,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
name = ScenarioNode.ToString();
|
name = ScenarioNode.ToString();
|
||||||
}
|
}
|
||||||
|
if (Audio != null)
|
||||||
|
{
|
||||||
|
name = Audio.ShortTypeName + " " + FloatUtil.GetVector3String(Audio.InnerPos);
|
||||||
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9593,7 +9715,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
res = true;
|
res = true;
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9629,6 +9754,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
return ScenarioNode.Position;
|
return ScenarioNode.Position;
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
return Audio.InnerPos;
|
||||||
|
}
|
||||||
return Vector3.Zero;
|
return Vector3.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9664,6 +9793,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
return ScenarioNode.Orientation;
|
return ScenarioNode.Orientation;
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
return Audio.HitboxOri;
|
||||||
|
}
|
||||||
return Quaternion.Identity;
|
return Quaternion.Identity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9699,6 +9832,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
return WidgetAxis.Z;
|
return WidgetAxis.Z;
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
return WidgetAxis.XYZ;
|
||||||
|
}
|
||||||
return WidgetAxis.None;
|
return WidgetAxis.None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9734,6 +9871,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
return Vector3.One;
|
return Vector3.One;
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
return Vector3.One;
|
||||||
|
}
|
||||||
return Vector3.One;
|
return Vector3.One;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9783,6 +9924,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
ScenarioNode.SetPosition(newpos);
|
ScenarioNode.SetPosition(newpos);
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
Audio.SetPosition(newpos);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public void SetRotation(Quaternion newrot, Quaternion oldrot, bool editPivot)
|
public void SetRotation(Quaternion newrot, Quaternion oldrot, bool editPivot)
|
||||||
@ -9806,7 +9951,10 @@ namespace CodeWalker
|
|||||||
{
|
{
|
||||||
ScenarioNode.SetOrientation(newrot);
|
ScenarioNode.SetOrientation(newrot);
|
||||||
}
|
}
|
||||||
|
else if (Audio != null)
|
||||||
|
{
|
||||||
|
Audio.SetOrientation(newrot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void SetScale(Vector3 newscale, Vector3 oldscale, bool editPivot)
|
public void SetScale(Vector3 newscale, Vector3 oldscale, bool editPivot)
|
||||||
{
|
{
|
||||||
@ -9846,6 +9994,7 @@ namespace CodeWalker
|
|||||||
MloInstance = 13,
|
MloInstance = 13,
|
||||||
Scenario = 14,
|
Scenario = 14,
|
||||||
PopZone = 15,
|
PopZone = 15,
|
||||||
|
Audio = 16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
3
WorldInfoForm.Designer.cs
generated
3
WorldInfoForm.Designer.cs
generated
@ -544,7 +544,8 @@ namespace CodeWalker
|
|||||||
"Train Track",
|
"Train Track",
|
||||||
"Distant Lod Lights",
|
"Distant Lod Lights",
|
||||||
"Mlo Instance",
|
"Mlo Instance",
|
||||||
"Scenario"});
|
"Scenario",
|
||||||
|
"Audio"});
|
||||||
this.SelectionModeComboBox.Location = new System.Drawing.Point(453, 12);
|
this.SelectionModeComboBox.Location = new System.Drawing.Point(453, 12);
|
||||||
this.SelectionModeComboBox.Name = "SelectionModeComboBox";
|
this.SelectionModeComboBox.Name = "SelectionModeComboBox";
|
||||||
this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21);
|
this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21);
|
||||||
|
@ -139,6 +139,11 @@ namespace CodeWalker
|
|||||||
SelectionEntityTabPage.Text = item.ScenarioNode.FullTypeName;
|
SelectionEntityTabPage.Text = item.ScenarioNode.FullTypeName;
|
||||||
SelEntityPropertyGrid.SelectedObject = item.ScenarioNode;
|
SelEntityPropertyGrid.SelectedObject = item.ScenarioNode;
|
||||||
}
|
}
|
||||||
|
else if (item.Audio != null)
|
||||||
|
{
|
||||||
|
SelectionEntityTabPage.Text = item.Audio.FullTypeName;
|
||||||
|
SelEntityPropertyGrid.SelectedObject = item.Audio;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectionEntityTabPage.Text = "Entity";
|
SelectionEntityTabPage.Text = "Entity";
|
||||||
|
Loading…
Reference in New Issue
Block a user