Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60b0c1da authored by Jason Sams's avatar Jason Sams
Browse files

Update fountain with multitouch support.

Change-Id: I510f3f2d604f4ecacd7e18d8c6eddd827f458c70
parent b6643d90
Loading
Loading
Loading
Loading
+7 −7
Original line number Original line Diff line number Diff line
@@ -8,7 +8,6 @@
#include "../../../../scriptc/rs_graphics.rsh"
#include "../../../../scriptc/rs_graphics.rsh"


static int newPart = 0;
static int newPart = 0;
static float4 partColor;
rs_mesh partMesh;
rs_mesh partMesh;


typedef struct __attribute__((packed, aligned(4))) Point {
typedef struct __attribute__((packed, aligned(4))) Point {
@@ -40,16 +39,17 @@ int root() {
    return 1;
    return 1;
}
}


void addParticles(int rate, float x, float y, bool newColor)
static float4 partColor[10];
void addParticles(int rate, float x, float y, int index, bool newColor)
{
{
    if (newColor) {
    if (newColor) {
        partColor.x = rsRand(0.5f, 1.0f);
        partColor[index].x = rsRand(0.5f, 1.0f);
        partColor.y = rsRand(1.0f);
        partColor[index].y = rsRand(1.0f);
        partColor.z = rsRand(1.0f);
        partColor[index].z = rsRand(1.0f);
    }
    }
    float rMax = ((float)rate) * 0.005f;
    float rMax = ((float)rate) * 0.02f;
    int size = rsAllocationGetDimX(rsGetAllocation(point));
    int size = rsAllocationGetDimX(rsGetAllocation(point));
    uchar4 c = rsPackColorTo8888(partColor);
    uchar4 c = rsPackColorTo8888(partColor[index]);


    Point_t * np = &point[newPart];
    Point_t * np = &point[newPart];
    float2 p = {x, y};
    float2 p = {x, y};
+12 −5
Original line number Original line Diff line number Diff line
@@ -48,13 +48,20 @@ public class FountainRS {
        mRS.contextBindRootScript(mScript);
        mRS.contextBindRootScript(mScript);
    }
    }


    boolean holdingColor = false;
    boolean holdingColor[] = new boolean[10];
    public void newTouchPosition(int x, int y, int rate) {
    public void newTouchPosition(float x, float y, float pressure, int id) {
        if (id > holdingColor.length) {
            return;
        }
        int rate = (int)(pressure * pressure * 500.f);
        if(rate > 500) {
            rate = 500;
        }
        if (rate > 0) {
        if (rate > 0) {
            mScript.invoke_addParticles(rate, x, y, !holdingColor);
            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
            holdingColor = true;
            holdingColor[id] = true;
        } else {
        } else {
            holdingColor = false;
            holdingColor[id] = false;
        }
        }


    }
    }
+18 −6
Original line number Original line Diff line number Diff line
@@ -73,15 +73,27 @@ public class FountainView extends RSSurfaceView {
    {
    {
        int act = ev.getAction();
        int act = ev.getAction();
        if (act == ev.ACTION_UP) {
        if (act == ev.ACTION_UP) {
            mRender.newTouchPosition(0, 0, 0);
            mRender.newTouchPosition(0, 0, 0, 0);
            return false;
            return false;
        }
        }
        float rate = (ev.getPressure() * 50.f);

        rate *= rate;
        int count = ev.getHistorySize();
        if(rate > 2000.f) {
        int pcount = ev.getPointerCount();
            rate = 2000.f;

        for (int p=0; p < pcount; p++) {
            int id = ev.getPointerId(p);
            mRender.newTouchPosition(ev.getX(p),
                                     ev.getY(p),
                                     ev.getPressure(p),
                                     id);

            for (int i=0; i < count; i++) {
                mRender.newTouchPosition(ev.getHistoricalX(p, i),
                                         ev.getHistoricalY(p, i),
                                         ev.getHistoricalPressure(p, i),
                                         id);
            }
        }
        }
        mRender.newTouchPosition((int)ev.getX(), (int)ev.getY(), (int)rate);
        return true;
        return true;
    }
    }
}
}
+3 −2
Original line number Original line Diff line number Diff line
@@ -50,11 +50,12 @@ public class ScriptC_Fountain extends ScriptC {
    }
    }


    private final static int mExportFuncIdx_addParticles = 0;
    private final static int mExportFuncIdx_addParticles = 0;
    public void invoke_addParticles(int rate, float x, float y, boolean newColor) {
    public void invoke_addParticles(int rate, float x, float y, int index, boolean newColor) {
        FieldPacker addParticles_fp = new FieldPacker(16);
        FieldPacker addParticles_fp = new FieldPacker(20);
        addParticles_fp.addI32(rate);
        addParticles_fp.addI32(rate);
        addParticles_fp.addF32(x);
        addParticles_fp.addF32(x);
        addParticles_fp.addF32(y);
        addParticles_fp.addF32(y);
        addParticles_fp.addI32(index);
        addParticles_fp.addBoolean(newColor);
        addParticles_fp.addBoolean(newColor);
        addParticles_fp.skip(3);
        addParticles_fp.skip(3);
        invoke(mExportFuncIdx_addParticles, addParticles_fp);
        invoke(mExportFuncIdx_addParticles, addParticles_fp);