public Object[] getParticleUserDataBuffer() { m_userDataBuffer.data = requestParticleBuffer(Object.class, m_userDataBuffer.data); return m_userDataBuffer.data; }
public Object[] getParticleUserDataBuffer() { m_userDataBuffer.data = requestParticleBuffer(Object.class, m_userDataBuffer.data); return m_userDataBuffer.data; }
public ParticleColor[] getParticleColorBuffer() { m_colorBuffer.data = requestParticleBuffer(ParticleColor.class, m_colorBuffer.data); return m_colorBuffer.data; }
public ParticleColor[] getParticleColorBuffer() { m_colorBuffer.data = requestParticleBuffer(ParticleColor.class, m_colorBuffer.data); return m_colorBuffer.data; }
private void solveSolid(final TimeStep step) { // applies extra repulsive force from solid particle groups m_depthBuffer = requestParticleBuffer(m_depthBuffer); float ejectionStrength = step.inv_dt * m_ejectionStrength; for (int k = 0; k < m_contactCount; k++) { final ParticleContact contact = m_contactBuffer[k]; int a = contact.indexA; int b = contact.indexB; if (m_groupBuffer[a] != m_groupBuffer[b]) { float w = contact.weight; Vec2 n = contact.normal; float h = m_depthBuffer[a] + m_depthBuffer[b]; final Vec2 va = m_velocityBuffer.data[a]; final Vec2 vb = m_velocityBuffer.data[b]; final float inter = ejectionStrength * h * w; final float fx = inter * n.x; final float fy = inter * n.y; va.x -= fx; va.y -= fy; vb.x += fx; vb.y += fy; } } }
private void solveSolid(final TimeStep step) { // applies extra repulsive force from solid particle groups m_depthBuffer = requestParticleBuffer(m_depthBuffer); float ejectionStrength = step.inv_dt * m_ejectionStrength; for (int k = 0; k < m_contactCount; k++) { final ParticleContact contact = m_contactBuffer[k]; int a = contact.indexA; int b = contact.indexB; if (m_groupBuffer[a] != m_groupBuffer[b]) { float w = contact.weight; Vec2 n = contact.normal; float h = m_depthBuffer[a] + m_depthBuffer[b]; final Vec2 va = m_velocityBuffer.data[a]; final Vec2 vb = m_velocityBuffer.data[b]; final float inter = ejectionStrength * h * w; final float fx = inter * n.x; final float fy = inter * n.y; va.x -= fx; va.y -= fy; vb.x += fx; vb.y += fy; } } }
private void solveColorMixing(final TimeStep step) { // mixes color between contacting particles m_colorBuffer.data = requestParticleBuffer(ParticleColor.class, m_colorBuffer.data); int colorMixing256 = (int) (256 * m_colorMixingStrength); for (int k = 0; k < m_contactCount; k++) { final ParticleContact contact = m_contactBuffer[k]; int a = contact.indexA; int b = contact.indexB; if ((m_flagsBuffer.data[a] & m_flagsBuffer.data[b] & ParticleTypeInternal.b2_colorMixingParticle) != 0) { ParticleColor colorA = m_colorBuffer.data[a]; ParticleColor colorB = m_colorBuffer.data[b]; int dr = (colorMixing256 * (colorB.r - colorA.r)) >> 8; int dg = (colorMixing256 * (colorB.g - colorA.g)) >> 8; int db = (colorMixing256 * (colorB.b - colorA.b)) >> 8; int da = (colorMixing256 * (colorB.a - colorA.a)) >> 8; colorA.r += dr; colorA.g += dg; colorA.b += db; colorA.a += da; colorB.r -= dr; colorB.g -= dg; colorB.b -= db; colorB.a -= da; } } }
private void solveColorMixing(final TimeStep step) { // mixes color between contacting particles m_colorBuffer.data = requestParticleBuffer(ParticleColor.class, m_colorBuffer.data); int colorMixing256 = (int) (256 * m_colorMixingStrength); for (int k = 0; k < m_contactCount; k++) { final ParticleContact contact = m_contactBuffer[k]; int a = contact.indexA; int b = contact.indexB; if ((m_flagsBuffer.data[a] & m_flagsBuffer.data[b] & ParticleTypeInternal.b2_colorMixingParticle) != 0) { ParticleColor colorA = m_colorBuffer.data[a]; ParticleColor colorB = m_colorBuffer.data[b]; int dr = (colorMixing256 * (colorB.r - colorA.r)) >> 8; int dg = (colorMixing256 * (colorB.g - colorA.g)) >> 8; int db = (colorMixing256 * (colorB.b - colorA.b)) >> 8; int da = (colorMixing256 * (colorB.a - colorA.a)) >> 8; colorA.r += dr; colorA.g += dg; colorA.b += db; colorA.a += da; colorB.r -= dr; colorB.g -= dg; colorB.b -= db; colorB.a -= da; } } }
m_depthBuffer = requestParticleBuffer(m_depthBuffer); for (int i = group.m_firstIndex; i < group.m_lastIndex; i++) { float w = m_accumulationBuffer[i];
m_depthBuffer = requestParticleBuffer(m_depthBuffer); for (int i = group.m_firstIndex; i < group.m_lastIndex; i++) { float w = m_accumulationBuffer[i];
private void solveTensile(final TimeStep step) { m_accumulation2Buffer = requestParticleBuffer(Vec2.class, m_accumulation2Buffer); for (int i = 0; i < m_count; i++) { m_accumulationBuffer[i] = 0;
private void solveTensile(final TimeStep step) { m_accumulation2Buffer = requestParticleBuffer(Vec2.class, m_accumulation2Buffer); for (int i = 0; i < m_count; i++) { m_accumulationBuffer[i] = 0;
m_colorBuffer.data = requestParticleBuffer(m_colorBuffer.dataClass, m_colorBuffer.data); m_colorBuffer.data[index].set(def.color); m_userDataBuffer.data = requestParticleBuffer(m_userDataBuffer.dataClass, m_userDataBuffer.data); m_userDataBuffer.data[index] = def.getUserData();
m_colorBuffer.data = requestParticleBuffer(m_colorBuffer.dataClass, m_colorBuffer.data); m_colorBuffer.data[index].set(def.color); m_userDataBuffer.data = requestParticleBuffer(m_userDataBuffer.dataClass, m_userDataBuffer.data); m_userDataBuffer.data[index] = def.getUserData();