Esempio n. 1
0
        static void Postfix(ref GravityComponents __instance)
        {
            var data = __instance.GetDataList();

            foreach (var newGrav in gravComponentState)
            {
                data[newGrav.Key] = newGrav.Value;
            }
        }
Esempio n. 2
0
        // TODO: Check for potential bug with 1-tile width water
        static void Prefix(ref GravityComponents __instance, float dt)
        {
            gravComponentState.Clear();

            var data = __instance.GetDataList();

            for (int i = 0; i < data.Count; i++)
            {
                GravityComponent grav = data[i];
                if (!Helpers.ShouldFloat(grav.transform))
                {
                    continue;
                }

                ApplyXVelocityChanges(ref grav, dt);
                ApplyYVelocityChanges(ref grav, dt);

                Vector3 pos         = grav.transform.GetPosition();
                Vector3 newPosition = (Vector2)pos + grav.velocity * dt;

                // Resolve collisions
                CollisionResolver resolver = new CollisionResolver(grav, newPosition);
                resolver.ResolveCollisions();

                // Apply the new gravity/position
                newPosition   = resolver.bestPosition;
                newPosition.z = pos.z;
                grav          = resolver.grav;

                grav.transform.SetPosition(newPosition);
                grav.elapsedTime += dt;

                gravComponentState.Add(i, grav);
                data[i] = NULL_COMPONENT;
            }
        }