Ejemplo n.º 1
0
        public void DeclareFieldsAndConstructor(BooClassBuilder builder)
        {
            var keys = _referencedEntities.Keys.Cast <ITypedEntity>().ToArray();

            foreach (var entity in keys)
            {
                _collector.Visit(entity.Type);
            }
            if (_collector.Matches.Any())
            {
                BuildTypeMap(builder.ClassDefinition);
            }

            // referenced entities turn into fields
            foreach (var entity in keys)
            {
                Field field = builder.AddInternalField(GetUniqueName(entity.Name), _mapper.MapType(entity.Type));
                _referencedEntities[entity] = (InternalField)field.Entity;
            }

            // single constructor taking all referenced entities
            BooMethodBuilder constructor = builder.AddConstructor();

            constructor.Modifiers = TypeMemberModifiers.Public;
            constructor.Body.Add(CodeBuilder.CreateSuperConstructorInvocation(builder.Entity.BaseType));
            foreach (var entity in _referencedEntities.Keys)
            {
                InternalField        field     = _referencedEntities[entity];
                ParameterDeclaration parameter = constructor.AddParameter(field.Name, ((ITypedEntity)entity).Type);
                constructor.Body.Add(
                    CodeBuilder.CreateAssignment(CodeBuilder.CreateReference(field),
                                                 CodeBuilder.CreateReference(parameter)));
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// The deep copy constructor.
 /// </summary>
 /// <param name="source">Source instance</param>
 public InternalField(InternalField source)
     : base(source)
 {
     if (source.GeneratorSettings.GetType() == typeof(PulseGeneratorSettings))
     {
         GeneratorSettings = ((PulseGeneratorSettings)source.GeneratorSettings).DeepClone();
     }
     else if (source.GeneratorSettings.GetType() == typeof(RandomValueSettings))
     {
         GeneratorSettings = ((RandomValueSettings)source.GeneratorSettings).DeepClone();
     }
     else if (source.GeneratorSettings.GetType() == typeof(SinusoidalGeneratorSettings))
     {
         GeneratorSettings = ((SinusoidalGeneratorSettings)source.GeneratorSettings).DeepClone();
     }
     else if (source.GeneratorSettings.GetType() == typeof(MackeyGlassGeneratorSettings))
     {
         GeneratorSettings = ((MackeyGlassGeneratorSettings)source.GeneratorSettings).DeepClone();
     }
     else
     {
         throw new Exception($"Unknown generator settings {source.GeneratorSettings.ToString()}");
     }
     return;
 }
Ejemplo n.º 3
0
 public void AdjustReferences()
 {
     foreach (Expression reference in _references)
     {
         InternalField entity = (InternalField)_referencedEntities[reference.Entity];
         if (null != entity)
         {
             reference.ParentNode.Replace(reference,
                                          CodeBuilder.CreateReference(entity));
         }
     }
 }
Ejemplo n.º 4
0
        override public void OnReferenceExpression(ReferenceExpression node)
        {
            InternalField mapped = (InternalField)_mapping[node.Entity];

            if (null != mapped)
            {
                ReplaceCurrentNode(
                    CodeBuilder.CreateMemberReference(
                        CodeBuilder.CreateSelfReference(_enumerator.Entity),
                        mapped));
            }
        }
        public override void OnReferenceExpression(ReferenceExpression node)
        {
            IInternalEntity entity = node.Entity as IInternalEntity;

            if (entity != null)
            {
                InternalField evaluationContextField = this.GetEvaluationContextField(entity.Node);
                if (evaluationContextField != null)
                {
                    node.ParentNode.Replace(node, this.CreateEvaluationContextFieldReference(evaluationContextField));
                }
            }
        }
Ejemplo n.º 6
0
        static bool IsConstantInternalField(IField f, Expression e)
        {
            if (null == f)
            {
                return(false);
            }

            InternalField field = e.Entity as InternalField;

            if (field != null && field.Field.IsStatic && field.IsLiteral)
            {
                return(true);                //static 'literal' final
            }
            return(false);
        }
Ejemplo n.º 7
0
                /// <summary>
                /// See the base.
                /// </summary>
                public override bool Equals(object obj)
                {
                    if (obj == null)
                    {
                        return(false);
                    }
                    InternalField cmpSettings = obj as InternalField;

                    if (!base.Equals(obj) ||
                        !Equals(GeneratorSettings, cmpSettings.GeneratorSettings)
                        )
                    {
                        return(false);
                    }
                    return(true);
                }
Ejemplo n.º 8
0
        private void FillRandomTiles(Map map, int left, int top, int width, int height)
        {
            InternalField before;
            InternalField after;

            for (int x = left; x < left + width; x++)
            {
                for (int y = top; y < top + height; y++)
                {
                    // Sicherstellen, dass auch etwas geändert wird!!!
                    before = map.GetField(x, y) as InternalField;
                    do
                    {
                        after = new InternalField((uint)random.Next(3));
                    }while (before.GetGraphicID() == after.GetGraphicID());

                    // Änderung durchführen
                    map.SetField(x, y, after);
                }
            }
        }
Ejemplo n.º 9
0
        public void DeclareFieldsAndConstructor(BooClassBuilder builder)
        {
            // referenced entities turn into fields
            foreach (ITypedEntity entity in Builtins.array(_referencedEntities.Keys))
            {
                Field field = builder.AddField("__" + entity.Name + _context.AllocIndex(), entity.Type);
                field.Modifiers             = TypeMemberModifiers.Internal;
                _referencedEntities[entity] = field.Entity;
            }

            // single constructor taking all referenced entities
            BooMethodBuilder constructor = builder.AddConstructor();

            constructor.Body.Add(CodeBuilder.CreateSuperConstructorInvocation(builder.Entity.BaseType));
            foreach (ITypedEntity entity in _referencedEntities.Keys)
            {
                InternalField        field     = (InternalField)_referencedEntities[entity];
                ParameterDeclaration parameter = constructor.AddParameter(field.Name, entity.Type);
                constructor.Body.Add(
                    CodeBuilder.CreateAssignment(CodeBuilder.CreateReference(field),
                                                 CodeBuilder.CreateReference(parameter)));
            }
        }
 public MemberReferenceExpression CreateEvaluationContextFieldReference(InternalField field) =>
 this.CodeBuilder.CreateMemberReference(this.CreateEvaluationContextReference(), field);
 public void SetEvaluationContextField(Node node, InternalField field)
 {
     node["EvaluationContextField"] = field;
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Creates a randomized map.
        /// </summary>
        /// <param name="width">The width of the map.</param>
        /// <param name="height">The height of the map.</param>
        /// <param name="objects">The number of objects to be inserted.</param>
        /// <returns></returns>
        private Map CreateRandomMap(int width, int height, int objects)
        {
            Console.WriteLine("  - Creating randomized map: " + width.ToString() + "x" + height.ToString());
            Map           map = new Map(width, height);
            InternalField fld = new InternalField();
            Collision     col = new Collision();
            Random        rnd = new Random();

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    fld = new InternalField();
                    col = new Collision((rnd.Next(2) == 1), (rnd.Next(2) == 1), (rnd.Next(2) == 1), (rnd.Next(2) == 1));
                    fld.SetCollision(col);
                    fld.SetGraphicID((uint)(rnd.Next(int.MaxValue)));
                    map.SetField(x, y, fld);
                }
            }

            int        type;
            IMapObject obj;

            Console.Write("  - Creating objects");
            for (int i = 0; i < objects; i++)
            {
                if (i % 1000 == 0)
                {
                    Console.Write(".");
                }
                type = rnd.Next(17);
                switch (type)
                {
                case 0:
                    obj = new BreakableMapObject();
                    break;

                case 1:
                    obj = new ContainerMapObject();
                    break;

                case 2:
                    obj = new DamagerMapObject();
                    break;

                case 3:
                    obj = new DoorMapObject();
                    break;

                case 4:
                    obj = new EnemyMapObject();
                    break;

                case 5:
                    obj = new MovableMapObject();
                    break;

                case 6:
                    obj = new SoundMapObject();
                    break;

                case 7:
                    obj = new StaticMapObject();
                    break;

                case 8:
                    obj = new TriggerCommentMapObject();
                    break;

                case 9:
                    obj = new TriggerContainerMapObject();
                    break;

                case 10:
                    obj = new TriggerContainerSoundMapObject();
                    break;

                case 11:
                    obj = new TriggerDoorMapObject();
                    break;

                case 12:
                    obj = new TriggerDoorSoundMapObject();
                    break;

                case 13:
                    obj = new TriggerEnablerMapObject();
                    break;

                case 14:
                    obj = new TriggerExitMapObject();
                    break;

                case 15:
                    obj = new TriggerMapObject();
                    break;

                case 16:
                    obj = new TriggerTeleportMapObject();
                    break;

                default:
                    obj = new StaticMapObject();
                    break;
                }
                obj.PosX  = rnd.Next(width);
                obj.PosY  = rnd.Next(height);
                obj.SizeX = 1;
                obj.SizeY = 1;

                map.InsertObject(obj);

                obj = null;
            }
            Console.WriteLine();
            Console.WriteLine("  - Map created.");
            return(map);
        }