Actual gameplay is far from being in sight, but at least I’m having fun :p

## About omgnoseat

## Entries

Ludum Dare 32 | Ludum Dare 29 | Ludum Dare 24 |

## omgnoseat's Trophies

## omgnoseat's Archive

## Trigonemtry, arggg

Took me way too long to get something that feels nice, but now you can swing dicks like you mean it

## Someone had to do it

A bit late, but I just started on the art 3 hours ago, and have no finished the basic sprites.

I will be using my custom messages system and some basic utils for unity3D, and I have to share it I believe, so you can download it here

https://www.dropbox.com/s/5ovay3dibv7s3x8/MartinoFramework.rar?dl=0

Still have so much to do

Is the deadline including time to upload btw? I recall it wasn’t but I might be confused with a different jam.

## Manly swimming

Picking three different movement mechanics was not smart for a gamejam. Just need to polish it up and then I can actually add the gameplay :p

## Manliest dive ever

Still have alot to do before I can even start with gameplay

## unity3d 2D water

I didn’t know I was going to join prior to the event, so I had to rewrite my 2D water code.

Feels fair to still share it with everyone though.

It could use some improvements, I’m moving the verts on the cpu since I can’t do shaders haha.using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using AssemblyCSharp;

//[ExecuteInEditMode()]

using AssemblyCSharpEditor;/* Written by Martino Wullems, aka omgnoseat*/

