예제 #1
0
        public void HandleCollision(FreeObject obj)
        {
            var position = obj.Position;

            foreach (var body in this.game.Bodies)
            {
                var shape = body.Shape;

                var difference = shape.Center - position;

                var distanceSquared = difference.LengthSquared;

                if (distanceSquared < shape.Radius.Squared)
                {
                    var command = ParticlePlanetCollision.Command(this.game, obj, body);

                    this.commandSender.ExecuteAndSend(command);

                    if (obj.Deleted)
                    {
                        return;
                    }
                }
            }
        }
예제 #2
0
        private static void Test3()
        {
            STMObject <ValueHolder> result = new FreeObject <ValueHolder>(new ValueHolder(10));
            var system = FreeStmSystem.GetInstance();

            var t1 = new Thread(() =>
            {
                var r1 = system.Atomic(() =>
                {
                    if (result.GetValue().Value == 10)
                    {
                        Thread.Yield();
                        result.SetValue(new ValueHolder(0));
                    }
                    else
                    {
                        result.SetValue(new ValueHolder(1));
                    }
                    return(result.GetValue());
                });
                Console.WriteLine("Result: " + r1);
            });

            var t2 = new Thread(() => system.Atomic(() => result.SetValue(new ValueHolder(12))));

            t1.Start();
            t2.Start();

            t1.Join();
            t2.Join();
        }
예제 #3
0
            public CommandImplementation(GameState game, NetBuffer buffer)
                : base(CommandType.ParticlePlanetCollision, game)
            {
                var parameters = buffer.Read <Parameters>();

                this.body     = game.Bodies[parameters.BodyId];
                this.particle = game.FreeObjects[parameters.ParticleId];
            }
예제 #4
0
 private static void Test2()
 {
     var system = FreeStmSystem.GetInstance();
     STMObject <ValueHolder> fo = new FreeObject <ValueHolder>(new ValueHolder(5));
     var result = system.Atomic(() =>
     {
         fo.SetValue(new ValueHolder(12));
         return(fo.GetValue());
     });
 }
예제 #5
0
 public void SetStatus(bool used)
 {
     if (used)
     {
         FreeObject.SetActive(false);
         UsedObject.SetActive(true);
     }
     else
     {
         FreeObject.SetActive(true);
         UsedObject.SetActive(false);
     }
 }
        public void HandleCollision(FreeObject obj)
        {
            var position = obj.Position;

            foreach (var body in this.game.Bodies)
            {
                var shape = body.Shape;

                var difference = shape.Center - position;

                var distanceSquared = difference.LengthSquared;

                if (distanceSquared < shape.Radius.Squared)
                {
                    var command = ParticlePlanetCollision.Command(this.game, obj, body);

                    this.commandSender.ExecuteAndSend(command);

                    if (obj.Deleted)
                        return;
                }
            }
        }
예제 #7
0
 public static SingleParameters FromParticle(FreeObject obj)
 {
     return(new SingleParameters(obj.Id, obj.Position, obj.Velocity));
 }
예제 #8
0
 public FreeObjectBuilder(FreeObject freeObject)
 {
     this.freeObject = freeObject;
 }
예제 #9
0
 public void Sync(FreeObject obj)
 {
 }
예제 #10
0
 public static SingleParameters FromParticle(FreeObject obj)
 {
     return new SingleParameters(obj.Id, obj.Position, obj.Velocity);
 }
 public void Sync(FreeObject obj)
 {
 }
예제 #12
0
 public void Sync(FreeObject obj)
 {
     this.objects.Enqueue(obj);
 }
 public void Sync(FreeObject obj)
 {
     this.objects.Enqueue(obj);
 }
예제 #14
0
        private static void Test1()
        {
            var system = FreeStmSystem.GetInstance();
            STMObject <ValueHolder> fo = new FreeObject <ValueHolder>(new ValueHolder(15));

            var t1 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(1));
                    return(fo.GetValue());
                });
            });

            var t2 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(2));
                    return(fo.GetValue());
                });
            });

            var t3 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(3));
                    return(fo.GetValue());
                });
            });

            var t4 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(4));
                    return(fo.GetValue());
                });
            });

            var t5 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(5));
                    return(fo.GetValue());
                });
            });

            t1.Start();
            t2.Start();
            t3.Start();
            t4.Start();
            t5.Start();

            t1.Join();
            t2.Join();
            t3.Join();
            t4.Join();
            t5.Join();
        }
예제 #15
0
 public CommandImplementation(GameState game, FreeObject particle, IBody body)
     : base(CommandType.ParticlePlanetCollision, game)
 {
     this.particle = particle;
     this.body     = body;
 }
 public void HandleCollision(FreeObject obj)
 {
 }
예제 #17
0
 public Parameters(FreeObject particle, IBody body)
 {
     this.particleId = particle.Id.Simple;
     this.bodyId     = body.Id.Simple;
 }
예제 #18
0
 public static ICommand Command(GameState game, FreeObject particle, IBody body)
 {
     return(new CommandImplementation(game, particle, body));
 }