Esempio n. 1
0
        public void DivideMetresMetres()
        {
            var up1  = new UnitParts(_settings.Metres, new UnitAndPower(_settings.Metres, 1));
            var up2  = new UnitParts(_settings.Metres, new UnitAndPower(_settings.Metres, 1));
            var prod = up1 / up2;

            Assert.AreEqual(0, prod.Count);
        }
Esempio n. 2
0
        public void DivideMetresMetres()
        {
            var up1  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) });
            var up2  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) });
            var prod = up1 / up2;

            Assert.AreEqual(0, prod.Count);
        }
Esempio n. 3
0
        public void MultiplyMetresMetres()
        {
            var up1  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) });
            var up2  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) });
            var prod = up1 * up2;

            Assert.AreEqual(1, prod.Count);
            Assert.AreEqual(2, prod.Single(x => x.Unit == this.settings.Metres).Power);
        }
Esempio n. 4
0
        public void MultiplyMetresMetres()
        {
            var up1  = new UnitParts(_settings.Metres, new UnitAndPower(_settings.Metres, 1));
            var up2  = new UnitParts(_settings.Metres, new UnitAndPower(_settings.Metres, 1));
            var prod = up1 * up2;

            Assert.AreEqual(1, prod.Count);
            Assert.AreEqual(2, prod.Single(x => x.Unit == _settings.Metres).Power);
        }
Esempio n. 5
0
        public void DivideMetresSeconds()
        {
            var up1  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) });
            var up2  = new UnitParts(new[] { UnitAndPower.Create(this.settings.Seconds, 1) });
            var prod = up1 / up2;

            Assert.AreEqual(2, prod.Count);
            Assert.AreEqual(1, prod.Single(x => x.Unit == this.settings.Metres).Power);
            Assert.AreEqual(-1, prod.Single(x => x.Unit == this.settings.Seconds).Power);
        }
Esempio n. 6
0
        public void DivideMetresSeconds()
        {
            var up1  = new UnitParts(_settings.Metres, new UnitAndPower(_settings.Metres, 1));
            var up2  = new UnitParts(_settings.Seconds, new UnitAndPower(_settings.Seconds, 1));
            var prod = up1 / up2;

            Assert.AreEqual(2, prod.Count);
            Assert.AreEqual(1, prod.Single(x => x.Unit == _settings.Metres).Power);
            Assert.AreEqual(-1, prod.Single(x => x.Unit == _settings.Seconds).Power);
        }
Esempio n. 7
0
        public void FlattenFarads()
        {
            var farads = new UnitParts(new[] { UnitAndPower.Create(this.settings.Coulombs, 1), UnitAndPower.Create(this.settings.Volts, -1) });
            var ups    = farads.BaseParts.ToArray();

            Assert.AreEqual(4, ups.Length);
            Assert.AreEqual(-1, ups.Single(x => x.Unit == this.settings.Kilograms).Power);
            Assert.AreEqual(-2, ups.Single(x => x.Unit == this.settings.Metres).Power);
            Assert.AreEqual(4, ups.Single(x => x.Unit == this.settings.Seconds).Power);
            Assert.AreEqual(2, ups.Single(x => x.Unit == this.settings.Amperes).Power);
        }
Esempio n. 8
0
        public void FlattenFarads()
        {
            var farads = new UnitParts(null, new UnitAndPower(_settings.Coloumbs, 1), new UnitAndPower(_settings.Volts, -1));
            var ups    = farads.Flattened.ToArray();

            Assert.AreEqual(4, ups.Length);
            Assert.AreEqual(-1, ups.Single(x => x.Unit == _settings.Kilograms).Power);
            Assert.AreEqual(-2, ups.Single(x => x.Unit == _settings.Metres).Power);
            Assert.AreEqual(4, ups.Single(x => x.Unit == _settings.Seconds).Power);
            Assert.AreEqual(2, ups.Single(x => x.Unit == _settings.Amperes).Power);
        }
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value == null)
            {
                return(null);
            }
            var s = (string)value;

            if (string.IsNullOrWhiteSpace(s))
            {
                return(null);
            }
            var  matches       = Parse(s);
            var  parts         = new UnitParts(null);
            int  sign          = 1;
            bool expectsSymbol = true;

            foreach (Match match in matches)
            {
                if (expectsSymbol)
                {
                    var symbol = match.Groups["Symbol"].Value;
                    if (symbol == "1")
                    {
                        expectsSymbol = false;
                        continue;
                    }
                    var unit = Settings.Instance.AllUnits.Single(x => x.Symbol == symbol);
                    int p    = ParsePower(match.Groups["Power"].Value);
                    parts.Add(new UnitAndPower(unit, sign * p));
                    expectsSymbol = false;
                }
                else
                {
                    var op = match.Groups["Op"].Value;
                    if (op == "/")
                    {
                        if (sign < 0)
                        {
                            throw new FormatException("/ can't appear twice found at position:" + match.Index);
                        }
                        else
                        {
                            sign = -1;
                        }
                    }
                    expectsSymbol = true;
                }
            }
            return(parts);
        }