public class MWater2D : MonoBehaviour {public int width = 10;

public int height = 1;public Mesh mesh = null;

private float textureScale;private List<Vector3> vertices;

private List<int> triangles;

private List<Vector2> newUV;private List<WaveVert> waveVerts;

public float segmentWidth = 1;

int segmentCount;private MeshRenderer renderer;

float dx = 0;

public float waveRepeat = 10f;

public float scrollSpeed = 0.2f;

public float amplitude = 0.02f;

float theta = 0;public float springToBase = 0.02f;

public float forceMultiplier = 1f;

public float spring = 0.05f;

public float floatValue = 1f;

// Use this for initialization

LiteTimer timer = new LiteTimer(0.1f );public void Start()

{

timer.looping = true;

timer.onElapsed += HandleonElapsed;

timer.start( );Build();

}public void Build () {

mesh = GetComponent<MeshFilter> ().mesh;

vertices = new List<Vector3>();

triangles = new List<int>();

newUV = new List<Vector2>( );

waveVerts = new List<WaveVert>() ;mesh = GetComponent<MeshFilter>().mesh;

renderer = GetComponent<MeshRenderer>();

//textureScale = renderer.sharedMaterial.GetTexture(0).width / width;

//textureScale = 1f / textureScale;

//print (“textureScale : ” + textureScale );

float tx = 0;

segmentCount = Mathf.FloorToInt( width / segmentWidth);Debug.Log (“segmentCount: ” + segmentCount );

for(tx = 0; tx < segmentCount; tx++)

{

Vector3 tl = new Vector3 ( tx * segmentWidth , 0 , 0 );

Vector3 tr = new Vector3 ( (tx * segmentWidth ) + segmentWidth , 0 , 0 );

Vector3 br = new Vector3 ( (tx * segmentWidth ) + segmentWidth , -height, 0 );

Vector3 bl = new Vector3 ( (tx * segmentWidth ) , -height , 0 );vertices.Add( tl );

vertices.Add( tr );

vertices.Add( br );

vertices.Add( bl );waveVerts.Add( new WaveVert( tl, tl, springToBase ) );

waveVerts.Add( new WaveVert( tr, tr, springToBase ) );

waveVerts.Add( new WaveVert( br, br, springToBase ) );

waveVerts.Add( new WaveVert( bl, bl, springToBase ) );newUV.Add(new Vector2 (0, 1));

newUV.Add(new Vector2 (1, 1));

newUV.Add(new Vector2 (1, 0));

newUV.Add(new Vector2 (0, 0));}

int squarecount = 0;

for(tx = 0; tx < segmentCount; tx++)

{

//if( tiles[ty][tx] < 0 ) continue;triangles.Add( (squarecount * 4 ) + 0 );

triangles.Add( (squarecount * 4 ) + 1 );

triangles.Add( (squarecount * 4 ) + 3 );triangles.Add( (squarecount * 4 ) + 1 );

triangles.Add( (squarecount * 4 ) + 2 );

triangles.Add( (squarecount * 4 ) + 3 );squarecount++;

}refreshMesh();

if( GetComponent<BoxCollider2D>() == null ) gameObject.AddComponent<BoxCollider2D>();

dx = ( ( Mathf.PI * 2 ) / waveRepeat) * segmentWidth;

}void HandleonElapsed ()

{

updateForce();

generateWave();

refreshMesh();//set vertices to waveverts

for(int i = 0; i < vertices.Count; i += 4)

{

//update verts

waveVerts[i].Update();

if(i >= 4) waveVerts[i-3].Update();vertices[i] = waveVerts[i].pos;

if(i >= 4 )vertices[i-3] = waveVerts[i].pos;//print (“i ” + i);

}//last one

waveVerts[ vertices.Count – 3 ].Update();

vertices[vertices.Count -3] = waveVerts[ vertices.Count – 3 ].pos;

//print (“vertices.count: ” + vertices.Count);

//print (“———–“);

}void updateForce()

{

for(int i = 0; i < vertices.Count; i += 4)

{

int vID = i / 4;

WaveVert p = waveVerts[i];if( vID > 2 )

{

WaveVert prevP = waveVerts[i – 4];

float dy = prevP.pos.y – p.pos.y;

//dy*= 0.3f;p.velocity.y += spring * dy * Time.deltaTime;

}if( vID < segmentCount – 2)

{

WaveVert nextP = waveVerts[i + 4];

float dy = nextP.pos.y – p.pos.y;

//dy *= 0.3f;p.velocity.y += spring * dy * Time.deltaTime;

}}

}

void generateWave()

{

theta += scrollSpeed * Time.deltaTime;

float x = theta;

float y = transform.position.y – ( Mathf.Sin( x ) * amplitude ); //sin x is y positions upon % normalized circle pretty much;for(int i = 0; i < vertices.Count; i += 4)

{

//check wave Y

y = 0 – ( Mathf.Sin( x ) * amplitude );//if( i > 0 ) vertices[i – 3] = new Vector3( vertices[i-3].x, y, 0 ); //not -=

//vertices[i] = new Vector3(vertices[i].x, y, 0 );waveVerts[i].anchor = new Vector3( vertices[i].x, y, 0 );

if( i >= 4 )waveVerts[i-3].anchor = new Vector3( vertices[i].x, y, 0 );x += dx ;

}//last one

y = 0 – ( Mathf.Sin( x ) * amplitude );

waveVerts[ vertices.Count – 3 ].anchor = new Vector3( vertices[ vertices.Count -3].x, y, 0 );

}void applyForce( int pointID, float forceY)

{

int realID = pointID * 4;;forceY *= forceMultiplier;

int xForce = Mathf.FloorToInt( forceY ) / 2;

if(xForce < 0 ) xForce = 0;

if(xForce > segmentCount) xForce = segmentCount;waveVerts[ realID ].velocity += new Vector3(0, forceY, 0 );

if( realID > 0 ) waveVerts[ realID – 3 ].velocity += new Vector3(0, forceY, 0 );}

public void refreshMesh()

{

mesh.Clear ();

mesh.vertices = vertices.ToArray();

mesh.triangles = triangles.ToArray();

mesh.uv = newUV.ToArray();

mesh.Optimize ();

mesh.RecalculateNormals ();//GetComponent<MeshCollider>().sharedMesh = mesh;

}// Update is called once per frame

public void Update () {HandleonElapsed();

//timer.Update();if( Input.GetKey( KeyCode.P ) )

{

applyForce( 15, 0.3f );

}

}public void OnTriggerEnter2D( Collider2D collider )

{

if(collider.rigidbody2D == null ) return;

waterInteraction( collider, collider.rigidbody2D.velocity.y / 50 );

}public void OnTriggerExit2D( Collider2D collider )

{

if(collider.rigidbody2D == null ) return;

waterInteraction( collider, collider.rigidbody2D.velocity.y / 30 );

}public void OnTriggerStay2D( Collider2D collider )

{

if(collider.rigidbody2D == null ) return;

waterInteraction( collider, collider.rigidbody2D.velocity.x / 500 );collider.rigidbody2D.velocity += new Vector2(0, (floatValue ) * Time.fixedDeltaTime );

}private void waterInteraction( Collider2D collider, float power )

{

float enterPos = Mathf.Abs( transform.position.x – collider.transform.position.x );

float size = (width * segmentWidth);int point = Mathf.FloorToInt( ( enterPos / size ) * width);

if( point == 0 || point == segmentCount ) return;applyForce( point , power );

}}

Didn’t really plan on participating, but I got a very fun idea pretty quickly.

I finished most of the player’s sprites, here’s a small preview. I’m not an artist, but it was fun working on this.

I’m not gonna torture myself, just gonna sleep for 7-8 hours as usual. Tomorrow I will start on the programming using unity3d.