Пример #1
0
        public override void UpdateEntity(uint entity)
        {
            CPosition  position  = (CPosition)positions[entity];
            CDimension dimension = (CDimension)dimensions[entity];

            partitioner.Add(new PartitionerEntry(entity, position, dimension));
        }
Пример #2
0
        private VertexTransform CreateVertexTransform(CPosition position, CDimension dimension, CTransform transform)
        {
            Vector3 translation = new Vector3(position.X + transform.Translation.X, position.Y + transform.Translation.Y, position.Z + transform.Translation.Z);
            Vector3 scale       = new Vector3(dimension.Width * transform.Scale.X, dimension.Height * transform.Scale.Y, transform.Scale.Z);

            return(new VertexTransform(translation, scale, transform.Origin, transform.Rotation));
        }
Пример #3
0
        public override void UpdateEntity(uint entity)
        {
            CPosition  position  = (CPosition)positions[entity];
            CDimension dimension = (CDimension)dimensions[entity];
            CTransform transform = (CTransform)transforms[entity];
            CColor     color     = (CColor)colors[entity];

            transformData[entity] = CreateVertexTransform(position, dimension, transform);
            colorData[entity]     = new VertexColor(color.Color);
        }
Пример #4
0
        private void Simulate(uint entity)
        {
            CPosition position = (CPosition)positions[entity];
            CKinetic  kinetic  = (CKinetic)kinetics[entity];

            kinetic.Accumulator += (float)(Engine.TotalGameTime - kinetic.LastUpdate).TotalSeconds;
            kinetic.LastUpdate   = new TimeSpan(Engine.TotalGameTime.Ticks);

            while (kinetic.Accumulator >= target)
            {
                Integrate(position, kinetic, integrator, target);
                kinetic.Accumulator -= target;
            }
        }
Пример #5
0
        private void Integrate(CPosition position, CKinetic kinetic, Integrator integrator, float deltaTime)
        {
            switch (integrator)
            {
            case Integrator.SemiImplictEuler:
                kinetic.Velocity += kinetic.Acceleration * deltaTime;

                position.X += kinetic.Velocity.X * deltaTime;
                position.Y += kinetic.Velocity.Y * deltaTime;
                break;

            case Integrator.VelocityVerlet:
                position.X += kinetic.Velocity.X * deltaTime + 0.5f * kinetic.Acceleration.X * deltaTime * deltaTime;
                position.Y += kinetic.Velocity.Y * deltaTime + 0.5f * kinetic.Acceleration.Y * deltaTime * deltaTime;

                kinetic.Velocity += kinetic.Acceleration * deltaTime;
                break;
            }
        }
Пример #6
0
 public PartitionerEntry(uint entity, CPosition position, CDimension dimension)
 {
     Identifier = (int)entity;
     Span       = new RectangleF(position.X, position.Y, dimension.Width, dimension.Height);
 }