Exemplo n.º 1
0
        public DamageInfo Create(DotItem dot, bool enabling)
        {
            DamageInfo info = Create();

            info.DamageType            = dot.DamageType;
            info.Tags                  = WeaponTag.None;
            info.Character             = Character.All;
            info.ExplosionSphereRadius = 0.0f;
            info.TargetPosition        = Vector3.zero;
            info.HitFX                 = ZombieFX.Unknown;
            info.DieFX                 = ZombieFX.Unknown;
            info.Modifier              = DamageModifier.None;

            if (enabling)
            {
                info.Damage = InfInt.Zero;
                info.Dot    = dot;
            }
            else
            {
                info.Damage = dot.DPS;
                info.Dot    = null;
            }

            return(info);
        }
        private StringBuilder DescribeItem(DotItem item, StringBuilder output, bool showLookaheads = true)
        {
            int start = output.Length;

            output.Append(grammar.SymbolName(item.Outcome)).Append(" ->");
            for (int i = 0; i != item.Size; ++i)
            {
                if (item.Position == i)
                {
                    output.Append(" •");
                }

                output.Append(" ").Append(grammar.SymbolName(item[i]));
            }

            if (item.IsReduce)
            {
                output.Append(" •");
            }

            int       lineLength = output.Length - start;
            const int AlignTo    = 20;

            if (lineLength < AlignTo)
            {
                output.Append(new string(' ', AlignTo - lineLength));
            }

            if (showLookaheads)
            {
                output.Append("  |LA = {").Append(string.Join(", ", item.LA.Select(grammar.SymbolName))).Append("}");
            }

            return(output);
        }
Exemplo n.º 3
0
        // TODO: Separate Closure from the lookahead closuring to get cached closure item sets
        private MutableDotItemSet ClosureLr0(MutableDotItemSet itemSet)
        {
            var result = new MutableDotItemSet();

            result.AddRange(itemSet);

            bool modified;

            do
            {
                modified = false;

                // result may grow during iterations
                for (int i = 0; i != result.Count; ++i)
                {
                    var item = result[i];

                    if (!item.IsReduce && !grammar.IsTerminal(item.NextToken))
                    {
                        int X = item.NextToken;

                        foreach (var childProd in grammar.GetProductions(X))
                        {
                            var newItem = new DotItem(childProd, 0)
                            {
                                LA = TokenSet.Mutable()
                            };

                            var index = result.IndexOf(newItem);
                            if (index < 0)
                            {
                                result.Add(newItem);
                                modified = true;
                            }
                            else
                            {
                                var existing = result[index];
                                existing.LA.AddAll(newItem.LA);
                            }
                        }
                    }
                }
            }while (modified);

            return(result);
        }
Exemplo n.º 4
0
        private bool IsValueOnlyEpsilonReduceItem(DotItem item, DotState state, int lookahead)
        {
            if (item.Position != 0 ||
                grammar.IsStartProduction(item.ProductionId) ||
                !grammar.IsTailNullable(item) ||
                !item.LA.Contains(lookahead))
            {
                return(false);
            }

            int epsilonToken = item.Outcome;

            foreach (var parentItem in state.Items)
            {
                if (parentItem == item)
                {
                    continue;
                }

                if (parentItem.NextToken == epsilonToken)
                {
                    if (!grammar.IsTailNullable(parentItem))
                    {
                        // there is at least one rule which needs shift on epsilonToken
                        return(false);
                    }

                    if (grammar.HasFirst(parentItem.CreateNextItem(), lookahead))
                    {
                        // One of the subseqent non-terms in parentItem can start parsing with current lookahead.
                        // It means that we need tested epsilonToken production for continue parsing on parentItem.
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemplo n.º 5
0
        public DamageInfo Create(Character character, int weaponIndex, Vector3 charPosition, InfInt damage, DamageType damageType, Vector3 targetPos, WeaponTag weaponTag, PhysicsType physics = PhysicsType.None, DotItem dot = null, DamageModifier modifier = DamageModifier.None, ZombieFX hitFx = ZombieFX.Unknown, ZombieFX dieFx = ZombieFX.Unknown)
        {
            DamageInfo info = Create();

            info.Character             = character;
            info.WeaponIndex           = weaponIndex;
            info.CharPosition          = charPosition;
            info.Damage                = new InfInt(damage);
            info.DamageType            = damageType;
            info.TargetPosition        = targetPos;
            info.ExplosionSphereRadius = 0.0f;
            info.Dot      = dot;
            info.Physics  = physics;
            info.Tags     = weaponTag;
            info.Modifier = modifier;
            info.HitFX    = hitFx;
            info.DieFX    = dieFx;
            return(info);
        }
Exemplo n.º 6
0
 public int IndexOf(DotItem item)
 {
     return(items.IndexOf(item));
 }
Exemplo n.º 7
0
 public void Add(DotItem item)
 {
     items.Add(item);
 }
Exemplo n.º 8
0
 public void DisableDot(DotItem dot)
 {
     _model.DisableDot(dot);
 }
Exemplo n.º 9
0
    public void EnableDot(DotItem dot)
    {
        DamageInfo info = _damageFactory.Create(dot, true);

        TakeDamage(info);
    }