static void Main(string[] args)
    {
        dynamic test1 = new { Name = "Tim" };

        //although I used the dynamic keyword here, it is NOT dynamic. dynamics are only dynamics if they support dynamically adding properties
        //uncommenting this line will cause an exception
        //test.LastName = "Jones"
        if (test1 is IDynamicMetaObjectProvider)
        {
            Console.WriteLine("test1");
        }

        dynamic test2 = new MyDynamic();

        if (test2 is IDynamicMetaObjectProvider)
        {
            Console.WriteLine("test2");
        }

        dynamic test3 = new ExpandoObject();

        if (test3 is IDynamicMetaObjectProvider)
        {
            Console.WriteLine("test3");
        }
        dynamic test4 = new List <string>();

        if (test4 is IDynamicMetaObjectProvider)
        {
            Console.WriteLine("test4");
        }
    }
Ejemplo n.º 2
0
    public static bool CanMove(MyDynamic collider, Vector2 motion)
    {
        var bounds = collider.bounds.Shift(motion);

        return(AllCollisions(bounds, collider.mask)
               .Where(c => c.Item1 != collider && (c.Item1 is MyStatic || c.Item1 is MyDynamic))
               .Select(c => c.Item1 as MyDynamic)
               .All(d => d != null && CanMove(d, motion)));
    }
Ejemplo n.º 3
0
    public static void Move(MyDynamic collider, Vector2 motion)
    {
        collider.remainder += motion * Time.fixedDeltaTime;

        MoveDimension(collider, 0); // X
        MoveDimension(collider, 1); // Y

        var separated = collider.touching.Select(o => (o, Physics.Distance(collider.bounds, o.bounds)))
                        .Where(c => c.Item2.width < 0 || c.Item2.height < 0)
                        .ToList();

        foreach (var(other, d) in separated)
        {
            collider.touching.Remove(other);
            other.touching.Remove(collider);
        }
    }
Ejemplo n.º 4
0
        public void Dynamic()
        {
            dynamic qualquer = new ExpandoObject();

            var excel = qualquer as IDictionary<string, object>;

            excel["ValorTotal"] = 123.99;
            excel["B"] = DateTime.Now;

            Console.WriteLine(qualquer.ValorTotal);
            Console.WriteLine(qualquer.B);

            dynamic my = new MyDynamic();

            my.Nome = "Nonono";
            my.Data = DateTime.Now.Year;

            Console.WriteLine(my.Data);
        }
Ejemplo n.º 5
0
    private static void MoveDimension(MyDynamic collider, int dim)
    {
        var objects = new List <MyDynamic> {
            collider
        };

        while (true)
        {
            var totalRemainder = objects.Sum(c => c.remainder[dim]);
            if (Mathf.Abs(totalRemainder) < UNIT)
            {
                break;
            }

            foreach (var o in objects)
            {
                o.remainder[dim] = 0;
            }
            collider.remainder[dim] = totalRemainder;

            var sign = Mathf.Sign(collider.remainder[dim]) * UNIT;
            collider.remainder[dim] -= sign;

            var shift = new Vector2 {
                [dim] = sign
            };
            var collision = false;

            foreach (var obj in objects.ToList())
            {
                var overlaps = AllOverlaps(obj.bounds.Shift(shift), obj.mask)
                               .Where(c => !objects.Contains(c.Item1));

                foreach (var(other, overlap) in overlaps)
                {
                    if (other is MyDynamic || other is MyStatic)
                    {
                        collision = true;
                    }

                    obj.touching.Add(other);
                    other.touching.Add(obj);

                    if (other is MyDynamic pushee && collider.grounded && pushee.pushRatio > 0)
                    {
                        pushee.remainder[dim]   += sign * pushee.pushRatio;
                        collider.remainder[dim] *= pushee.pushRatio;
                        objects.Add(pushee);
                    }
                }
            }

            if (!collision)
            {
                foreach (var o in objects)
                {
                    o.position[dim] += sign;
                    o.UpdatePosition();
                }
            }
        }
    }