Esempio n. 10
0
    private void OnTriggerEnter(Collider other)
    {
        UnitParts hitParts = other.GetComponent <UnitParts>();

        if (hitParts != null)
        {
            if (hitParts.Owner != owner)
            {
                int      power    = Power + Random.Range(-PowerRange, PowerRange + 1);
                PartsLeg partsLeg = other.GetComponent <PartsLeg>();
                if (partsLeg)
                {
                    GameObject hit        = Instantiate(damage);
                    DamageText damageText = hit.GetComponent <DamageText>();
                    damageText.ViewDamege(power / 3, transform.position);
                    EffectManager.PlayEffect(EffectID.Hit, blade.transform.position);
                    hitParts.Damage(power / 3);
                }
                else
                {
                    GameObject hit        = Instantiate(damage);
                    DamageText damageText = hit.GetComponent <DamageText>();
                    damageText.ViewDamege(power, transform.position);
                    EffectManager.PlayEffect(EffectID.Hit, blade.transform.position);
                    hitParts.Damage(power);
                }
                SoundManager.Instance.PlaySE(SEType.Hit);
            }
        }
        else
        {
            Armor armor = other.GetComponent <Armor>();
            if (armor)
            {
                EffectManager.PlayEffect(EffectID.Hit, blade.transform.position);
                armor.ArmorDamage();
                GameObject hit        = Instantiate(damage);
                DamageText damageText = hit.GetComponent <DamageText>();
                damageText.ViewDamege(1, transform.position);
            }
            else
            {
                Obstacle obstacle = other.GetComponent <Obstacle>();
                if (obstacle)
                {
                    EffectManager.PlayEffect(EffectID.Hit, blade.transform.position);
                    obstacle.ObstacleHit(Power);
                }
            }
        }
    }
Esempio n. 11
0
    protected void OnTriggerEnter(Collider other)
    {
        UnitParts hitParts = other.GetComponent <UnitParts>();

        if (hitParts != null)
        {
            if (Power > 0)
            {
                GameObject hit        = Instantiate(damage);
                DamageText damageText = hit.GetComponent <DamageText>();
                damageText.ViewDamege(Power, transform.position);
                EffectManager.PlayEffect(EffectID.Hit, transform.position);
                hitParts.Damage(Power);
                Power -= hitParts.Defense;
            }
        }
    }
Esempio n. 12
0
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            var text = value as string;

            if (string.IsNullOrWhiteSpace(text))
            {
                return(null);
            }

            var settings = Settings.Instance;
            var pos      = 0;

            _ = WhiteSpaceReader.TryRead(text, ref pos);
            var indexOf = text.IndexOf("1/", pos, StringComparison.Ordinal);

            if (indexOf >= 0)
            {
                pos = indexOf + 2;
            }

            if (SymbolAndPowerReader.TryRead(text, ref pos, out IReadOnlyList <SymbolAndPower> result))
            {
                if (WhiteSpaceReader.IsRestWhiteSpace(text, pos))
                {
                    var unitAndPowers = result.Select(sap => UnitAndPower.Create(settings.AllUnits.Single(x => x.Symbol == sap.Symbol), sap.Power))
                                        .ToList();
                    var unitParts = new UnitParts(unitAndPowers);
                    if (indexOf < 0)
                    {
                        return(unitParts);
                    }

                    return(unitParts.Inverse());
                }
            }

            return(text);
        }