StyleCop clean OpenRA.Game

This commit is contained in:
Matthias Mailänder
2015-01-02 15:11:36 +01:00
parent 9dd607c846
commit 44cd174a8d
61 changed files with 628 additions and 581 deletions

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Editor
{ {
public static CPos Location(this ActorReference ar) public static CPos Location(this ActorReference ar)
{ {
return (CPos)ar.InitDict.Get<LocationInit>().value; return (CPos)ar.InitDict.Get<LocationInit>().Value(null);
} }
public static void DrawStringContrast(this SGraphics g, Font f, string s, int x, int y, Brush fg, Brush bg) public static void DrawStringContrast(this SGraphics g, Font f, string s, int x, int y, Brush fg, Brush bg)

View File

@@ -58,7 +58,7 @@ namespace OpenRA
public override string ToString() { return X + "," + Y; } public override string ToString() { return X + "," + Y; }
public static readonly CVec[] directions = public static readonly CVec[] Directions =
{ {
new CVec(-1, -1), new CVec(-1, -1),
new CVec(-1, 0), new CVec(-1, 0),

View File

@@ -372,13 +372,17 @@ namespace OpenRA
{ {
var result = new T[width, height]; var result = new T[width, height];
for (var i = 0; i < width; i++) for (var i = 0; i < width; i++)
{
for (var j = 0; j < height; j++) for (var j = 0; j < height; j++)
// Workaround for broken ternary operators in certain versions of mono (3.10 and {
// certain versions of the 3.8 series): https://bugzilla.xamarin.com/show_bug.cgi?id=23319 // Workaround for broken ternary operators in certain versions of mono (3.10 and certain versions of the 3.8 series): https://bugzilla.xamarin.com/show_bug.cgi?id=23319
if (i <= ts.GetUpperBound(0) && j <= ts.GetUpperBound(1)) if (i <= ts.GetUpperBound(0) && j <= ts.GetUpperBound(1))
result[i, j] = ts[i, j]; result[i, j] = ts[i, j];
else else
result[i, j] = t; result[i, j] = t;
}
}
return result; return result;
} }

View File

@@ -85,11 +85,11 @@ namespace OpenRA
static readonly object[] NoIndexes = { }; static readonly object[] NoIndexes = { };
public static void LoadField(object target, string key, string value) public static void LoadField(object target, string key, string value)
{ {
const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; const BindingFlags Flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
key = key.Trim(); key = key.Trim();
var field = target.GetType().GetField(key, flags); var field = target.GetType().GetField(key, Flags);
if (field != null) if (field != null)
{ {
var sa = field.GetCustomAttributes<SerializeAttribute>(false).DefaultIfEmpty(SerializeAttribute.Default).First(); var sa = field.GetCustomAttributes<SerializeAttribute>(false).DefaultIfEmpty(SerializeAttribute.Default).First();
@@ -98,7 +98,7 @@ namespace OpenRA
return; return;
} }
var prop = target.GetType().GetProperty(key, flags); var prop = target.GetType().GetProperty(key, Flags);
if (prop != null) if (prop != null)
{ {
var sa = prop.GetCustomAttributes<SerializeAttribute>(false).DefaultIfEmpty(SerializeAttribute.Default).First(); var sa = prop.GetCustomAttributes<SerializeAttribute>(false).DefaultIfEmpty(SerializeAttribute.Default).First();
@@ -503,11 +503,11 @@ namespace OpenRA
internal Func<MiniYaml, object> GetLoader(Type type) internal Func<MiniYaml, object> GetLoader(Type type)
{ {
const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy; const BindingFlags Flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy;
if (!string.IsNullOrEmpty(Loader)) if (!string.IsNullOrEmpty(Loader))
{ {
var method = type.GetMethod(Loader, flags); var method = type.GetMethod(Loader, Flags);
if (method == null) if (method == null)
throw new InvalidOperationException("{0} does not specify a loader function '{1}'".F(type.Name, Loader)); throw new InvalidOperationException("{0} does not specify a loader function '{1}'".F(type.Name, Loader));

View File

@@ -66,7 +66,7 @@ namespace OpenRA.FileFormats
if (coded < 0 || coded > 1) if (coded < 0 || coded > 1)
throw new NotImplementedException("Invalid datastream"); throw new NotImplementedException("Invalid datastream");
var EncodedLiterals = coded == 1; var encodedLiterals = coded == 1;
// log2(dictionary size) - 6 // log2(dictionary size) - 6
var dict = br.ReadBits(8); var dict = br.ReadBits(8);
@@ -145,7 +145,7 @@ namespace OpenRA.FileFormats
else else
{ {
// literal value // literal value
var symbol = EncodedLiterals ? Decode(litcode, br) : br.ReadBits(8); var symbol = encodedLiterals ? Decode(litcode, br) : br.ReadBits(8);
outBuffer[next++] = (byte)symbol; outBuffer[next++] = (byte)symbol;
if (next == MAXWIN) if (next == MAXWIN)
{ {

View File

@@ -21,7 +21,7 @@ namespace OpenRA.FileFormats
uint c = key[j++ % key.Length]; uint c = key[j++ % key.Length];
uint d = key[j++ % key.Length]; uint d = key[j++ % key.Length];
m_p[i] ^= a << 24 | b << 16 | c << 8 | d; lookupMfromP[i] ^= a << 24 | b << 16 | c << 8 | d;
} }
uint l = 0, r = 0; uint l = 0, r = 0;
@@ -29,16 +29,16 @@ namespace OpenRA.FileFormats
for (var i = 0; i < 18;) for (var i = 0; i < 18;)
{ {
Encrypt(ref l, ref r); Encrypt(ref l, ref r);
m_p[i++] = l; lookupMfromP[i++] = l;
m_p[i++] = r; lookupMfromP[i++] = r;
} }
for (var i = 0; i < 4; ++i) for (var i = 0; i < 4; ++i)
for (var j = 0; j < 256;) for (var j = 0; j < 256;)
{ {
Encrypt(ref l, ref r); Encrypt(ref l, ref r);
m_s[i, j++] = l; lookupMfromS[i, j++] = l;
m_s[i, j++] = r; lookupMfromS[i, j++] = r;
} }
} }
@@ -69,57 +69,57 @@ namespace OpenRA.FileFormats
void Encrypt(ref uint a, ref uint b) void Encrypt(ref uint a, ref uint b)
{ {
uint _a = a, _b = b; uint tempA = a, tempB = b;
_a ^= m_p[0]; tempA ^= lookupMfromP[0];
var x = false; var x = false;
for (var i = 1; i <= 16; i++, x ^= true) for (var i = 1; i <= 16; i++, x ^= true)
{ {
if (x) if (x)
Round(ref _a, _b, i); Round(ref tempA, tempB, i);
else else
Round(ref _b, _a, i); Round(ref tempB, tempA, i);
} }
_b ^= m_p[17]; tempB ^= lookupMfromP[17];
a = _b; a = tempB;
b = _a; b = tempA;
} }
void Decrypt(ref uint a, ref uint b) void Decrypt(ref uint a, ref uint b)
{ {
uint _a = a, _b = b; uint tempA = a, tempB = b;
_a ^= m_p[17]; tempA ^= lookupMfromP[17];
var x = false; var x = false;
for (var i = 16; i >= 1; i--, x ^= true) for (var i = 16; i >= 1; i--, x ^= true)
{ {
if (x) if (x)
Round(ref _a, _b, i); Round(ref tempA, tempB, i);
else else
Round(ref _b, _a, i); Round(ref tempB, tempA, i);
} }
_b ^= m_p[0]; tempB ^= lookupMfromP[0];
a = _b; a = tempB;
b = _a; b = tempA;
} }
uint S(uint x, int i) uint S(uint x, int i)
{ {
return m_s[i, (x >> ((3 - i) << 3)) & 0xff]; return lookupMfromS[i, (x >> ((3 - i) << 3)) & 0xff];
} }
uint bf_f(uint x) uint ConvertBFtoF(uint x)
{ {
return ((S(x, 0) + S(x, 1)) ^ S(x, 2)) + S(x, 3); return ((S(x, 0) + S(x, 1)) ^ S(x, 2)) + S(x, 3);
} }
void Round(ref uint a, uint b, int n) void Round(ref uint a, uint b, int n)
{ {
a ^= bf_f(b) ^ m_p[n]; a ^= ConvertBFtoF(b) ^ lookupMfromP[n];
} }
static uint SwapBytes(uint i) static uint SwapBytes(uint i)
@@ -129,7 +129,7 @@ namespace OpenRA.FileFormats
return i; return i;
} }
uint[] m_p = new uint[] { uint[] lookupMfromP = new uint[] {
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
@@ -137,7 +137,7 @@ namespace OpenRA.FileFormats
0x9216d5d9, 0x8979fb1b 0x9216d5d9, 0x8979fb1b
}; };
uint[,] m_s = new uint[,] { uint[,] lookupMfromS = new uint[,] {
{ {
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,

View File

@@ -13,36 +13,36 @@ using System.Linq;
namespace OpenRA.FileFormats namespace OpenRA.FileFormats
{ {
/* possibly the fugliest C# i've ever seen. */ /* TODO: Convert this direct C port into readable code. */
class BlowfishKeyProvider class BlowfishKeyProvider
{ {
const string pubkeyStr = "AihRvNoIbTn85FZRYNZRcT+i6KpU+maCsEqr3Q5q+LDB5tH7Tz2qQ38V"; const string PublicKeyString = "AihRvNoIbTn85FZRYNZRcT+i6KpU+maCsEqr3Q5q+LDB5tH7Tz2qQ38V";
class PublicKey class PublicKey
{ {
public uint[] key1 = new uint[64]; public uint[] KeyOne = new uint[64];
public uint[] key2 = new uint[64]; public uint[] KeyTwo = new uint[64];
public uint len; public uint Len;
} }
PublicKey pubkey = new PublicKey(); PublicKey pubkey = new PublicKey();
uint[] glob1 = new uint[64]; uint[] globOne = new uint[64];
uint glob1_bitlen, glob1_len_x2; uint globOneBitLen, globOneLenXTwo;
uint[] glob2 = new uint[130]; uint[] globTwo = new uint[130];
uint[] glob1_hi = new uint[4]; uint[] globOneHigh = new uint[4];
uint[] glob1_hi_inv = new uint[4]; uint[] globOneHighInv = new uint[4];
uint glob1_hi_bitlen; uint globOneHighBitLen;
uint glob1_hi_inv_lo, glob1_hi_inv_hi; uint globOneHighInvLow, globOneHighInvHigh;
static void init_bignum(uint[] n, uint val, uint len) static void InitBigNum(uint[] n, uint val, uint len)
{ {
for (var i = 0; i < len; i++) n[i] = 0; for (var i = 0; i < len; i++) n[i] = 0;
n[0] = val; n[0] = val;
} }
static void move_key_to_big(uint[] n, byte[] key, uint klen, uint blen) static void MoveKeyToBig(uint[] n, byte[] key, uint klen, uint blen)
{ {
byte sign; byte sign;
@@ -51,9 +51,9 @@ namespace OpenRA.FileFormats
unsafe unsafe
{ {
fixed (uint* _pn = &n[0]) fixed (uint* tempPn = &n[0])
{ {
var pn = (byte*)_pn; var pn = (byte*)tempPn;
var i = blen * 4; var i = blen * 4;
for (; i > klen; i--) pn[i - 1] = (byte)sign; for (; i > klen; i--) pn[i - 1] = (byte)sign;
for (; i > 0; i--) pn[i - 1] = key[klen - i]; for (; i > 0; i--) pn[i - 1] = key[klen - i];
@@ -61,7 +61,7 @@ namespace OpenRA.FileFormats
} }
} }
static void key_to_bignum(uint[] n, byte[] key, uint len) static void KeyToBigNum(uint[] n, byte[] key, uint len)
{ {
uint keylen; uint keylen;
int i; int i;
@@ -84,10 +84,10 @@ namespace OpenRA.FileFormats
} }
if (keylen <= len * 4) if (keylen <= len * 4)
move_key_to_big(n, key.Skip(j).ToArray(), keylen, len); MoveKeyToBig(n, key.Skip(j).ToArray(), keylen, len);
} }
static uint len_bignum(uint[] n, uint len) static uint LenBigNum(uint[] n, uint len)
{ {
uint i; uint i;
i = len - 1; i = len - 1;
@@ -95,10 +95,10 @@ namespace OpenRA.FileFormats
return i + 1; return i + 1;
} }
static uint bitlen_bignum(uint[] n, uint len) static uint BitLenBigNum(uint[] n, uint len)
{ {
uint ddlen, bitlen, mask; uint ddlen, bitlen, mask;
ddlen = len_bignum(n, len); ddlen = LenBigNum(n, len);
if (ddlen == 0) return 0; if (ddlen == 0) return 0;
bitlen = ddlen * 32; bitlen = ddlen * 32;
mask = 0x80000000; mask = 0x80000000;
@@ -111,21 +111,21 @@ namespace OpenRA.FileFormats
return bitlen; return bitlen;
} }
void init_pubkey() void InitPublicKey()
{ {
init_bignum(pubkey.key2, 0x10001, 64); InitBigNum(pubkey.KeyTwo, 0x10001, 64);
key_to_bignum(pubkey.key1, Convert.FromBase64String(pubkeyStr), 64); KeyToBigNum(pubkey.KeyOne, Convert.FromBase64String(PublicKeyString), 64);
pubkey.len = bitlen_bignum(pubkey.key1, 64) - 1; pubkey.Len = BitLenBigNum(pubkey.KeyOne, 64) - 1;
} }
uint len_predata() uint LenPreData()
{ {
var a = (pubkey.len - 1) / 8; var a = (pubkey.Len - 1) / 8;
return (55 / a + 1) * (a + 1); return (55 / a + 1) * (a + 1);
} }
static int cmp_bignum(uint[] n1, uint[] n2, uint len) static int CompareBigNum(uint[] n1, uint[] n2, uint len)
{ {
while (len > 0) while (len > 0)
{ {
@@ -137,12 +137,12 @@ namespace OpenRA.FileFormats
return 0; return 0;
} }
static void mov_bignum(uint[] dest, uint[] src, uint len) static void MoveBigNum(uint[] dest, uint[] src, uint len)
{ {
Array.Copy(src, dest, len); Array.Copy(src, dest, len);
} }
static void shr_bignum(uint[] n, int bits, int len) static void ShrBigNum(uint[] n, int bits, int len)
{ {
int i; var i2 = bits / 32; int i; var i2 = bits / 32;
@@ -154,12 +154,11 @@ namespace OpenRA.FileFormats
} }
if (bits == 0) return; if (bits == 0) return;
for (i = 0; i < len - 1; i++) n[i] = (n[i] >> bits) | (n[i + 1] << (32 - for (i = 0; i < len - 1; i++) n[i] = (n[i] >> bits) | (n[i + 1] << (32 - bits));
bits));
n[i] = n[i] >> bits; n[i] = n[i] >> bits;
} }
static void shl_bignum(uint[] n, int bits, int len) static void ShlBigNum(uint[] n, int bits, int len)
{ {
int i, i2; int i, i2;
@@ -172,25 +171,24 @@ namespace OpenRA.FileFormats
} }
if (bits == 0) return; if (bits == 0) return;
for (i = len - 1; i > 0; i--) n[i] = (n[i] << bits) | (n[i - 1] >> (32 - for (i = len - 1; i > 0; i--) n[i] = (n[i] << bits) | (n[i - 1] >> (32 - bits));
bits));
n[0] <<= bits; n[0] <<= bits;
} }
static uint sub_bignum(uint[] dest, uint[] src1, uint[] src2, uint carry, int len) static uint SubBigNum(uint[] dest, uint[] src1, uint[] src2, uint carry, int len)
{ {
uint i1, i2; uint i1, i2;
len += len; len += len;
unsafe unsafe
{ {
fixed (uint* _ps1 = &src1[0]) fixed (uint* tempPs1 = &src1[0])
fixed (uint* _ps2 = &src2[0]) fixed (uint* tempPs2 = &src2[0])
fixed (uint* _pd = &dest[0]) fixed (uint* tempPd = &dest[0])
{ {
var ps1 = (ushort*)_ps1; var ps1 = (ushort*)tempPs1;
var ps2 = (ushort*)_ps2; var ps2 = (ushort*)tempPs2;
var pd = (ushort*)_pd; var pd = (ushort*)tempPd;
while (--len != -1) while (--len != -1)
{ {
@@ -205,7 +203,7 @@ namespace OpenRA.FileFormats
return carry; return carry;
} }
static unsafe uint sub_bignum(uint* dest, uint* src1, uint* src2, uint carry, int len) static unsafe uint SubBigNum(uint* dest, uint* src1, uint* src2, uint carry, int len)
{ {
uint i1, i2; uint i1, i2;
@@ -226,29 +224,29 @@ namespace OpenRA.FileFormats
return carry; return carry;
} }
static void inv_bignum(uint[] n1, uint[] n2, uint len) static void InvertBigNum(uint[] n1, uint[] n2, uint len)
{ {
var n_tmp = new uint[64]; var nTmp = new uint[64];
uint n2_bytelen, bit; uint nTwoByteLen, bit;
int n2_bitlen; int nTwoBitLen;
var j = 0; var j = 0;
init_bignum(n_tmp, 0, len); InitBigNum(nTmp, 0, len);
init_bignum(n1, 0, len); InitBigNum(n1, 0, len);
n2_bitlen = (int)bitlen_bignum(n2, len); nTwoBitLen = (int)BitLenBigNum(n2, len);
bit = ((uint)1) << (n2_bitlen % 32); bit = ((uint)1) << (nTwoBitLen % 32);
j = ((n2_bitlen + 32) / 32) - 1; j = ((nTwoBitLen + 32) / 32) - 1;
n2_bytelen = (uint)((n2_bitlen - 1) / 32) * 4; nTwoByteLen = (uint)((nTwoBitLen - 1) / 32) * 4;
n_tmp[n2_bytelen / 4] |= ((uint)1) << ((n2_bitlen - 1) & 0x1f); nTmp[nTwoByteLen / 4] |= ((uint)1) << ((nTwoBitLen - 1) & 0x1f);
while (n2_bitlen > 0) while (nTwoBitLen > 0)
{ {
n2_bitlen--; nTwoBitLen--;
shl_bignum(n_tmp, 1, (int)len); ShlBigNum(nTmp, 1, (int)len);
if (cmp_bignum(n_tmp, n2, len) != -1) if (CompareBigNum(nTmp, n2, len) != -1)
{ {
sub_bignum(n_tmp, n_tmp, n2, 0, (int)len); SubBigNum(nTmp, nTmp, n2, 0, (int)len);
n1[j] |= bit; n1[j] |= bit;
} }
@@ -260,45 +258,45 @@ namespace OpenRA.FileFormats
} }
} }
init_bignum(n_tmp, 0, len); InitBigNum(nTmp, 0, len);
} }
static void inc_bignum(uint[] n, uint len) static void IncrementBigNum(uint[] n, uint len)
{ {
var i = 0; var i = 0;
while ((++n[i] == 0) && (--len > 0)) i++; while ((++n[i] == 0) && (--len > 0)) i++;
} }
void init_two_dw(uint[] n, uint len) void InitTwoDw(uint[] n, uint len)
{ {
mov_bignum(glob1, n, len); MoveBigNum(globOne, n, len);
glob1_bitlen = bitlen_bignum(glob1, len); globOneBitLen = BitLenBigNum(globOne, len);
glob1_len_x2 = (glob1_bitlen + 15) / 16; globOneLenXTwo = (globOneBitLen + 15) / 16;
mov_bignum(glob1_hi, glob1.Skip((int)len_bignum(glob1, len) - 2).ToArray(), 2); MoveBigNum(globOneHigh, globOne.Skip((int)LenBigNum(globOne, len) - 2).ToArray(), 2);
glob1_hi_bitlen = bitlen_bignum(glob1_hi, 2) - 32; globOneHighBitLen = BitLenBigNum(globOneHigh, 2) - 32;
shr_bignum(glob1_hi, (int)glob1_hi_bitlen, 2); ShrBigNum(globOneHigh, (int)globOneHighBitLen, 2);
inv_bignum(glob1_hi_inv, glob1_hi, 2); InvertBigNum(globOneHighInv, globOneHigh, 2);
shr_bignum(glob1_hi_inv, 1, 2); ShrBigNum(globOneHighInv, 1, 2);
glob1_hi_bitlen = (glob1_hi_bitlen + 15) % 16 + 1; globOneHighBitLen = (globOneHighBitLen + 15) % 16 + 1;
inc_bignum(glob1_hi_inv, 2); IncrementBigNum(globOneHighInv, 2);
if (bitlen_bignum(glob1_hi_inv, 2) > 32) if (BitLenBigNum(globOneHighInv, 2) > 32)
{ {
shr_bignum(glob1_hi_inv, 1, 2); ShrBigNum(globOneHighInv, 1, 2);
glob1_hi_bitlen--; globOneHighBitLen--;
} }
glob1_hi_inv_lo = (ushort)glob1_hi_inv[0]; globOneHighInvLow = (ushort)globOneHighInv[0];
glob1_hi_inv_hi = (ushort)(glob1_hi_inv[0] >> 16); globOneHighInvHigh = (ushort)(globOneHighInv[0] >> 16);
} }
static unsafe void mul_bignum_word(ushort* pn1, uint[] n2, uint mul, uint len) static unsafe void MulBignumWord(ushort* pn1, uint[] n2, uint mul, uint len)
{ {
uint i, tmp; uint i, tmp;
unsafe unsafe
{ {
fixed (uint* _pn2 = &n2[0]) fixed (uint* tempPn2 = &n2[0])
{ {
var pn2 = (ushort*)_pn2; var pn2 = (ushort*)tempPn2;
tmp = 0; tmp = 0;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
@@ -314,112 +312,112 @@ namespace OpenRA.FileFormats
} }
} }
static void mul_bignum(uint[] dest, uint[] src1, uint[] src2, uint len) static void MulBigNum(uint[] dest, uint[] src1, uint[] src2, uint len)
{ {
uint i; uint i;
unsafe unsafe
{ {
fixed (uint* _psrc2 = &src2[0]) fixed (uint* tempSrc2 = &src2[0])
fixed (uint* _pdest = &dest[0]) fixed (uint* tempPdest = &dest[0])
{ {
var psrc2 = (ushort*)_psrc2; var psrc2 = (ushort*)tempSrc2;
var pdest = (ushort*)_pdest; var pdest = (ushort*)tempPdest;
init_bignum(dest, 0, len * 2); InitBigNum(dest, 0, len * 2);
for (i = 0; i < len * 2; i++) for (i = 0; i < len * 2; i++)
mul_bignum_word(pdest++, src1, *psrc2++, len * 2); MulBignumWord(pdest++, src1, *psrc2++, len * 2);
} }
} }
} }
static void not_bignum(uint[] n, uint len) static void NotBigNum(uint[] n, uint len)
{ {
uint i; uint i;
for (i = 0; i < len; i++) n[i] = ~n[i]; for (i = 0; i < len; i++) n[i] = ~n[i];
} }
static void neg_bignum(uint[] n, uint len) static void NegBigNum(uint[] n, uint len)
{ {
not_bignum(n, len); NotBigNum(n, len);
inc_bignum(n, len); IncrementBigNum(n, len);
} }
unsafe uint get_mulword(uint* n) unsafe uint GetMulWord(uint* n)
{ {
var wn = (ushort*)n; var wn = (ushort*)n;
var i = (uint)((((((((((*(wn - 1) ^ 0xffff) & 0xffff) * glob1_hi_inv_lo + 0x10000) >> 1) var i = (uint)((((((((((*(wn - 1) ^ 0xffff) & 0xffff) * globOneHighInvLow + 0x10000) >> 1)
+ (((*(wn - 2) ^ 0xffff) * glob1_hi_inv_hi + glob1_hi_inv_hi) >> 1) + 1) + (((*(wn - 2) ^ 0xffff) * globOneHighInvHigh + globOneHighInvHigh) >> 1) + 1)
>> 16) + ((((*(wn - 1) ^ 0xffff) & 0xffff) * glob1_hi_inv_hi) >> 1) + >> 16) + ((((*(wn - 1) ^ 0xffff) & 0xffff) * globOneHighInvHigh) >> 1) +
(((*wn ^ 0xffff) * glob1_hi_inv_lo) >> 1) + 1) >> 14) + glob1_hi_inv_hi (((*wn ^ 0xffff) * globOneHighInvLow) >> 1) + 1) >> 14) + globOneHighInvHigh
* (*wn ^ 0xffff) * 2) >> (int)glob1_hi_bitlen); * (*wn ^ 0xffff) * 2) >> (int)globOneHighBitLen);
if (i > 0xffff) i = 0xffff; if (i > 0xffff) i = 0xffff;
return i & 0xffff; return i & 0xffff;
} }
static void dec_bignum(uint[] n, uint len) static void DecBigNum(uint[] n, uint len)
{ {
var i = 0; var i = 0;
while ((--n[i] == 0xffffffff) && (--len > 0)) while ((--n[i] == 0xffffffff) && (--len > 0))
i++; i++;
} }
void calc_a_bignum(uint[] n1, uint[] n2, uint[] n3, uint len) void CalcBigNum(uint[] n1, uint[] n2, uint[] n3, uint len)
{ {
uint g2_len_x2, len_diff; uint globTwoXtwo, lenDiff;
unsafe unsafe
{ {
fixed (uint* g1 = &glob1[0]) fixed (uint* g1 = &globOne[0])
fixed (uint* g2 = &glob2[0]) fixed (uint* g2 = &globTwo[0])
{ {
mul_bignum(glob2, n2, n3, len); MulBigNum(globTwo, n2, n3, len);
glob2[len * 2] = 0; globTwo[len * 2] = 0;
g2_len_x2 = len_bignum(glob2, len * 2 + 1) * 2; globTwoXtwo = LenBigNum(globTwo, len * 2 + 1) * 2;
if (g2_len_x2 >= glob1_len_x2) if (globTwoXtwo >= globOneLenXTwo)
{ {
inc_bignum(glob2, len * 2 + 1); IncrementBigNum(globTwo, len * 2 + 1);
neg_bignum(glob2, len * 2 + 1); NegBigNum(globTwo, len * 2 + 1);
len_diff = g2_len_x2 + 1 - glob1_len_x2; lenDiff = globTwoXtwo + 1 - globOneLenXTwo;
var esi = ((ushort*)g2) + (1 + g2_len_x2 - glob1_len_x2); var esi = ((ushort*)g2) + (1 + globTwoXtwo - globOneLenXTwo);
var edi = ((ushort*)g2) + (g2_len_x2 + 1); var edi = ((ushort*)g2) + (globTwoXtwo + 1);
for (; len_diff != 0; len_diff--) for (; lenDiff != 0; lenDiff--)
{ {
edi--; edi--;
var tmp = get_mulword((uint*)edi); var tmp = GetMulWord((uint*)edi);
esi--; esi--;
if (tmp > 0) if (tmp > 0)
{ {
mul_bignum_word(esi, glob1, tmp, 2 * len); MulBignumWord(esi, globOne, tmp, 2 * len);
if ((*edi & 0x8000) == 0) if ((*edi & 0x8000) == 0)
{ {
if (0 != sub_bignum((uint*)esi, (uint*)esi, g1, 0, (int)len))(*edi)--; if (0 != SubBigNum((uint*)esi, (uint*)esi, g1, 0, (int)len))(*edi)--;
} }
} }
} }
neg_bignum(glob2, len); NegBigNum(globTwo, len);
dec_bignum(glob2, len); DecBigNum(globTwo, len);
} }
mov_bignum(n1, glob2, len); MoveBigNum(n1, globTwo, len);
} }
} }
} }
void clear_tmp_vars(uint len) void ClearTempVars(uint len)
{ {
init_bignum(glob1, 0, len); InitBigNum(globOne, 0, len);
init_bignum(glob2, 0, len); InitBigNum(globTwo, 0, len);
init_bignum(glob1_hi_inv, 0, 4); InitBigNum(globOneHighInv, 0, 4);
init_bignum(glob1_hi, 0, 4); InitBigNum(globOneHigh, 0, 4);
glob1_bitlen = 0; globOneBitLen = 0;
glob1_hi_bitlen = 0; globOneHighBitLen = 0;
glob1_len_x2 = 0; globOneLenXTwo = 0;
glob1_hi_inv_lo = 0; globOneHighInvLow = 0;
glob1_hi_inv_hi = 0; globOneHighInvHigh = 0;
} }
void calc_a_key(uint[] n1, uint[] n2, uint[] n3, uint[] n4, uint len) void CalcKey(uint[] n1, uint[] n2, uint[] n3, uint[] n4, uint len)
{ {
var n_tmp = new uint[64]; var n_tmp = new uint[64];
uint n3_len, n4_len; uint n3_len, n4_len;
@@ -428,19 +426,19 @@ namespace OpenRA.FileFormats
unsafe unsafe
{ {
fixed (uint* _pn3 = &n3[0]) fixed (uint* tempPn3 = &n3[0])
{ {
var pn3 = _pn3; var pn3 = tempPn3;
init_bignum(n1, 1, len); InitBigNum(n1, 1, len);
n4_len = len_bignum(n4, len); n4_len = LenBigNum(n4, len);
init_two_dw(n4, n4_len); InitTwoDw(n4, n4_len);
n3_bitlen = (int)bitlen_bignum(n3, n4_len); n3_bitlen = (int)BitLenBigNum(n3, n4_len);
n3_len = (uint)((n3_bitlen + 31) / 32); n3_len = (uint)((n3_bitlen + 31) / 32);
bit_mask = (((uint)1) << ((n3_bitlen - 1) % 32)) >> 1; bit_mask = (((uint)1) << ((n3_bitlen - 1) % 32)) >> 1;
pn3 += n3_len - 1; pn3 += n3_len - 1;
n3_bitlen--; n3_bitlen--;
mov_bignum(n1, n2, n4_len); MoveBigNum(n1, n2, n4_len);
while (--n3_bitlen != -1) while (--n3_bitlen != -1)
{ {
if (bit_mask == 0) if (bit_mask == 0)
@@ -449,40 +447,40 @@ namespace OpenRA.FileFormats
pn3--; pn3--;
} }
calc_a_bignum(n_tmp, n1, n1, n4_len); CalcBigNum(n_tmp, n1, n1, n4_len);
if ((*pn3 & bit_mask) != 0) if ((*pn3 & bit_mask) != 0)
calc_a_bignum(n1, n_tmp, n2, n4_len); CalcBigNum(n1, n_tmp, n2, n4_len);
else else
mov_bignum(n1, n_tmp, n4_len); MoveBigNum(n1, n_tmp, n4_len);
bit_mask >>= 1; bit_mask >>= 1;
} }
init_bignum(n_tmp, 0, n4_len); InitBigNum(n_tmp, 0, n4_len);
clear_tmp_vars(len); ClearTempVars(len);
} }
} }
} }
static unsafe void memcpy(byte* dest, byte* src, int len) static unsafe void Memcopy(byte* dest, byte* src, int len)
{ {
while (len-- != 0) *dest++ = *src++; while (len-- != 0) *dest++ = *src++;
} }
unsafe void process_predata(byte* pre, uint pre_len, byte* buf) unsafe void ProcessPredata(byte* pre, uint pre_len, byte* buf)
{ {
var n2 = new uint[64]; var n2 = new uint[64];
var n3 = new uint[64]; var n3 = new uint[64];
var a = (pubkey.len - 1) / 8; var a = (pubkey.Len - 1) / 8;
while (a + 1 <= pre_len) while (a + 1 <= pre_len)
{ {
init_bignum(n2, 0, 64); InitBigNum(n2, 0, 64);
fixed (uint* pn2 = &n2[0]) fixed (uint* pn2 = &n2[0])
memcpy((byte*)pn2, pre, (int)a + 1); Memcopy((byte*)pn2, pre, (int)a + 1);
calc_a_key(n3, n2, pubkey.key2, pubkey.key1, 64); CalcKey(n3, n2, pubkey.KeyTwo, pubkey.KeyOne, 64);
fixed (uint* pn3 = &n3[0]) fixed (uint* pn3 = &n3[0])
memcpy(buf, (byte*)pn3, (int)a); Memcopy(buf, (byte*)pn3, (int)a);
pre_len -= a + 1; pre_len -= a + 1;
pre += a + 1; pre += a + 1;
@@ -492,14 +490,14 @@ namespace OpenRA.FileFormats
public byte[] DecryptKey(byte[] src) public byte[] DecryptKey(byte[] src)
{ {
init_pubkey(); InitPublicKey();
var dest = new byte[256]; var dest = new byte[256];
unsafe unsafe
{ {
fixed (byte* pdest = &dest[0]) fixed (byte* pdest = &dest[0])
fixed (byte* psrc = &src[0]) fixed (byte* psrc = &src[0])
process_predata(psrc, len_predata(), pdest); ProcessPredata(psrc, LenPreData(), pdest);
} }
return dest.Take(56).ToArray(); return dest.Take(56).ToArray();

View File

@@ -31,9 +31,9 @@ namespace OpenRA.FileFormats
public static class ImaAdpcmLoader public static class ImaAdpcmLoader
{ {
static readonly int[] indexAdjust = { -1, -1, -1, -1, 2, 4, 6, 8 }; static readonly int[] IndexAdjust = { -1, -1, -1, -1, 2, 4, 6, 8 };
static readonly int[] stepTable = static readonly int[] StepTable =
{ {
7, 8, 9, 10, 11, 12, 13, 14, 16, 7, 8, 9, 10, 11, 12, 13, 14, 16,
17, 19, 21, 23, 25, 28, 31, 34, 37, 17, 19, 21, 23, 25, 28, 31, 34, 37,
41, 45, 50, 55, 60, 66, 73, 80, 88, 41, 45, 50, 55, 60, 66, 73, 80, 88,
@@ -51,14 +51,14 @@ namespace OpenRA.FileFormats
var sb = (b & 8) != 0; var sb = (b & 8) != 0;
b &= 7; b &= 7;
var delta = (stepTable[index] * b) / 4 + stepTable[index] / 8; var delta = (StepTable[index] * b) / 4 + StepTable[index] / 8;
if (sb) delta = -delta; if (sb) delta = -delta;
current += delta; current += delta;
if (current > short.MaxValue) current = short.MaxValue; if (current > short.MaxValue) current = short.MaxValue;
if (current < short.MinValue) current = short.MinValue; if (current < short.MinValue) current = short.MinValue;
index += indexAdjust[b]; index += IndexAdjust[b];
if (index < 0) index = 0; if (index < 0) index = 0;
if (index > 88) index = 88; if (index > 88) index = 88;

View File

@@ -38,7 +38,7 @@ namespace OpenRA.FileFormats
public readonly uint LimbCount; public readonly uint LimbCount;
public VxlLimb[] Limbs; public VxlLimb[] Limbs;
uint BodySize; uint bodySize;
static void ReadVoxelData(Stream s, VxlLimb l) static void ReadVoxelData(Stream s, VxlLimb l)
{ {
@@ -111,7 +111,7 @@ namespace OpenRA.FileFormats
s.ReadUInt32(); s.ReadUInt32();
LimbCount = s.ReadUInt32(); LimbCount = s.ReadUInt32();
s.ReadUInt32(); s.ReadUInt32();
BodySize = s.ReadUInt32(); bodySize = s.ReadUInt32();
s.Seek(770, SeekOrigin.Current); s.Seek(770, SeekOrigin.Current);
// Read Limb headers // Read Limb headers
@@ -124,12 +124,12 @@ namespace OpenRA.FileFormats
} }
// Skip to the Limb footers // Skip to the Limb footers
s.Seek(802 + 28 * LimbCount + BodySize, SeekOrigin.Begin); s.Seek(802 + 28 * LimbCount + bodySize, SeekOrigin.Begin);
var LimbDataOffset = new uint[LimbCount]; var limbDataOffset = new uint[LimbCount];
for (var i = 0; i < LimbCount; i++) for (var i = 0; i < LimbCount; i++)
{ {
LimbDataOffset[i] = s.ReadUInt32(); limbDataOffset[i] = s.ReadUInt32();
s.Seek(8, SeekOrigin.Current); s.Seek(8, SeekOrigin.Current);
Limbs[i].Scale = s.ReadFloat(); Limbs[i].Scale = s.ReadFloat();
s.Seek(48, SeekOrigin.Current); s.Seek(48, SeekOrigin.Current);
@@ -143,7 +143,7 @@ namespace OpenRA.FileFormats
for (var i = 0; i < LimbCount; i++) for (var i = 0; i < LimbCount; i++)
{ {
s.Seek(802 + 28 * LimbCount + LimbDataOffset[i], SeekOrigin.Begin); s.Seek(802 + 28 * LimbCount + limbDataOffset[i], SeekOrigin.Begin);
ReadVoxelData(s, Limbs[i]); ReadVoxelData(s, Limbs[i]);
} }
} }

View File

@@ -42,19 +42,19 @@ namespace OpenRA.FileSystem
reader.ReadBytes(4); reader.ReadBytes(4);
/*var ArchiveSize = */reader.ReadUInt32(); /*var ArchiveSize = */reader.ReadUInt32();
reader.ReadBytes(19); reader.ReadBytes(19);
var TOCAddress = reader.ReadInt32(); var tocAddress = reader.ReadInt32();
reader.ReadBytes(4); reader.ReadBytes(4);
var DirCount = reader.ReadUInt16(); var dirCount = reader.ReadUInt16();
// Parse the directory list // Parse the directory list
s.Seek(TOCAddress, SeekOrigin.Begin); s.Seek(tocAddress, SeekOrigin.Begin);
var TOCreader = new BinaryReader(s); var tocReader = new BinaryReader(s);
var fileCountInDirs = new List<uint>(); var fileCountInDirs = new List<uint>();
// Parse directories // Parse directories
for (var i = 0; i < DirCount; i++) for (var i = 0; i < dirCount; i++)
fileCountInDirs.Add(ParseDirectory(TOCreader)); fileCountInDirs.Add(ParseDirectory(tocReader));
// Parse files // Parse files
foreach (var fileCount in fileCountInDirs) foreach (var fileCount in fileCountInDirs)
@@ -65,35 +65,35 @@ namespace OpenRA.FileSystem
static uint ParseDirectory(BinaryReader reader) static uint ParseDirectory(BinaryReader reader)
{ {
// Parse directory header // Parse directory header
var FileCount = reader.ReadUInt16(); var fileCount = reader.ReadUInt16();
var ChunkSize = reader.ReadUInt16(); var chunkSize = reader.ReadUInt16();
var NameLength = reader.ReadUInt16(); var nameLength = reader.ReadUInt16();
reader.ReadChars(NameLength); // var DirName = new String(reader.ReadChars(NameLength)); reader.ReadChars(nameLength); // var DirName = new String(reader.ReadChars(NameLength));
// Skip to the end of the chunk // Skip to the end of the chunk
reader.ReadBytes(ChunkSize - NameLength - 6); reader.ReadBytes(chunkSize - nameLength - 6);
return FileCount; return fileCount;
} }
uint AccumulatedData = 0; uint accumulatedData = 0;
void ParseFile(BinaryReader reader) void ParseFile(BinaryReader reader)
{ {
reader.ReadBytes(7); reader.ReadBytes(7);
var CompressedSize = reader.ReadUInt32(); var compressedSize = reader.ReadUInt32();
reader.ReadBytes(12); reader.ReadBytes(12);
var ChunkSize = reader.ReadUInt16(); var chunkSize = reader.ReadUInt16();
reader.ReadBytes(4); reader.ReadBytes(4);
var NameLength = reader.ReadByte(); var nameLength = reader.ReadByte();
var FileName = new string(reader.ReadChars(NameLength)); var fileName = new string(reader.ReadChars(nameLength));
var hash = PackageEntry.HashFilename(FileName, PackageHashType.Classic); var hash = PackageEntry.HashFilename(fileName, PackageHashType.Classic);
if (!index.ContainsKey(hash)) if (!index.ContainsKey(hash))
index.Add(hash, new PackageEntry(hash, AccumulatedData, CompressedSize)); index.Add(hash, new PackageEntry(hash, accumulatedData, compressedSize));
filenames.Add(FileName); filenames.Add(fileName);
AccumulatedData += CompressedSize; accumulatedData += compressedSize;
// Skip to the end of the chunk // Skip to the end of the chunk
reader.ReadBytes(ChunkSize - NameLength - 30); reader.ReadBytes(chunkSize - nameLength - 30);
} }
public Stream GetContent(uint hash) public Stream GetContent(uint hash)

View File

@@ -49,7 +49,7 @@ namespace OpenRA.FileSystem
public override string ToString() public override string ToString()
{ {
string filename; string filename;
if (Names.TryGetValue(Hash, out filename)) if (names.TryGetValue(Hash, out filename))
return "{0} - offset 0x{1:x8} - length 0x{2:x8}".F(filename, Offset, Length); return "{0} - offset 0x{1:x8} - length 0x{2:x8}".F(filename, Offset, Length);
else else
return "0x{0:x8} - offset 0x{1:x8} - length 0x{2:x8}".F(Hash, Offset, Length); return "0x{0:x8} - offset 0x{1:x8} - length 0x{2:x8}".F(Hash, Offset, Length);
@@ -97,14 +97,14 @@ namespace OpenRA.FileSystem
} }
} }
static Dictionary<uint, string> Names = new Dictionary<uint, string>(); static Dictionary<uint, string> names = new Dictionary<uint, string>();
public static void AddStandardName(string s) public static void AddStandardName(string s)
{ {
var hash = HashFilename(s, PackageHashType.Classic); // RA1 and TD var hash = HashFilename(s, PackageHashType.Classic); // RA1 and TD
Names.Add(hash, s); names.Add(hash, s);
var crcHash = HashFilename(s, PackageHashType.CRC32); // TS var crcHash = HashFilename(s, PackageHashType.CRC32); // TS
Names.Add(crcHash, s); names.Add(crcHash, s);
} }
} }
} }

View File

@@ -328,10 +328,10 @@ namespace OpenRA
else else
Cursor = new SoftwareCursor(modData.CursorProvider); Cursor = new SoftwareCursor(modData.CursorProvider);
PerfHistory.items["render"].hasNormalTick = false; PerfHistory.Items["render"].HasNormalTick = false;
PerfHistory.items["batches"].hasNormalTick = false; PerfHistory.Items["batches"].HasNormalTick = false;
PerfHistory.items["render_widgets"].hasNormalTick = false; PerfHistory.Items["render_widgets"].HasNormalTick = false;
PerfHistory.items["render_flip"].hasNormalTick = false; PerfHistory.Items["render_flip"].HasNormalTick = false;
JoinLocal(); JoinLocal();
@@ -513,10 +513,10 @@ namespace OpenRA
Renderer.EndFrame(new DefaultInputHandler(orderManager.World)); Renderer.EndFrame(new DefaultInputHandler(orderManager.World));
} }
PerfHistory.items["render"].Tick(); PerfHistory.Items["render"].Tick();
PerfHistory.items["batches"].Tick(); PerfHistory.Items["batches"].Tick();
PerfHistory.items["render_widgets"].Tick(); PerfHistory.Items["render_widgets"].Tick();
PerfHistory.items["render_flip"].Tick(); PerfHistory.Items["render_flip"].Tick();
} }
static void Loop() static void Loop()
@@ -551,12 +551,12 @@ namespace OpenRA
// (if ever). // (if ever).
// This also means that the 'logicInterval' cannot be longer than this // This also means that the 'logicInterval' cannot be longer than this
// value. // value.
const int maxLogicTicksBehind = 250; const int MaxLogicTicksBehind = 250;
// Try to maintain at least this many FPS during replays, even if it slows down logic. // Try to maintain at least this many FPS during replays, even if it slows down logic.
// However, if the user has enabled a framerate limit that is even lower // However, if the user has enabled a framerate limit that is even lower
// than this, then that limit will be used. // than this, then that limit will be used.
const int minReplayFps = 10; const int MinReplayFps = 10;
// Timestamps for when the next logic and rendering should run // Timestamps for when the next logic and rendering should run
var nextLogic = RunTime; var nextLogic = RunTime;
@@ -576,7 +576,7 @@ namespace OpenRA
var now = RunTime; var now = RunTime;
// If the logic has fallen behind too much, skip it and catch up // If the logic has fallen behind too much, skip it and catch up
if (now - nextLogic > maxLogicTicksBehind) if (now - nextLogic > MaxLogicTicksBehind)
nextLogic = now; nextLogic = now;
// When's the next update (logic or render) // When's the next update (logic or render)
@@ -608,7 +608,7 @@ namespace OpenRA
// allowed between screen updates. // allowed between screen updates.
// We do this before rendering to include the time rendering takes // We do this before rendering to include the time rendering takes
// in this interval. // in this interval.
var maxRenderInterval = Math.Max(1000 / minReplayFps, renderInterval); var maxRenderInterval = Math.Max(1000 / MinReplayFps, renderInterval);
forcedNextRender = now + maxRenderInterval; forcedNextRender = now + maxRenderInterval;
RenderTick(); RenderTick();

View File

@@ -101,12 +101,12 @@ namespace OpenRA.Graphics
// Cached sheet // Cached sheet
Sheet sheet; Sheet sheet;
if (cachedSheets.ContainsKey(mi.src)) if (cachedSheets.ContainsKey(mi.Src))
sheet = cachedSheets[mi.src]; sheet = cachedSheets[mi.Src];
else else
{ {
sheet = new Sheet(mi.src); sheet = new Sheet(mi.Src);
cachedSheets.Add(mi.src, sheet); cachedSheets.Add(mi.Src, sheet);
} }
// Cache the sprite // Cache the sprite

View File

@@ -15,15 +15,15 @@ namespace OpenRA.Graphics
{ {
class MappedImage class MappedImage
{ {
public readonly Rectangle rect = Rectangle.Empty; readonly Rectangle rect = Rectangle.Empty;
public readonly string src; public readonly string Src;
public MappedImage(string defaultSrc, MiniYaml info) public MappedImage(string defaultSrc, MiniYaml info)
{ {
FieldLoader.LoadField(this, "rect", info.Value); FieldLoader.LoadField(this, "rect", info.Value);
FieldLoader.Load(this, info); FieldLoader.Load(this, info);
if (src == null) if (Src == null)
src = defaultSrc; Src = defaultSrc;
} }
public Sprite GetImage(Sheet s) public Sprite GetImage(Sheet s)
@@ -34,8 +34,8 @@ namespace OpenRA.Graphics
public MiniYaml Save(string defaultSrc) public MiniYaml Save(string defaultSrc)
{ {
var root = new List<MiniYamlNode>(); var root = new List<MiniYamlNode>();
if (defaultSrc != src) if (defaultSrc != Src)
root.Add(new MiniYamlNode("src", src)); root.Add(new MiniYamlNode("Src", Src));
return new MiniYaml(FieldSaver.FormatValue(this, this.GetType().GetField("rect")), root); return new MiniYaml(FieldSaver.FormatValue(this, this.GetType().GetField("rect")), root);
} }

View File

@@ -41,21 +41,21 @@ namespace OpenRA.Graphics
public IRenderable OffsetBy(WVec vec) { return new SelectionBarsRenderable(pos + vec, actor); } public IRenderable OffsetBy(WVec vec) { return new SelectionBarsRenderable(pos + vec, actor); }
public IRenderable AsDecoration() { return this; } public IRenderable AsDecoration() { return this; }
void DrawExtraBars(WorldRenderer wr, float2 xy, float2 Xy) void DrawExtraBars(WorldRenderer wr, float2 start, float2 end)
{ {
foreach (var extraBar in actor.TraitsImplementing<ISelectionBar>()) foreach (var extraBar in actor.TraitsImplementing<ISelectionBar>())
{ {
var value = extraBar.GetValue(); var value = extraBar.GetValue();
if (value != 0) if (value != 0)
{ {
xy.Y += (int)(4 / wr.Viewport.Zoom); start.Y += (int)(4 / wr.Viewport.Zoom);
Xy.Y += (int)(4 / wr.Viewport.Zoom); end.Y += (int)(4 / wr.Viewport.Zoom);
DrawSelectionBar(wr, xy, Xy, extraBar.GetValue(), extraBar.GetColor()); DrawSelectionBar(wr, start, end, extraBar.GetValue(), extraBar.GetColor());
} }
} }
} }
void DrawSelectionBar(WorldRenderer wr, float2 xy, float2 Xy, float value, Color barColor) void DrawSelectionBar(WorldRenderer wr, float2 start, float2 end, float value, Color barColor)
{ {
var c = Color.FromArgb(128, 30, 30, 30); var c = Color.FromArgb(128, 30, 30, 30);
var c2 = Color.FromArgb(128, 10, 10, 10); var c2 = Color.FromArgb(128, 10, 10, 10);
@@ -65,15 +65,15 @@ namespace OpenRA.Graphics
var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2); var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2);
var z = float2.Lerp(xy, Xy, value); var z = float2.Lerp(start, end, value);
var wlr = Game.Renderer.WorldLineRenderer; var wlr = Game.Renderer.WorldLineRenderer;
wlr.DrawLine(xy + p, Xy + p, c, c); wlr.DrawLine(start + p, end + p, c, c);
wlr.DrawLine(xy + q, Xy + q, c2, c2); wlr.DrawLine(start + q, end + q, c2, c2);
wlr.DrawLine(xy + r, Xy + r, c, c); wlr.DrawLine(start + r, end + r, c, c);
wlr.DrawLine(xy + p, z + p, barColor2, barColor2); wlr.DrawLine(start + p, z + p, barColor2, barColor2);
wlr.DrawLine(xy + q, z + q, barColor, barColor); wlr.DrawLine(start + q, z + q, barColor, barColor);
wlr.DrawLine(xy + r, z + r, barColor2, barColor2); wlr.DrawLine(start + r, z + r, barColor2, barColor2);
} }
Color GetHealthColor(Health health) Color GetHealthColor(Health health)
@@ -90,7 +90,7 @@ namespace OpenRA.Graphics
health.DamageState == DamageState.Heavy ? Color.Yellow : Color.LimeGreen; health.DamageState == DamageState.Heavy ? Color.Yellow : Color.LimeGreen;
} }
void DrawHealthBar(WorldRenderer wr, Health health, float2 xy, float2 Xy) void DrawHealthBar(WorldRenderer wr, Health health, float2 start, float2 end)
{ {
if (health == null || health.IsDead) if (health == null || health.IsDead)
return; return;
@@ -108,16 +108,16 @@ namespace OpenRA.Graphics
healthColor.G / 2, healthColor.G / 2,
healthColor.B / 2); healthColor.B / 2);
var z = float2.Lerp(xy, Xy, (float)health.HP / health.MaxHP); var z = float2.Lerp(start, end, (float)health.HP / health.MaxHP);
var wlr = Game.Renderer.WorldLineRenderer; var wlr = Game.Renderer.WorldLineRenderer;
wlr.DrawLine(xy + p, Xy + p, c, c); wlr.DrawLine(start + p, end + p, c, c);
wlr.DrawLine(xy + q, Xy + q, c2, c2); wlr.DrawLine(start + q, end + q, c2, c2);
wlr.DrawLine(xy + r, Xy + r, c, c); wlr.DrawLine(start + r, end + r, c, c);
wlr.DrawLine(xy + p, z + p, healthColor2, healthColor2); wlr.DrawLine(start + p, z + p, healthColor2, healthColor2);
wlr.DrawLine(xy + q, z + q, healthColor, healthColor); wlr.DrawLine(start + q, z + q, healthColor, healthColor);
wlr.DrawLine(xy + r, z + r, healthColor2, healthColor2); wlr.DrawLine(start + r, z + r, healthColor2, healthColor2);
if (health.DisplayHp != health.HP) if (health.DisplayHp != health.HP)
{ {
@@ -127,7 +127,7 @@ namespace OpenRA.Graphics
deltaColor.R / 2, deltaColor.R / 2,
deltaColor.G / 2, deltaColor.G / 2,
deltaColor.B / 2); deltaColor.B / 2);
var zz = float2.Lerp(xy, Xy, (float)health.DisplayHp / health.MaxHP); var zz = float2.Lerp(start, end, (float)health.DisplayHp / health.MaxHP);
wlr.DrawLine(z + p, zz + p, deltaColor2, deltaColor2); wlr.DrawLine(z + p, zz + p, deltaColor2, deltaColor2);
wlr.DrawLine(z + q, zz + q, deltaColor, deltaColor); wlr.DrawLine(z + q, zz + q, deltaColor, deltaColor);
@@ -147,11 +147,11 @@ namespace OpenRA.Graphics
var bounds = actor.Bounds; var bounds = actor.Bounds;
bounds.Offset(screenPos.X, screenPos.Y); bounds.Offset(screenPos.X, screenPos.Y);
var xy = new float2(bounds.Left, bounds.Top); var start = new float2(bounds.Left, bounds.Top);
var Xy = new float2(bounds.Right, bounds.Top); var end = new float2(bounds.Right, bounds.Top);
DrawHealthBar(wr, health, xy, Xy); DrawHealthBar(wr, health, start, end);
DrawExtraBars(wr, xy, Xy); DrawExtraBars(wr, start, end);
} }
public void RenderDebugGeometry(WorldRenderer wr) { } public void RenderDebugGeometry(WorldRenderer wr) { }

View File

@@ -15,8 +15,8 @@ namespace OpenRA.Graphics
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
public struct Vertex public struct Vertex
{ {
public float x, y, z, u, v; float x, y, z, u, v;
public float p, c; float p, c;
public Vertex(float2 xy, float u, float v, float p, float c) public Vertex(float2 xy, float u, float v, float p, float c)
{ {

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Graphics
public VoxelRenderProxy(Sprite sprite, Sprite shadowSprite, float2[] projectedShadowBounds, float shadowDirection) public VoxelRenderProxy(Sprite sprite, Sprite shadowSprite, float2[] projectedShadowBounds, float shadowDirection)
{ {
Sprite = sprite; this.Sprite = sprite;
ShadowSprite = shadowSprite; ShadowSprite = shadowSprite;
ProjectedShadowBounds = projectedShadowBounds; ProjectedShadowBounds = projectedShadowBounds;
ShadowDirection = shadowDirection; ShadowDirection = shadowDirection;

View File

@@ -19,17 +19,17 @@ namespace OpenRA
public readonly Actor self; public readonly Actor self;
public World world { get { return self.World; } } public World world { get { return self.World; } }
internal TypeDictionary dict; internal TypeDictionary Dict;
public ActorInitializer(Actor actor, TypeDictionary dict) public ActorInitializer(Actor actor, TypeDictionary dict)
{ {
this.self = actor; self = actor;
this.dict = dict; Dict = dict;
} }
public T Get<T>() where T : IActorInit { return dict.Get<T>(); } public T Get<T>() where T : IActorInit { return Dict.Get<T>(); }
public U Get<T, U>() where T : IActorInit<U> { return dict.Get<T>().Value(world); } public U Get<T, U>() where T : IActorInit<U> { return Dict.Get<T>().Value(world); }
public bool Contains<T>() where T : IActorInit { return dict.Contains<T>(); } public bool Contains<T>() where T : IActorInit { return Dict.Contains<T>(); }
} }
public interface IActorInit { } public interface IActorInit { }
@@ -41,7 +41,7 @@ namespace OpenRA
public class FacingInit : IActorInit<int> public class FacingInit : IActorInit<int>
{ {
[FieldFromYamlKey] public readonly int value = 128; [FieldFromYamlKey] readonly int value = 128;
public FacingInit() { } public FacingInit() { }
public FacingInit(int init) { value = init; } public FacingInit(int init) { value = init; }
public int Value(World world) { return value; } public int Value(World world) { return value; }
@@ -49,7 +49,7 @@ namespace OpenRA
public class TurretFacingInit : IActorInit<int> public class TurretFacingInit : IActorInit<int>
{ {
[FieldFromYamlKey] public readonly int value = 128; [FieldFromYamlKey] readonly int value = 128;
public TurretFacingInit() { } public TurretFacingInit() { }
public TurretFacingInit(int init) { value = init; } public TurretFacingInit(int init) { value = init; }
public int Value(World world) { return value; } public int Value(World world) { return value; }
@@ -57,7 +57,7 @@ namespace OpenRA
public class LocationInit : IActorInit<CPos> public class LocationInit : IActorInit<CPos>
{ {
[FieldFromYamlKey] public readonly CPos value = CPos.Zero; [FieldFromYamlKey] readonly CPos value = CPos.Zero;
public LocationInit() { } public LocationInit() { }
public LocationInit(CPos init) { value = init; } public LocationInit(CPos init) { value = init; }
public CPos Value(World world) { return value; } public CPos Value(World world) { return value; }
@@ -65,7 +65,7 @@ namespace OpenRA
public class SubCellInit : IActorInit<SubCell> public class SubCellInit : IActorInit<SubCell>
{ {
[FieldFromYamlKey] public readonly int value = (int)SubCell.FullCell; [FieldFromYamlKey] readonly int value = (int)SubCell.FullCell;
public SubCellInit() { } public SubCellInit() { }
public SubCellInit(int init) { value = init; } public SubCellInit(int init) { value = init; }
public SubCellInit(SubCell init) { value = (int)init; } public SubCellInit(SubCell init) { value = (int)init; }
@@ -74,7 +74,7 @@ namespace OpenRA
public class CenterPositionInit : IActorInit<WPos> public class CenterPositionInit : IActorInit<WPos>
{ {
[FieldFromYamlKey] public readonly WPos value = WPos.Zero; [FieldFromYamlKey] readonly WPos value = WPos.Zero;
public CenterPositionInit() { } public CenterPositionInit() { }
public CenterPositionInit(WPos init) { value = init; } public CenterPositionInit(WPos init) { value = init; }
public WPos Value(World world) { return value; } public WPos Value(World world) { return value; }

View File

@@ -385,7 +385,7 @@ namespace OpenRA
{ {
return Actors.Value.Values return Actors.Value.Values
.Where(a => a.Type == "mpspawn") .Where(a => a.Type == "mpspawn")
.Select(a => (CPos)a.InitDict.Get<LocationInit>().value) .Select(a => (CPos)a.InitDict.Get<LocationInit>().Value(null))
.ToArray(); .ToArray();
} }
@@ -847,7 +847,7 @@ namespace OpenRA
return new WRange(Math.Min(x, y) * dir.Length); return new WRange(Math.Min(x, y) * dir.Length);
} }
static CVec[][] TilesByDistance = InitTilesByDistance(MaxTilesInCircleRange); static readonly CVec[][] TilesByDistance = InitTilesByDistance(MaxTilesInCircleRange);
static CVec[][] InitTilesByDistance(int max) static CVec[][] InitTilesByDistance(int max)
{ {

5
OpenRA.Game/Map/MapPreview.cs Executable file → Normal file
View File

@@ -11,6 +11,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@@ -28,7 +29,9 @@ namespace OpenRA
// Used for verifying map availability in the lobby // Used for verifying map availability in the lobby
public enum MapRuleStatus { Unknown, Cached, Invalid } public enum MapRuleStatus { Unknown, Cached, Invalid }
// Fields names must match the with the remote API [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Fields names must match the with the remote API.")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1304:NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter", Justification = "Fields names must match the with the remote API.")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore", Justification = "Fields names must match the with the remote API.")]
public class RemoteMapData public class RemoteMapData
{ {
public readonly string title; public readonly string title;

View File

@@ -83,8 +83,9 @@ namespace OpenRA
public class MiniYaml public class MiniYaml
{ {
static Func<string, string> StringIdentity = s => s; static readonly Func<string, string> StringIdentity = s => s;
static Func<MiniYaml, MiniYaml> MiniYamlIdentity = my => my; static readonly Func<MiniYaml, MiniYaml> MiniYamlIdentity = my => my;
public string Value; public string Value;
public List<MiniYamlNode> Nodes; public List<MiniYamlNode> Nodes;

View File

@@ -254,6 +254,8 @@
<Compile Include="GameRules\DamageWarhead.cs" /> <Compile Include="GameRules\DamageWarhead.cs" />
<Compile Include="Graphics\SoftwareCursor.cs" /> <Compile Include="Graphics\SoftwareCursor.cs" />
<Compile Include="Graphics\HardwareCursor.cs" /> <Compile Include="Graphics\HardwareCursor.cs" />
<Compile Include="Support\PerfItem.cs" />
<Compile Include="Support\PerfSample.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="FileSystem\D2kSoundResources.cs" /> <Compile Include="FileSystem\D2kSoundResources.cs" />

View File

@@ -18,19 +18,19 @@ namespace OpenRA.Primitives
{ {
public ObservableSortedDictionary(IComparer<TKey> comparer) public ObservableSortedDictionary(IComparer<TKey> comparer)
{ {
InnerDict = new SortedDictionary<TKey, TValue>(comparer); innerDict = new SortedDictionary<TKey, TValue>(comparer);
} }
public override void Add(TKey key, TValue value) public override void Add(TKey key, TValue value)
{ {
InnerDict.Add(key, value); innerDict.Add(key, value);
FireOnRefresh(); FireOnRefresh();
} }
} }
public class ObservableDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IObservableCollection public class ObservableDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IObservableCollection
{ {
protected IDictionary<TKey, TValue> InnerDict; protected IDictionary<TKey, TValue> innerDict;
public event Action<object> OnAdd = k => { }; public event Action<object> OnAdd = k => { };
public event Action<object> OnRemove = k => { }; public event Action<object> OnRemove = k => { };
@@ -51,18 +51,18 @@ namespace OpenRA.Primitives
public ObservableDictionary(IEqualityComparer<TKey> comparer) public ObservableDictionary(IEqualityComparer<TKey> comparer)
{ {
InnerDict = new Dictionary<TKey, TValue>(comparer); innerDict = new Dictionary<TKey, TValue>(comparer);
} }
public virtual void Add(TKey key, TValue value) public virtual void Add(TKey key, TValue value)
{ {
InnerDict.Add(key, value); innerDict.Add(key, value);
OnAdd(key); OnAdd(key);
} }
public bool Remove(TKey key) public bool Remove(TKey key)
{ {
var found = InnerDict.Remove(key); var found = innerDict.Remove(key);
if (found) if (found)
OnRemove(key); OnRemove(key);
return found; return found;
@@ -70,32 +70,32 @@ namespace OpenRA.Primitives
public bool ContainsKey(TKey key) public bool ContainsKey(TKey key)
{ {
return InnerDict.ContainsKey(key); return innerDict.ContainsKey(key);
} }
public ICollection<TKey> Keys { get { return InnerDict.Keys; } } public ICollection<TKey> Keys { get { return innerDict.Keys; } }
public ICollection<TValue> Values { get { return InnerDict.Values; } } public ICollection<TValue> Values { get { return innerDict.Values; } }
public bool TryGetValue(TKey key, out TValue value) public bool TryGetValue(TKey key, out TValue value)
{ {
return InnerDict.TryGetValue(key, out value); return innerDict.TryGetValue(key, out value);
} }
public TValue this[TKey key] public TValue this[TKey key]
{ {
get { return InnerDict[key]; } get { return innerDict[key]; }
set { InnerDict[key] = value; } set { innerDict[key] = value; }
} }
public void Clear() public void Clear()
{ {
InnerDict.Clear(); innerDict.Clear();
OnRefresh(); OnRefresh();
} }
public int Count public int Count
{ {
get { return InnerDict.Count; } get { return innerDict.Count; }
} }
public void Add(KeyValuePair<TKey, TValue> item) public void Add(KeyValuePair<TKey, TValue> item)
@@ -105,17 +105,17 @@ namespace OpenRA.Primitives
public bool Contains(KeyValuePair<TKey, TValue> item) public bool Contains(KeyValuePair<TKey, TValue> item)
{ {
return InnerDict.Contains(item); return innerDict.Contains(item);
} }
public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
{ {
InnerDict.CopyTo(array, arrayIndex); innerDict.CopyTo(array, arrayIndex);
} }
public bool IsReadOnly public bool IsReadOnly
{ {
get { return InnerDict.IsReadOnly; } get { return innerDict.IsReadOnly; }
} }
public bool Remove(KeyValuePair<TKey, TValue> item) public bool Remove(KeyValuePair<TKey, TValue> item)
@@ -125,17 +125,17 @@ namespace OpenRA.Primitives
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{ {
return InnerDict.GetEnumerator(); return innerDict.GetEnumerator();
} }
IEnumerator IEnumerable.GetEnumerator() IEnumerator IEnumerable.GetEnumerator()
{ {
return InnerDict.GetEnumerator(); return innerDict.GetEnumerator();
} }
public IEnumerable ObservedItems public IEnumerable ObservedItems
{ {
get { return InnerDict.Keys; } get { return innerDict.Keys; }
} }
} }
} }

View File

@@ -24,12 +24,12 @@ namespace OpenRA.Primitives
Second = second; Second = second;
} }
internal static IEqualityComparer<T> tc = EqualityComparer<T>.Default; internal static IEqualityComparer<T> Tcomparer = EqualityComparer<T>.Default;
internal static IEqualityComparer<U> uc = EqualityComparer<U>.Default; internal static IEqualityComparer<U> Ucomparer = EqualityComparer<U>.Default;
public static bool operator ==(Pair<T, U> a, Pair<T, U> b) public static bool operator ==(Pair<T, U> a, Pair<T, U> b)
{ {
return tc.Equals(a.First, b.First) && uc.Equals(a.Second, b.Second); return Tcomparer.Equals(a.First, b.First) && Ucomparer.Equals(a.Second, b.Second);
} }
public static bool operator !=(Pair<T, U> a, Pair<T, U> b) public static bool operator !=(Pair<T, U> a, Pair<T, U> b)
@@ -74,7 +74,7 @@ namespace OpenRA.Primitives
static Pair() static Pair()
{ {
Pair<char, Color>.uc = new ColorEqualityComparer(); Pair<char, Color>.Ucomparer = new ColorEqualityComparer();
} }
// avoid the default crappy one // avoid the default crappy one

View File

@@ -9,11 +9,13 @@
#endregion #endregion
using System; using System;
using System.Diagnostics.CodeAnalysis;
using System.Drawing; using System.Drawing;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace OpenRA namespace OpenRA
{ {
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Mimic a built-in type alias.")]
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
public struct float2 public struct float2
{ {

View File

@@ -9,14 +9,15 @@
#endregion #endregion
using System; using System;
using System.Diagnostics.CodeAnalysis;
using System.Drawing; using System.Drawing;
namespace OpenRA namespace OpenRA
{ {
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Mimic a built-in type alias.")]
public struct int2 public struct int2
{ {
public int X, Y; public int X, Y;
public int2(int x, int y) { this.X = x; this.Y = y; } public int2(int x, int y) { this.X = x; this.Y = y; }
public int2(Point p) { X = p.X; Y = p.Y; } public int2(Point p) { X = p.X; Y = p.Y; }
public int2(Size p) { X = p.Width; Y = p.Height; } public int2(Size p) { X = p.Width; Y = p.Height; }

View File

@@ -72,7 +72,7 @@ namespace OpenRA
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>()); Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
public void DoControlGroup(World world, WorldRenderer worldRenderer, int group, Modifiers mods, int MultiTapCount) public void DoControlGroup(World world, WorldRenderer worldRenderer, int group, Modifiers mods, int multiTapCount)
{ {
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl; var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
if (mods.HasModifier(addModifier)) if (mods.HasModifier(addModifier))
@@ -92,7 +92,7 @@ namespace OpenRA
var groupActors = controlGroups[group].Where(a => !a.IsDead); var groupActors = controlGroups[group].Where(a => !a.IsDead);
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2) if (mods.HasModifier(Modifiers.Alt) || multiTapCount >= 2)
{ {
worldRenderer.Viewport.Center(groupActors); worldRenderer.Viewport.Center(groupActors);
return; return;

View File

@@ -18,8 +18,8 @@ namespace OpenRA.Server
public class Connection public class Connection
{ {
public const int MaxOrderLength = 131072; public const int MaxOrderLength = 131072;
public Socket socket; public Socket Socket;
public List<byte> data = new List<byte>(); public List<byte> Data = new List<byte>();
public ReceiveState State = ReceiveState.Header; public ReceiveState State = ReceiveState.Header;
public int ExpectLength = 8; public int ExpectLength = 8;
public int Frame = 0; public int Frame = 0;
@@ -34,8 +34,8 @@ namespace OpenRA.Server
public byte[] PopBytes(int n) public byte[] PopBytes(int n)
{ {
var result = data.GetRange(0, n); var result = Data.GetRange(0, n);
data.RemoveRange(0, n); Data.RemoveRange(0, n);
return result.ToArray(); return result.ToArray();
} }
@@ -51,10 +51,10 @@ namespace OpenRA.Server
// NOTE(jsd): Poll the socket first to see if there's anything there. // NOTE(jsd): Poll the socket first to see if there's anything there.
// This avoids the exception with SocketErrorCode == `SocketError.WouldBlock` thrown // This avoids the exception with SocketErrorCode == `SocketError.WouldBlock` thrown
// from `socket.Receive(rx)`. // from `socket.Receive(rx)`.
if (!socket.Poll(0, SelectMode.SelectRead)) break; if (!Socket.Poll(0, SelectMode.SelectRead)) break;
if (0 < (len = socket.Receive(rx))) if (0 < (len = Socket.Receive(rx)))
data.AddRange(rx.Take(len)); Data.AddRange(rx.Take(len));
else else
{ {
if (len == 0) if (len == 0)
@@ -82,7 +82,7 @@ namespace OpenRA.Server
public void ReadData(Server server) public void ReadData(Server server)
{ {
if (ReadDataInner(server)) if (ReadDataInner(server))
while (data.Count >= ExpectLength) while (Data.Count >= ExpectLength)
{ {
var bytes = PopBytes(ExpectLength); var bytes = PopBytes(ExpectLength);
switch (State) switch (State)

View File

@@ -157,8 +157,8 @@ namespace OpenRA.Server
{ {
var checkRead = new List<Socket>(); var checkRead = new List<Socket>();
if (State == ServerState.WaitingPlayers) checkRead.Add(listener.Server); if (State == ServerState.WaitingPlayers) checkRead.Add(listener.Server);
foreach (var c in Conns) checkRead.Add(c.socket); foreach (var c in Conns) checkRead.Add(c.Socket);
foreach (var c in PreConns) checkRead.Add(c.socket); foreach (var c in PreConns) checkRead.Add(c.Socket);
if (checkRead.Count > 0) Socket.Select(checkRead, null, null, timeout); if (checkRead.Count > 0) Socket.Select(checkRead, null, null, timeout);
if (State == ServerState.ShuttingDown) if (State == ServerState.ShuttingDown)
@@ -171,12 +171,12 @@ namespace OpenRA.Server
if (s == listener.Server) AcceptConnection(); if (s == listener.Server) AcceptConnection();
else if (PreConns.Count > 0) else if (PreConns.Count > 0)
{ {
var p = PreConns.SingleOrDefault(c => c.socket == s); var p = PreConns.SingleOrDefault(c => c.Socket == s);
if (p != null) p.ReadData(this); if (p != null) p.ReadData(this);
} }
else if (Conns.Count > 0) else if (Conns.Count > 0)
{ {
var conn = Conns.SingleOrDefault(c => c.socket == s); var conn = Conns.SingleOrDefault(c => c.Socket == s);
if (conn != null) conn.ReadData(this); if (conn != null) conn.ReadData(this);
} }
@@ -228,16 +228,16 @@ namespace OpenRA.Server
return; return;
} }
var newConn = new Connection { socket = newSocket }; var newConn = new Connection { Socket = newSocket };
try try
{ {
newConn.socket.Blocking = false; newConn.Socket.Blocking = false;
newConn.socket.NoDelay = true; newConn.Socket.NoDelay = true;
// assign the player number. // assign the player number.
newConn.PlayerIndex = ChooseFreePlayerIndex(); newConn.PlayerIndex = ChooseFreePlayerIndex();
SendData(newConn.socket, BitConverter.GetBytes(ProtocolVersion.Version)); SendData(newConn.Socket, BitConverter.GetBytes(ProtocolVersion.Version));
SendData(newConn.socket, BitConverter.GetBytes(newConn.PlayerIndex)); SendData(newConn.Socket, BitConverter.GetBytes(newConn.PlayerIndex));
PreConns.Add(newConn); PreConns.Add(newConn);
// Dispatch a handshake order // Dispatch a handshake order
@@ -264,7 +264,7 @@ namespace OpenRA.Server
if (State == ServerState.GameStarted) if (State == ServerState.GameStarted)
{ {
Log.Write("server", "Rejected connection from {0}; game is already started.", Log.Write("server", "Rejected connection from {0}; game is already started.",
newConn.socket.RemoteEndPoint); newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "The game has already started"); SendOrderTo(newConn, "ServerError", "The game has already started");
DropClient(newConn); DropClient(newConn);
@@ -284,7 +284,7 @@ namespace OpenRA.Server
var client = new Session.Client() var client = new Session.Client()
{ {
Name = handshake.Client.Name, Name = handshake.Client.Name,
IpAddress = ((IPEndPoint)newConn.socket.RemoteEndPoint).Address.ToString(), IpAddress = ((IPEndPoint)newConn.Socket.RemoteEndPoint).Address.ToString(),
Index = newConn.PlayerIndex, Index = newConn.PlayerIndex,
Slot = LobbyInfo.FirstEmptySlot(), Slot = LobbyInfo.FirstEmptySlot(),
PreferredColor = handshake.Client.Color, PreferredColor = handshake.Client.Color,
@@ -311,7 +311,7 @@ namespace OpenRA.Server
if (ModData.Manifest.Mod.Id != handshake.Mod) if (ModData.Manifest.Mod.Id != handshake.Mod)
{ {
Log.Write("server", "Rejected connection from {0}; mods do not match.", Log.Write("server", "Rejected connection from {0}; mods do not match.",
newConn.socket.RemoteEndPoint); newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "Server is running an incompatible mod"); SendOrderTo(newConn, "ServerError", "Server is running an incompatible mod");
DropClient(newConn); DropClient(newConn);
@@ -321,7 +321,7 @@ namespace OpenRA.Server
if (ModData.Manifest.Mod.Version != handshake.Version && !LobbyInfo.GlobalSettings.AllowVersionMismatch) if (ModData.Manifest.Mod.Version != handshake.Version && !LobbyInfo.GlobalSettings.AllowVersionMismatch)
{ {
Log.Write("server", "Rejected connection from {0}; Not running the same version.", Log.Write("server", "Rejected connection from {0}; Not running the same version.",
newConn.socket.RemoteEndPoint); newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "Server is running an incompatible version"); SendOrderTo(newConn, "ServerError", "Server is running an incompatible version");
DropClient(newConn); DropClient(newConn);
@@ -332,7 +332,7 @@ namespace OpenRA.Server
var bans = Settings.Ban.Union(TempBans); var bans = Settings.Ban.Union(TempBans);
if (bans.Contains(client.IpAddress)) if (bans.Contains(client.IpAddress))
{ {
Log.Write("server", "Rejected connection from {0}; Banned.", newConn.socket.RemoteEndPoint); Log.Write("server", "Rejected connection from {0}; Banned.", newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "You have been {0} from the server".F(Settings.Ban.Contains(client.IpAddress) ? "banned" : "temporarily banned")); SendOrderTo(newConn, "ServerError", "You have been {0} from the server".F(Settings.Ban.Contains(client.IpAddress) ? "banned" : "temporarily banned"));
DropClient(newConn); DropClient(newConn);
return; return;
@@ -347,7 +347,7 @@ namespace OpenRA.Server
LobbyInfo.ClientPings.Add(clientPing); LobbyInfo.ClientPings.Add(clientPing);
Log.Write("server", "Client {0}: Accepted connection from {1}.", Log.Write("server", "Client {0}: Accepted connection from {1}.",
newConn.PlayerIndex, newConn.socket.RemoteEndPoint); newConn.PlayerIndex, newConn.Socket.RemoteEndPoint);
foreach (var t in serverTraits.WithInterface<IClientJoined>()) foreach (var t in serverTraits.WithInterface<IClientJoined>())
t.ClientJoined(this, newConn); t.ClientJoined(this, newConn);
@@ -391,10 +391,10 @@ namespace OpenRA.Server
{ {
try try
{ {
SendData(c.socket, BitConverter.GetBytes(data.Length + 4)); SendData(c.Socket, BitConverter.GetBytes(data.Length + 4));
SendData(c.socket, BitConverter.GetBytes(client)); SendData(c.Socket, BitConverter.GetBytes(client));
SendData(c.socket, BitConverter.GetBytes(frame)); SendData(c.Socket, BitConverter.GetBytes(frame));
SendData(c.socket, data); SendData(c.Socket, data);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -571,7 +571,7 @@ namespace OpenRA.Server
try try
{ {
toDrop.socket.Disconnect(false); toDrop.Socket.Disconnect(false);
} }
catch { } catch { }

View File

@@ -18,108 +18,31 @@ namespace OpenRA.Support
{ {
public static class PerfHistory public static class PerfHistory
{ {
static readonly Color[] colors = { Color.Red, Color.Green, static readonly Color[] Colors = { Color.Red, Color.Green,
Color.Orange, Color.Yellow, Color.Orange, Color.Yellow,
Color.Fuchsia, Color.Lime, Color.Fuchsia, Color.Lime,
Color.LightBlue, Color.Blue, Color.LightBlue, Color.Blue,
Color.White, Color.Teal }; Color.White, Color.Teal };
static int nextColor; static int nextColor;
public static Cache<string, PerfItem> items = new Cache<string, PerfItem>( public static Cache<string, PerfItem> Items = new Cache<string, PerfItem>(
s => s =>
{ {
var x = new PerfItem(s, colors[nextColor++]); var x = new PerfItem(s, Colors[nextColor++]);
if (nextColor >= colors.Length) nextColor = 0; if (nextColor >= Colors.Length) nextColor = 0;
return x; return x;
}); });
public static void Increment(string item, double x) public static void Increment(string item, double x)
{ {
items[item].val += x; Items[item].Val += x;
} }
public static void Tick() public static void Tick()
{ {
foreach (var item in items.Values) foreach (var item in Items.Values)
if (item.hasNormalTick) if (item.HasNormalTick)
item.Tick(); item.Tick();
} }
} }
}
public class PerfItem
{
public readonly Color c;
public readonly string Name;
public double[] samples = new double[100];
public double val = 0.0;
int head = 1, tail = 0;
public bool hasNormalTick = true;
public PerfItem(string name, Color c)
{
Name = name;
this.c = c;
}
public void Tick()
{
samples[head++] = val;
if (head == samples.Length) head = 0;
if (head == tail && ++tail == samples.Length) tail = 0;
val = 0.0;
}
public IEnumerable<double> Samples()
{
var n = head;
while (n != tail)
{
--n;
if (n < 0) n = samples.Length - 1;
yield return samples[n];
}
}
public double Average(int count)
{
var i = 0;
var n = head;
double sum = 0;
while (i < count && n != tail)
{
if (--n < 0) n = samples.Length - 1;
sum += samples[n];
i++;
}
return sum / i;
}
public double LastValue
{
get
{
var n = head;
if (--n < 0) n = samples.Length - 1;
return samples[n];
}
}
}
public struct PerfSample : IDisposable
{
readonly string item;
readonly long ticks;
public PerfSample(string item)
{
this.item = item;
ticks = Stopwatch.GetTimestamp();
}
public void Dispose()
{
PerfHistory.Increment(item, 1000.0 * Math.Max(0, Stopwatch.GetTimestamp() - ticks) / Stopwatch.Frequency);
}
}
}

View File

@@ -0,0 +1,78 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using OpenRA.Primitives;
namespace OpenRA.Support
{
public class PerfItem
{
public readonly Color C;
public readonly string Name;
double[] samples = new double[100];
public double Val = 0.0;
int head = 1, tail = 0;
public bool HasNormalTick = true;
public PerfItem(string name, Color c)
{
Name = name;
C = c;
}
public void Tick()
{
samples[head++] = Val;
if (head == samples.Length) head = 0;
if (head == tail && ++tail == samples.Length) tail = 0;
Val = 0.0;
}
public IEnumerable<double> Samples()
{
var n = head;
while (n != tail)
{
--n;
if (n < 0) n = samples.Length - 1;
yield return samples[n];
}
}
public double Average(int count)
{
var i = 0;
var n = head;
double sum = 0;
while (i < count && n != tail)
{
if (--n < 0) n = samples.Length - 1;
sum += samples[n];
i++;
}
return sum / i;
}
public double LastValue
{
get
{
var n = head;
if (--n < 0) n = samples.Length - 1;
return samples[n];
}
}
}
}

View File

@@ -0,0 +1,35 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using OpenRA.Primitives;
namespace OpenRA.Support
{
public struct PerfSample : IDisposable
{
readonly string item;
readonly long ticks;
public PerfSample(string item)
{
this.item = item;
ticks = Stopwatch.GetTimestamp();
}
public void Dispose()
{
PerfHistory.Increment(item, 1000.0 * Math.Max(0, Stopwatch.GetTimestamp() - ticks) / Stopwatch.Frequency);
}
}
}

View File

@@ -30,16 +30,16 @@ namespace OpenRA.Support
List<PerfTimer> children; List<PerfTimer> children;
long ticks; long ticks;
static ThreadLocal<PerfTimer> Parent = new ThreadLocal<PerfTimer>(); static ThreadLocal<PerfTimer> parentThreadLocal = new ThreadLocal<PerfTimer>();
public PerfTimer(string name, float thresholdMs = 0) public PerfTimer(string name, float thresholdMs = 0)
{ {
this.name = name; this.name = name;
this.thresholdMs = thresholdMs; this.thresholdMs = thresholdMs;
parent = Parent.Value; parent = parentThreadLocal.Value;
depth = parent == null ? (byte)0 : (byte)(parent.depth + 1); depth = parent == null ? (byte)0 : (byte)(parent.depth + 1);
Parent.Value = this; parentThreadLocal.Value = this;
ticks = Stopwatch.GetTimestamp(); ticks = Stopwatch.GetTimestamp();
} }
@@ -48,7 +48,7 @@ namespace OpenRA.Support
{ {
ticks = Stopwatch.GetTimestamp() - ticks; ticks = Stopwatch.GetTimestamp() - ticks;
Parent.Value = parent; parentThreadLocal.Value = parent;
if (parent == null) if (parent == null)
Write(); Write();

View File

@@ -33,18 +33,18 @@ namespace OpenRA
static Dictionary<Type, MethodInfo> hashFunctions = new Dictionary<Type, MethodInfo>() static Dictionary<Type, MethodInfo> hashFunctions = new Dictionary<Type, MethodInfo>()
{ {
{ typeof(int2), ((Func<int2, int>)hash_int2).Method }, { typeof(int2), ((Func<int2, int>)HashInt2).Method },
{ typeof(CPos), ((Func<CPos, int>)hash_CPos).Method }, { typeof(CPos), ((Func<CPos, int>)HashCPos).Method },
{ typeof(CVec), ((Func<CVec, int>)hash_CVec).Method }, { typeof(CVec), ((Func<CVec, int>)HashCVec).Method },
{ typeof(WRange), ((Func<WRange, int>)hash<WRange>).Method }, { typeof(WRange), ((Func<WRange, int>)Hash<WRange>).Method },
{ typeof(WPos), ((Func<WPos, int>)hash<WPos>).Method }, { typeof(WPos), ((Func<WPos, int>)Hash<WPos>).Method },
{ typeof(WVec), ((Func<WVec, int>)hash<WVec>).Method }, { typeof(WVec), ((Func<WVec, int>)Hash<WVec>).Method },
{ typeof(WAngle), ((Func<WAngle, int>)hash<WAngle>).Method }, { typeof(WAngle), ((Func<WAngle, int>)Hash<WAngle>).Method },
{ typeof(WRot), ((Func<WRot, int>)hash<WRot>).Method }, { typeof(WRot), ((Func<WRot, int>)Hash<WRot>).Method },
{ typeof(TypeDictionary), ((Func<TypeDictionary, int>)hash_tdict).Method }, { typeof(TypeDictionary), ((Func<TypeDictionary, int>)HashTDict).Method },
{ typeof(Actor), ((Func<Actor, int>)hash_actor).Method }, { typeof(Actor), ((Func<Actor, int>)HashActor).Method },
{ typeof(Player), ((Func<Player, int>)hash_player).Method }, { typeof(Player), ((Func<Player, int>)HashPlayer).Method },
{ typeof(Target), ((Func<Target, int>)hash_target).Method }, { typeof(Target), ((Func<Target, int>)HashTarget).Method },
}; };
static void EmitSyncOpcodes(Type type, ILGenerator il) static void EmitSyncOpcodes(Type type, ILGenerator il)
@@ -78,8 +78,8 @@ namespace OpenRA
il.Emit(OpCodes.Stloc, this_); il.Emit(OpCodes.Stloc, this_);
il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ldc_I4_0);
const BindingFlags bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; const BindingFlags Binding = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
foreach (var field in t.GetFields(bf).Where(x => x.HasAttribute<SyncAttribute>())) foreach (var field in t.GetFields(Binding).Where(x => x.HasAttribute<SyncAttribute>()))
{ {
il.Emit(OpCodes.Ldloc, this_); il.Emit(OpCodes.Ldloc, this_);
il.Emit(OpCodes.Ldfld, field); il.Emit(OpCodes.Ldfld, field);
@@ -87,7 +87,7 @@ namespace OpenRA
EmitSyncOpcodes(field.FieldType, il); EmitSyncOpcodes(field.FieldType, il);
} }
foreach (var prop in t.GetProperties(bf).Where(x => x.HasAttribute<SyncAttribute>())) foreach (var prop in t.GetProperties(Binding).Where(x => x.HasAttribute<SyncAttribute>()))
{ {
il.Emit(OpCodes.Ldloc, this_); il.Emit(OpCodes.Ldloc, this_);
il.EmitCall(OpCodes.Call, prop.GetGetMethod(), null); il.EmitCall(OpCodes.Call, prop.GetGetMethod(), null);
@@ -99,22 +99,22 @@ namespace OpenRA
return (Func<object, int>)d.CreateDelegate(typeof(Func<object, int>)); return (Func<object, int>)d.CreateDelegate(typeof(Func<object, int>));
} }
public static int hash_int2(int2 i2) public static int HashInt2(int2 i2)
{ {
return ((i2.X * 5) ^ (i2.Y * 3)) / 4; return ((i2.X * 5) ^ (i2.Y * 3)) / 4;
} }
public static int hash_CPos(CPos i2) public static int HashCPos(CPos i2)
{
return ((i2.X * 5) ^ (i2.Y * 3)) / 4;
}
public static int hash_CVec(CVec i2)
{ {
return ((i2.X * 5) ^ (i2.Y * 3)) / 4; return ((i2.X * 5) ^ (i2.Y * 3)) / 4;
} }
public static int hash_tdict(TypeDictionary d) public static int HashCVec(CVec i2)
{
return ((i2.X * 5) ^ (i2.Y * 3)) / 4;
}
public static int HashTDict(TypeDictionary d)
{ {
var ret = 0; var ret = 0;
foreach (var o in d) foreach (var o in d)
@@ -122,21 +122,21 @@ namespace OpenRA
return ret; return ret;
} }
public static int hash_actor(Actor a) public static int HashActor(Actor a)
{ {
if (a != null) if (a != null)
return (int)(a.ActorID << 16); return (int)(a.ActorID << 16);
return 0; return 0;
} }
public static int hash_player(Player p) public static int HashPlayer(Player p)
{ {
if (p != null) if (p != null)
return (int)(p.PlayerActor.ActorID << 16) * 0x567; return (int)(p.PlayerActor.ActorID << 16) * 0x567;
return 0; return 0;
} }
public static int hash_target(Target t) public static int HashTarget(Target t)
{ {
switch (t.Type) switch (t.Type)
{ {
@@ -147,7 +147,7 @@ namespace OpenRA
return (int)(t.FrozenActor.Actor.ActorID << 16) * 0x567; return (int)(t.FrozenActor.Actor.ActorID << 16) * 0x567;
case TargetType.Terrain: case TargetType.Terrain:
return hash<WPos>(t.CenterPosition); return Hash<WPos>(t.CenterPosition);
default: default:
case TargetType.Invalid: case TargetType.Invalid:
@@ -155,7 +155,7 @@ namespace OpenRA
} }
} }
public static int hash<T>(T t) public static int Hash<T>(T t)
{ {
return t.GetHashCode(); return t.GetHashCode();
} }

0
OpenRA.Game/Traits/BodyOrientation.cs Executable file → Normal file
View File

View File

@@ -20,13 +20,13 @@ namespace OpenRA.Traits
public class CreatesShroud : ITick, ISync public class CreatesShroud : ITick, ISync
{ {
CreatesShroudInfo Info; CreatesShroudInfo info;
[Sync] CPos cachedLocation; [Sync] CPos cachedLocation;
[Sync] bool cachedDisabled; [Sync] bool cachedDisabled;
public CreatesShroud(CreatesShroudInfo info) public CreatesShroud(CreatesShroudInfo info)
{ {
Info = info; this.info = info;
} }
public void Tick(Actor self) public void Tick(Actor self)
@@ -43,6 +43,6 @@ namespace OpenRA.Traits
} }
} }
public WRange Range { get { return cachedDisabled ? WRange.Zero : Info.Range; } } public WRange Range { get { return cachedDisabled ? WRange.Zero : info.Range; } }
} }
} }

View File

@@ -24,12 +24,12 @@ namespace OpenRA.Traits
public class DrawLineToTarget : IPostRenderSelection, INotifySelected, INotifyBecomingIdle public class DrawLineToTarget : IPostRenderSelection, INotifySelected, INotifyBecomingIdle
{ {
Actor self; Actor self;
DrawLineToTargetInfo Info; DrawLineToTargetInfo info;
List<Target> targets; List<Target> targets;
Color c; Color c;
int lifetime; int lifetime;
public DrawLineToTarget(Actor self, DrawLineToTargetInfo info) { this.self = self; this.Info = info; } public DrawLineToTarget(Actor self, DrawLineToTargetInfo info) { this.self = self; this.info = info; }
public void SetTarget(Actor self, Target target, Color c, bool display) public void SetTarget(Actor self, Target target, Color c, bool display)
{ {
@@ -37,7 +37,7 @@ namespace OpenRA.Traits
this.c = c; this.c = c;
if (display) if (display)
lifetime = Info.Ticks; lifetime = info.Ticks;
} }
public void SetTargets(Actor self, List<Target> targets, Color c, bool display) public void SetTargets(Actor self, List<Target> targets, Color c, bool display)
@@ -46,7 +46,7 @@ namespace OpenRA.Traits
this.c = c; this.c = c;
if (display) if (display)
lifetime = Info.Ticks; lifetime = info.Ticks;
} }
public void Selected(Actor a) public void Selected(Actor a)
@@ -55,7 +55,7 @@ namespace OpenRA.Traits
return; return;
// Reset the order line timeout. // Reset the order line timeout.
lifetime = Info.Ticks; lifetime = info.Ticks;
} }
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr) public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)

View File

@@ -171,7 +171,7 @@ namespace OpenRA.Traits
public class HealthInit : IActorInit<float> public class HealthInit : IActorInit<float>
{ {
[FieldFromYamlKey] public readonly float value = 1f; [FieldFromYamlKey] readonly float value = 1f;
public HealthInit() { } public HealthInit() { }
public HealthInit(float init) { value = init; } public HealthInit(float init) { value = init; }
public float Value(World world) { return value; } public float Value(World world) { return value; }

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Traits
public class DeveloperMode : IResolveOrder, ISync public class DeveloperMode : IResolveOrder, ISync
{ {
DeveloperModeInfo Info; DeveloperModeInfo info;
[Sync] public bool FastCharge; [Sync] public bool FastCharge;
[Sync] public bool AllTech; [Sync] public bool AllTech;
[Sync] public bool FastBuild; [Sync] public bool FastBuild;
@@ -46,7 +46,7 @@ namespace OpenRA.Traits
public DeveloperMode(DeveloperModeInfo info) public DeveloperMode(DeveloperModeInfo info)
{ {
Info = info; this.info = info;
FastBuild = info.FastBuild; FastBuild = info.FastBuild;
FastCharge = info.FastCharge; FastCharge = info.FastCharge;
DisableShroud = info.DisableShroud; DisableShroud = info.DisableShroud;
@@ -85,7 +85,7 @@ namespace OpenRA.Traits
case "DevGiveCash": case "DevGiveCash":
{ {
var amount = order.ExtraData != 0 ? (int)order.ExtraData : Info.Cash; var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash;
self.Trait<PlayerResources>().GiveCash(amount); self.Trait<PlayerResources>().GiveCash(amount);
break; break;
} }
@@ -94,7 +94,7 @@ namespace OpenRA.Traits
{ {
foreach (var a in self.World.ActorsWithTrait<ISeedableResource>()) foreach (var a in self.World.ActorsWithTrait<ISeedableResource>())
{ {
for (var i = 0; i < Info.ResourceGrowth; i++) for (var i = 0; i < info.ResourceGrowth; i++)
a.Trait.Seed(a.Actor); a.Trait.Seed(a.Actor);
} }

0
OpenRA.Game/Traits/Player/FrozenActorLayer.cs Executable file → Normal file
View File

View File

@@ -19,21 +19,21 @@ namespace OpenRA.Traits
{ {
[Desc("The prefix for the resulting player palettes")] [Desc("The prefix for the resulting player palettes")]
public readonly string BaseName = "highlight"; public readonly string BaseName = "highlight";
public object Create(ActorInitializer init) { return new PlayerHighlightPalette(init.self.Owner, this); } public object Create(ActorInitializer init) { return new PlayerHighlightPalette(init.self.Owner, this); }
} }
public class PlayerHighlightPalette : ILoadsPalettes public class PlayerHighlightPalette : ILoadsPalettes
{ {
readonly Player owner; readonly Player owner;
readonly PlayerHighlightPaletteInfo info; readonly PlayerHighlightPaletteInfo info;
public PlayerHighlightPalette(Player owner, PlayerHighlightPaletteInfo info) public PlayerHighlightPalette(Player owner, PlayerHighlightPaletteInfo info)
{ {
this.owner = owner; this.owner = owner;
this.info = info; this.info = info;
} }
public void LoadPalettes(WorldRenderer wr) public void LoadPalettes(WorldRenderer wr)
{ {
var argb = (uint)Color.FromArgb(128, owner.Color.RGB).ToArgb(); var argb = (uint)Color.FromArgb(128, owner.Color.RGB).ToArgb();

View File

@@ -24,17 +24,17 @@ namespace OpenRA.Traits
public class PlayerResources : ITick, ISync public class PlayerResources : ITick, ISync
{ {
const float displayCashFracPerFrame = .07f; const float DisplayCashFracPerFrame = .07f;
const int displayCashDeltaPerFrame = 37; const int DisplayCashDeltaPerFrame = 37;
readonly Player Owner; readonly Player owner;
int AdviceInterval; int adviceInterval;
public PlayerResources(Actor self, PlayerResourcesInfo info) public PlayerResources(Actor self, PlayerResourcesInfo info)
{ {
Owner = self.Owner; owner = self.Owner;
Cash = self.World.LobbyInfo.GlobalSettings.StartingCash; Cash = self.World.LobbyInfo.GlobalSettings.StartingCash;
AdviceInterval = info.AdviceInterval; adviceInterval = info.AdviceInterval;
} }
[Sync] public int Cash; [Sync] public int Cash;
@@ -108,7 +108,7 @@ namespace OpenRA.Traits
nextCashTickTime--; nextCashTickTime--;
ResourceCapacity = self.World.ActorsWithTrait<IStoreResources>() ResourceCapacity = self.World.ActorsWithTrait<IStoreResources>()
.Where(a => a.Actor.Owner == Owner) .Where(a => a.Actor.Owner == owner)
.Sum(a => a.Trait.Capacity); .Sum(a => a.Trait.Capacity);
if (Resources > ResourceCapacity) if (Resources > ResourceCapacity)
@@ -118,53 +118,52 @@ namespace OpenRA.Traits
{ {
if (Resources > 0.8 * ResourceCapacity) if (Resources > 0.8 * ResourceCapacity)
{ {
Sound.PlayNotification(self.World.Map.Rules, Owner, "Speech", "SilosNeeded", Owner.Country.Race); Sound.PlayNotification(self.World.Map.Rules, owner, "Speech", "SilosNeeded", owner.Country.Race);
AlertSilo = true; AlertSilo = true;
} }
else else
AlertSilo = false; AlertSilo = false;
nextSiloAdviceTime = AdviceInterval; nextSiloAdviceTime = adviceInterval;
} }
var diff = Math.Abs(Cash - DisplayCash); var diff = Math.Abs(Cash - DisplayCash);
var move = Math.Min(Math.Max((int)(diff * displayCashFracPerFrame), var move = Math.Min(Math.Max((int)(diff * DisplayCashFracPerFrame), DisplayCashDeltaPerFrame), diff);
displayCashDeltaPerFrame), diff);
if (DisplayCash < Cash) if (DisplayCash < Cash)
{ {
DisplayCash += move; DisplayCash += move;
playCashTickUp(self); PlayCashTickUp(self);
} }
else if (DisplayCash > Cash) else if (DisplayCash > Cash)
{ {
DisplayCash -= move; DisplayCash -= move;
playCashTickDown(self); PlayCashTickDown(self);
} }
diff = Math.Abs(Resources - DisplayResources); diff = Math.Abs(Resources - DisplayResources);
move = Math.Min(Math.Max((int)(diff * displayCashFracPerFrame), move = Math.Min(Math.Max((int)(diff * DisplayCashFracPerFrame),
displayCashDeltaPerFrame), diff); DisplayCashDeltaPerFrame), diff);
if (DisplayResources < Resources) if (DisplayResources < Resources)
{ {
DisplayResources += move; DisplayResources += move;
playCashTickUp(self); PlayCashTickUp(self);
} }
else if (DisplayResources > Resources) else if (DisplayResources > Resources)
{ {
DisplayResources -= move; DisplayResources -= move;
playCashTickDown(self); PlayCashTickDown(self);
} }
} }
public void playCashTickUp(Actor self) public void PlayCashTickUp(Actor self)
{ {
if (Game.Settings.Sound.CashTicks) if (Game.Settings.Sound.CashTicks)
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickUp", self.Owner.Country.Race); Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickUp", self.Owner.Country.Race);
} }
public void playCashTickDown(Actor self) public void PlayCashTickDown(Actor self)
{ {
if (Game.Settings.Sound.CashTicks && nextCashTickTime == 0) if (Game.Settings.Sound.CashTicks && nextCashTickTime == 0)
{ {

View File

@@ -20,12 +20,12 @@ namespace OpenRA.Traits
public class RevealsShroud : ITick, ISync public class RevealsShroud : ITick, ISync
{ {
RevealsShroudInfo Info; RevealsShroudInfo info;
[Sync] CPos cachedLocation; [Sync] CPos cachedLocation;
public RevealsShroud(RevealsShroudInfo info) public RevealsShroud(RevealsShroudInfo info)
{ {
Info = info; this.info = info;
} }
public void Tick(Actor self) public void Tick(Actor self)
@@ -39,6 +39,6 @@ namespace OpenRA.Traits
} }
} }
public WRange Range { get { return Info.Range; } } public WRange Range { get { return info.Range; } }
} }
} }

View File

@@ -24,8 +24,8 @@ namespace OpenRA.Traits
public class SelectionDecorations : IPostRenderSelection public class SelectionDecorations : IPostRenderSelection
{ {
// depends on the order of pips in TraitsInterfaces.cs! // depends on the order of pips in TraitsInterfaces.cs!
static readonly string[] pipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray", "pip-blue", "pip-ammo", "pip-ammoempty" }; static readonly string[] PipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray", "pip-blue", "pip-ammo", "pip-ammoempty" };
static readonly string[] tagStrings = { "", "tag-fake", "tag-primary" }; static readonly string[] TagStrings = { "", "tag-fake", "tag-primary" };
public SelectionDecorationsInfo Info; public SelectionDecorationsInfo Info;
Actor self; Actor self;
@@ -79,7 +79,7 @@ namespace OpenRA.Traits
yield break; yield break;
var pipImages = new Animation(self.World, "pips"); var pipImages = new Animation(self.World, "pips");
pipImages.PlayRepeating(pipStrings[0]); pipImages.PlayRepeating(PipStrings[0]);
var pipSize = pipImages.Image.size.ToInt2(); var pipSize = pipImages.Image.size.ToInt2();
var pipxyBase = basePosition + new int2(1 - pipSize.X / 2, -(3 + pipSize.Y / 2)); var pipxyBase = basePosition + new int2(1 - pipSize.X / 2, -(3 + pipSize.Y / 2));
@@ -101,7 +101,7 @@ namespace OpenRA.Traits
pipxyOffset.Y -= pipSize.Y; pipxyOffset.Y -= pipSize.Y;
} }
pipImages.PlayRepeating(pipStrings[(int)pip]); pipImages.PlayRepeating(PipStrings[(int)pip]);
pipxyOffset += new int2(pipSize.X, 0); pipxyOffset += new int2(pipSize.X, 0);
yield return new UISpriteRenderable(pipImages.Image, pipxyBase + pipxyOffset, 0, pal, 1f); yield return new UISpriteRenderable(pipImages.Image, pipxyBase + pipxyOffset, 0, pal, 1f);
@@ -126,7 +126,7 @@ namespace OpenRA.Traits
if (tag == TagType.None) if (tag == TagType.None)
continue; continue;
tagImages.PlayRepeating(tagStrings[(int)tag]); tagImages.PlayRepeating(TagStrings[(int)tag]);
var pos = basePosition + tagxyOffset - (0.5f * tagImages.Image.size).ToInt2(); var pos = basePosition + tagxyOffset - (0.5f * tagImages.Image.size).ToInt2();
yield return new UISpriteRenderable(tagImages.Image, pos, 0, pal, 1f); yield return new UISpriteRenderable(tagImages.Image, pos, 0, pal, 1f);

View File

@@ -10,6 +10,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using OpenRA.Activities; using OpenRA.Activities;
@@ -240,7 +241,9 @@ namespace OpenRA.Traits
public class TraitInfo<T> : ITraitInfo where T : new() { public virtual object Create(ActorInitializer init) { return new T(); } } public class TraitInfo<T> : ITraitInfo where T : new() { public virtual object Create(ActorInitializer init) { return new T(); } }
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1302:InterfaceNamesMustBeginWithI", Justification = "Not a real interface, but more like a tag.")]
public interface Requires<T> where T : class, ITraitInfo { } public interface Requires<T> where T : class, ITraitInfo { }
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1302:InterfaceNamesMustBeginWithI", Justification = "Not a real interface, but more like a tag.")]
public interface UsesInit<T> where T : IActorInit { } public interface UsesInit<T> where T : IActorInit { }
public interface INotifySelected { void Selected(Actor self); } public interface INotifySelected { void Selected(Actor self); }

View File

@@ -91,7 +91,7 @@ namespace OpenRA.Traits
void Invalidate() void Invalidate()
{ {
var oldHash = Hash; var oldHash = Hash;
Hash = Sync.hash_player(self.Owner) + self.World.WorldTick * 3; Hash = Sync.HashPlayer(self.Owner) + self.World.WorldTick * 3;
// Invalidate may be called multiple times in one world tick, which is decoupled from rendering. // Invalidate may be called multiple times in one world tick, which is decoupled from rendering.
if (oldHash == Hash) if (oldHash == Hash)

View File

@@ -103,7 +103,7 @@ namespace OpenRA
public override string ToString() { return Angle.ToString(); } public override string ToString() { return Angle.ToString(); }
static int[] CosineTable = static readonly int[] CosineTable =
{ {
1024, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1022, 1022, 1022, 1021, 1024, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1022, 1022, 1022, 1021,
1021, 1020, 1020, 1019, 1019, 1018, 1017, 1017, 1016, 1015, 1014, 1013, 1021, 1020, 1020, 1019, 1019, 1018, 1017, 1017, 1016, 1015, 1014, 1013,
@@ -126,7 +126,7 @@ namespace OpenRA
56, 50, 43, 37, 31, 25, 18, 12, 6, 0 56, 50, 43, 37, 31, 25, 18, 12, 6, 0
}; };
static int[] TanTable = static readonly int[] TanTable =
{ {
0, 6, 12, 18, 25, 31, 37, 44, 50, 56, 62, 69, 75, 81, 88, 94, 100, 107, 0, 6, 12, 18, 25, 31, 37, 44, 50, 56, 62, 69, 75, 81, 88, 94, 100, 107,
113, 119, 126, 132, 139, 145, 151, 158, 164, 171, 177, 184, 190, 197, 113, 119, 126, 132, 139, 145, 151, 158, 164, 171, 177, 184, 190, 197,

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Widgets
public readonly bool UseContrast = false; public readonly bool UseContrast = false;
public string Notification = ""; public string Notification = "";
const int logLength = 9; const int LogLength = 9;
List<ChatLine> recentLines = new List<ChatLine>(); List<ChatLine> recentLines = new List<ChatLine>();
public override Rectangle EventBounds { get { return Rectangle.Empty; } } public override Rectangle EventBounds { get { return Rectangle.Empty; } }
@@ -72,7 +72,7 @@ namespace OpenRA.Widgets
if (Notification != null) if (Notification != null)
Sound.Play(Notification); Sound.Play(Notification);
while (recentLines.Count > logLength) while (recentLines.Count > LogLength)
recentLines.RemoveAt(0); recentLines.RemoveAt(0);
} }

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.DrawLine(origin + new float2(100, 0) * basis, origin + new float2(100, 100) * basis, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(origin + new float2(100, 0) * basis, origin + new float2(100, 100) * basis, Color.White, Color.White);
var k = 0; var k = 0;
foreach (var item in PerfHistory.items.Values.ToArray()) foreach (var item in PerfHistory.Items.Values.ToArray())
{ {
var n = 0; var n = 0;
item.Samples().Aggregate((a, b) => item.Samples().Aggregate((a, b) =>
@@ -34,7 +34,7 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.DrawLine( Game.Renderer.LineRenderer.DrawLine(
origin + new float2(n, (float)a) * basis, origin + new float2(n, (float)a) * basis,
origin + new float2(n + 1, (float)b) * basis, origin + new float2(n + 1, (float)b) * basis,
item.c, item.c); item.C, item.C);
++n; ++n;
return b; return b;
}); });
@@ -44,18 +44,18 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.DrawLine( Game.Renderer.LineRenderer.DrawLine(
u + new float2(10, 10 * k + 5), u + new float2(10, 10 * k + 5),
u + new float2(12, 10 * k + 5), u + new float2(12, 10 * k + 5),
item.c, item.c); item.C, item.C);
Game.Renderer.LineRenderer.DrawLine( Game.Renderer.LineRenderer.DrawLine(
u + new float2(10, 10 * k + 4), u + new float2(10, 10 * k + 4),
u + new float2(12, 10 * k + 4), u + new float2(12, 10 * k + 4),
item.c, item.c); item.C, item.C);
++k; ++k;
} }
k = 0; k = 0;
foreach (var item in PerfHistory.items.Values.ToArray()) foreach (var item in PerfHistory.Items.Values.ToArray())
{ {
Game.Renderer.Fonts["Tiny"].DrawText(item.Name, new float2(rect.Left, rect.Top) + new float2(18, 10 * k - 3), Color.White); Game.Renderer.Fonts["Tiny"].DrawText(item.Name, new float2(rect.Left, rect.Top) + new float2(18, 10 * k - 3), Color.White);
++k; ++k;

View File

@@ -43,11 +43,11 @@ namespace OpenRA.Widgets
public bool CollapseHiddenChildren; public bool CollapseHiddenChildren;
public float SmoothScrollSpeed = 0.333f; public float SmoothScrollSpeed = 0.333f;
protected bool UpPressed; protected bool upPressed;
protected bool DownPressed; protected bool downPressed;
protected bool UpDisabled; protected bool upDisabled;
protected bool DownDisabled; protected bool downDisabled;
protected bool ThumbPressed; protected bool thumbPressed;
protected Rectangle upButtonRect; protected Rectangle upButtonRect;
protected Rectangle downButtonRect; protected Rectangle downButtonRect;
protected Rectangle backgroundRect; protected Rectangle backgroundRect;
@@ -119,40 +119,40 @@ namespace OpenRA.Widgets
var rb = RenderBounds; var rb = RenderBounds;
var ScrollbarHeight = rb.Height - 2 * ScrollbarWidth; var scrollbarHeight = rb.Height - 2 * ScrollbarWidth;
var thumbHeight = ContentHeight == 0 ? 0 : Math.Max(MinimumThumbSize, (int)(ScrollbarHeight * Math.Min(rb.Height * 1f / ContentHeight, 1f))); var thumbHeight = ContentHeight == 0 ? 0 : Math.Max(MinimumThumbSize, (int)(scrollbarHeight * Math.Min(rb.Height * 1f / ContentHeight, 1f)));
var thumbOrigin = rb.Y + ScrollbarWidth + (int)((ScrollbarHeight - thumbHeight) * (-1f * currentListOffset / (ContentHeight - rb.Height))); var thumbOrigin = rb.Y + ScrollbarWidth + (int)((scrollbarHeight - thumbHeight) * (-1f * currentListOffset / (ContentHeight - rb.Height)));
if (thumbHeight == ScrollbarHeight) if (thumbHeight == scrollbarHeight)
thumbHeight = 0; thumbHeight = 0;
backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width - ScrollbarWidth + 1, rb.Height); backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width - ScrollbarWidth + 1, rb.Height);
upButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y, ScrollbarWidth, ScrollbarWidth); upButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y, ScrollbarWidth, ScrollbarWidth);
downButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth); downButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth);
scrollbarRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, ScrollbarHeight + 2); scrollbarRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, scrollbarHeight + 2);
thumbRect = new Rectangle(rb.Right - ScrollbarWidth, thumbOrigin, ScrollbarWidth, thumbHeight); thumbRect = new Rectangle(rb.Right - ScrollbarWidth, thumbOrigin, ScrollbarWidth, thumbHeight);
var upHover = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos); var upHover = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos);
UpDisabled = thumbHeight == 0 || currentListOffset >= 0; upDisabled = thumbHeight == 0 || currentListOffset >= 0;
var downHover = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos); var downHover = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos);
DownDisabled = thumbHeight == 0 || currentListOffset <= Bounds.Height - ContentHeight; downDisabled = thumbHeight == 0 || currentListOffset <= Bounds.Height - ContentHeight;
var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos); var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos);
WidgetUtils.DrawPanel(Background, backgroundRect); WidgetUtils.DrawPanel(Background, backgroundRect);
WidgetUtils.DrawPanel(Background, scrollbarRect); WidgetUtils.DrawPanel(Background, scrollbarRect);
ButtonWidget.DrawBackground(Button, upButtonRect, UpDisabled, UpPressed, upHover, false); ButtonWidget.DrawBackground(Button, upButtonRect, upDisabled, upPressed, upHover, false);
ButtonWidget.DrawBackground(Button, downButtonRect, DownDisabled, DownPressed, downHover, false); ButtonWidget.DrawBackground(Button, downButtonRect, downDisabled, downPressed, downHover, false);
if (thumbHeight > 0) if (thumbHeight > 0)
ButtonWidget.DrawBackground(Button, thumbRect, false, HasMouseFocus && thumbHover, thumbHover, false); ButtonWidget.DrawBackground(Button, thumbRect, false, HasMouseFocus && thumbHover, thumbHover, false);
var upOffset = !UpPressed || UpDisabled ? 4 : 4 + ButtonDepth; var upOffset = !upPressed || upDisabled ? 4 : 4 + ButtonDepth;
var downOffset = !DownPressed || DownDisabled ? 4 : 4 + ButtonDepth; var downOffset = !downPressed || downDisabled ? 4 : 4 + ButtonDepth;
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", UpPressed || UpDisabled ? "up_pressed" : "up_arrow"), WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", upPressed || upDisabled ? "up_pressed" : "up_arrow"),
new float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset)); new float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", DownPressed || DownDisabled ? "down_pressed" : "down_arrow"), WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", downPressed || downDisabled ? "down_pressed" : "down_arrow"),
new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset)); new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));
Game.Renderer.EnableScissor(backgroundRect.InflateBy(-1, -1, -1, -1)); Game.Renderer.EnableScissor(backgroundRect.InflateBy(-1, -1, -1, -1));
@@ -225,10 +225,10 @@ namespace OpenRA.Widgets
public override void Tick() public override void Tick()
{ {
if (UpPressed) if (upPressed)
Scroll(1); Scroll(1);
if (DownPressed) if (downPressed)
Scroll(-1); Scroll(-1);
var offsetDiff = targetListOffset - currentListOffset; var offsetDiff = targetListOffset - currentListOffset;
@@ -241,7 +241,7 @@ namespace OpenRA.Widgets
public override bool YieldMouseFocus(MouseInput mi) public override bool YieldMouseFocus(MouseInput mi)
{ {
UpPressed = DownPressed = ThumbPressed = false; upPressed = downPressed = thumbPressed = false;
return base.YieldMouseFocus(mi); return base.YieldMouseFocus(mi);
} }
@@ -267,14 +267,14 @@ namespace OpenRA.Widgets
if (HasMouseFocus && mi.Event == MouseInputEvent.Up) if (HasMouseFocus && mi.Event == MouseInputEvent.Up)
return YieldMouseFocus(mi); return YieldMouseFocus(mi);
if (ThumbPressed && mi.Event == MouseInputEvent.Move) if (thumbPressed && mi.Event == MouseInputEvent.Move)
{ {
var rb = RenderBounds; var rb = RenderBounds;
var ScrollbarHeight = rb.Height - 2 * ScrollbarWidth; var scrollbarHeight = rb.Height - 2 * ScrollbarWidth;
var thumbHeight = ContentHeight == 0 ? 0 : Math.Max(MinimumThumbSize, (int)(ScrollbarHeight * Math.Min(rb.Height * 1f / ContentHeight, 1f))); var thumbHeight = ContentHeight == 0 ? 0 : Math.Max(MinimumThumbSize, (int)(scrollbarHeight * Math.Min(rb.Height * 1f / ContentHeight, 1f)));
var oldOffset = currentListOffset; var oldOffset = currentListOffset;
var newOffset = currentListOffset + ((int)((lastMouseLocation.Y - mi.Location.Y) * (ContentHeight - rb.Height) * 1f / (ScrollbarHeight - thumbHeight))); var newOffset = currentListOffset + ((int)((lastMouseLocation.Y - mi.Location.Y) * (ContentHeight - rb.Height) * 1f / (scrollbarHeight - thumbHeight)));
newOffset = Math.Min(0, Math.Max(rb.Height - ContentHeight, newOffset)); newOffset = Math.Min(0, Math.Max(rb.Height - ContentHeight, newOffset));
SetListOffset(newOffset, false); SetListOffset(newOffset, false);
@@ -283,17 +283,17 @@ namespace OpenRA.Widgets
} }
else else
{ {
UpPressed = upButtonRect.Contains(mi.Location); upPressed = upButtonRect.Contains(mi.Location);
DownPressed = downButtonRect.Contains(mi.Location); downPressed = downButtonRect.Contains(mi.Location);
ThumbPressed = thumbRect.Contains(mi.Location); thumbPressed = thumbRect.Contains(mi.Location);
if (ThumbPressed) if (thumbPressed)
lastMouseLocation = mi.Location; lastMouseLocation = mi.Location;
if (mi.Event == MouseInputEvent.Down && ((UpPressed && !UpDisabled) || (DownPressed && !DownDisabled) || ThumbPressed)) if (mi.Event == MouseInputEvent.Down && ((upPressed && !upDisabled) || (downPressed && !downDisabled) || thumbPressed))
Sound.PlayNotification(modRules, null, "Sounds", "ClickSound", null); Sound.PlayNotification(modRules, null, "Sounds", "ClickSound", null);
} }
return UpPressed || DownPressed || ThumbPressed; return upPressed || downPressed || thumbPressed;
} }
IObservableCollection collection; IObservableCollection collection;

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Widgets
if (Unit != null && Sequence != null) if (Unit != null && Sequence != null)
{ {
var anim = new Animation(worldRenderer.world, Unit, () => Facing); var anim = new Animation(WorldRenderer.world, Unit, () => Facing);
anim.PlayFetchIndex(Sequence, () => Frame); anim.PlayFetchIndex(Sequence, () => Frame);
GetAnimation = () => anim; GetAnimation = () => anim;
} }

View File

@@ -19,14 +19,14 @@ namespace OpenRA.Widgets
public Func<string> GetPalette; public Func<string> GetPalette;
public Func<Sprite> GetSprite; public Func<Sprite> GetSprite;
protected readonly WorldRenderer worldRenderer; protected readonly WorldRenderer WorldRenderer;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public SpriteWidget(WorldRenderer worldRenderer) public SpriteWidget(WorldRenderer worldRenderer)
{ {
GetPalette = () => Palette; GetPalette = () => Palette;
this.worldRenderer = worldRenderer; this.WorldRenderer = worldRenderer;
} }
protected SpriteWidget(SpriteWidget other) protected SpriteWidget(SpriteWidget other)
@@ -36,7 +36,7 @@ namespace OpenRA.Widgets
GetPalette = other.GetPalette; GetPalette = other.GetPalette;
GetSprite = other.GetSprite; GetSprite = other.GetSprite;
worldRenderer = other.worldRenderer; WorldRenderer = other.WorldRenderer;
} }
public override Widget Clone() { return new SpriteWidget(this); } public override Widget Clone() { return new SpriteWidget(this); }
@@ -62,7 +62,7 @@ namespace OpenRA.Widgets
if (palette != cachedPalette) if (palette != cachedPalette)
{ {
pr = worldRenderer.Palette(palette); pr = WorldRenderer.Palette(palette);
cachedPalette = palette; cachedPalette = palette;
} }

View File

@@ -23,7 +23,7 @@ namespace OpenRA.Widgets
public static int LastTickTime = Game.RunTime; public static int LastTickTime = Game.RunTime;
static Stack<Widget> WindowList = new Stack<Widget>(); static readonly Stack<Widget> WindowList = new Stack<Widget>();
public static Widget MouseFocusWidget; public static Widget MouseFocusWidget;
public static Widget KeyboardFocusWidget; public static Widget KeyboardFocusWidget;

View File

@@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Server
client.State = state; client.State = state;
Log.Write("server", "Player @{0} is {1}", Log.Write("server", "Player @{0} is {1}",
conn.socket.RemoteEndPoint, client.State); conn.Socket.RemoteEndPoint, client.State);
server.SyncLobbyClients(); server.SyncLobbyClients();
@@ -714,7 +714,7 @@ namespace OpenRA.Mods.Common.Server
{ "name", { "name",
s => s =>
{ {
Log.Write("server", "Player@{0} is now known as {1}.", conn.socket.RemoteEndPoint, s); Log.Write("server", "Player@{0} is now known as {1}.", conn.Socket.RemoteEndPoint, s);
server.SendMessage("{0} is now known as {1}.".F(client.Name, s)); server.SendMessage("{0} is now known as {1}.".F(client.Name, s));
client.Name = s; client.Name = s;
server.SyncLobbyClients(); server.SyncLobbyClients();

View File

@@ -43,18 +43,17 @@ namespace OpenRA.Mods.Common.Server
{ {
foreach (var c in server.Conns.ToList()) foreach (var c in server.Conns.ToList())
{ {
if (c == null || c.socket == null) if (c == null || c.Socket == null)
continue; continue;
var client = server.GetClient(c); var client = server.GetClient(c);
if (client == null) if (client == null)
{ {
server.DropClient(c, -1); server.DropClient(c, -1);
server.SendMessage("A player has been dropped after timing out."); server.SendMessage("A player has been dropped after timing out.");
continue; continue;
} }
if (c.TimeSinceLastResponse < ConnTimeout) if (c.TimeSinceLastResponse < ConnTimeout)
{ {
server.SendOrderTo(c, "Ping", Game.RunTime.ToString()); server.SendOrderTo(c, "Ping", Game.RunTime.ToString());
@@ -81,11 +80,10 @@ namespace OpenRA.Mods.Common.Server
foreach (var c in timeouts) foreach (var c in timeouts)
{ {
if (c == null || c.socket == null) if (c == null || c.Socket == null)
continue; continue;
var client = server.GetClient(c); var client = server.GetClient(c);
if (client != null) if (client != null)
server.SendMessage("{0} will be dropped in {1} seconds.".F(client.Name, (ConnTimeout - c.TimeSinceLastResponse) / 1000)); server.SendMessage("{0} will be dropped in {1} seconds.".F(client.Name, (ConnTimeout - c.TimeSinceLastResponse) / 1000));
} }

View File

@@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Traits
public ReadOnlyList<MissionObjective> Objectives; public ReadOnlyList<MissionObjective> Objectives;
[Sync] [Sync]
public int ObjectivesHash { get { return Objectives.Aggregate(0, (code, objective) => code ^ Sync.hash(objective.State)); } } public int ObjectivesHash { get { return Objectives.Aggregate(0, (code, objective) => code ^ Sync.Hash(objective.State)); } }
// This property is used as a flag in 'Cooperative' games to mark that the player has completed all his objectives. // This property is used as a flag in 'Cooperative' games to mark that the player has completed all his objectives.
// The player's WinState is only updated when his allies have all completed their objective as well. // The player's WinState is only updated when his allies have all completed their objective as well.

View File

@@ -65,7 +65,7 @@ namespace OpenRA.Mods.RA.Traits
return; return;
// Update connection to neighbours // Update connection to neighbours
var adjacentActors = CVec.directions.SelectMany(dir => var adjacentActors = CVec.Directions.SelectMany(dir =>
self.World.ActorMap.GetUnitsAt(self.Location + dir)); self.World.ActorMap.GetUnitsAt(self.Location + dir));
adjacent = 0; adjacent = 0;
@@ -93,7 +93,7 @@ namespace OpenRA.Mods.RA.Traits
static void UpdateNeighbours(Actor self) static void UpdateNeighbours(Actor self)
{ {
var adjacentActors = CVec.directions.SelectMany(dir => var adjacentActors = CVec.Directions.SelectMany(dir =>
self.World.ActorMap.GetUnitsAt(self.Location + dir)) self.World.ActorMap.GetUnitsAt(self.Location + dir))
.Select(a => a.TraitOrDefault<RenderBuildingWall>()) .Select(a => a.TraitOrDefault<RenderBuildingWall>())
.Where(a => a != null); .Where(a => a != null);

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Traits
public class RepairableBuilding : UpgradableTrait<RepairableBuildingInfo>, ITick public class RepairableBuilding : UpgradableTrait<RepairableBuildingInfo>, ITick
{ {
[Sync] [Sync]
public int RepairersHash { get { return Repairers.Aggregate(0, (code, player) => code ^ Sync.hash_player(player)); } } public int RepairersHash { get { return Repairers.Aggregate(0, (code, player) => code ^ Sync.HashPlayer(player)); } }
public List<Player> Repairers = new List<Player>(); public List<Player> Repairers = new List<Player>();
Health Health; Health Health;

View File

@@ -91,7 +91,7 @@ namespace OpenRA.Mods.RA.Traits
{ {
// Select all neighbors inside the map boundries // Select all neighbors inside the map boundries
var thisCell = cell; // benign closure hazard var thisCell = cell; // benign closure hazard
var neighbors = CVec.directions.Select(d => d + thisCell) var neighbors = CVec.Directions.Select(d => d + thisCell)
.Where(c => map.Contains(c)); .Where(c => map.Contains(c));
var found = false; var found = false;
@@ -208,7 +208,7 @@ namespace OpenRA.Mods.RA.Traits
domains[n] = domain; domains[n] = domain;
// Don't crawl off the map, or add already-visited cells // Don't crawl off the map, or add already-visited cells
var neighbors = CVec.directions.Select(d => n + d) var neighbors = CVec.Directions.Select(d => n + d)
.Where(p => map.Contains(p) && !visited[p]); .Where(p => map.Contains(p) && !visited[p]);
foreach (var neighbor in neighbors) foreach (var neighbor in neighbors)

View File

@@ -148,7 +148,7 @@ namespace OpenRA.Mods.RA.Traits
new CVec[] { new CVec(-1, -1), new CVec(0, -1), new CVec(1, -1) }, new CVec[] { new CVec(-1, -1), new CVec(0, -1), new CVec(1, -1) },
new CVec[] { new CVec(-1, -1), new CVec(0, -1), new CVec(1, -1), new CVec(1, 0), new CVec(1, 1) }, new CVec[] { new CVec(-1, -1), new CVec(0, -1), new CVec(1, -1), new CVec(1, 0), new CVec(1, 1) },
new CVec[] { new CVec(-1, -1), new CVec(-1, 0), new CVec(-1, 1) }, new CVec[] { new CVec(-1, -1), new CVec(-1, 0), new CVec(-1, 1) },
CVec.directions, CVec.Directions,
new CVec[] { new CVec(1, -1), new CVec(1, 0), new CVec(1, 1) }, new CVec[] { new CVec(1, -1), new CVec(1, 0), new CVec(1, 1) },
new CVec[] { new CVec(-1, -1), new CVec(-1, 0), new CVec(-1, 1), new CVec(0, 1), new CVec(1, 1) }, new CVec[] { new CVec(-1, -1), new CVec(-1, 0), new CVec(-1, 1), new CVec(0, 1), new CVec(1, 1) },
new CVec[] { new CVec(-1, 1), new CVec(0, 1), new CVec(1, 1) }, new CVec[] { new CVec(-1, 1), new CVec(0, 1), new CVec(1, 1) },

View File

@@ -25,9 +25,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic
perfText.IsVisible = () => Game.Settings.Debug.PerfText; perfText.IsVisible = () => Game.Settings.Debug.PerfText;
perfText.GetText = () => perfText.GetText = () =>
"Tick {0} @ {1:F1} ms\nRender {2} @ {3:F1} ms\nBatches: {4}".F( "Tick {0} @ {1:F1} ms\nRender {2} @ {3:F1} ms\nBatches: {4}".F(
Game.LocalTick, PerfHistory.items["tick_time"].Average(Game.Settings.Debug.Samples), Game.LocalTick, PerfHistory.Items["tick_time"].Average(Game.Settings.Debug.Samples),
Game.RenderFrame, PerfHistory.items["render"].Average(Game.Settings.Debug.Samples), Game.RenderFrame, PerfHistory.Items["render"].Average(Game.Settings.Debug.Samples),
PerfHistory.items["batches"].LastValue); PerfHistory.Items["batches"].LastValue);
} }
} }
} }