class ShadowBit { int m_UniqueID; Vector2D m_Position; Vector2D m_Forces; float m_Width; float m_Height; float m_HalfWidth; float m_HalfHeight; float m_DrawWidth; float m_DrawHeight; void Initialize() { m_UniqueID = UNIQUE_ID_COUNTER; UNIQUE_ID_COUNTER++; m_Position = new Vector2D(); m_Forces = new Vector2D(); m_Width = 8.f; m_Height = 8.f; m_HalfWidth = m_Width / 2.f; m_HalfHeight = m_Height / 2.f; m_DrawWidth = m_Width * 2.5f; m_DrawHeight = m_Height * 2.5f; if( EDITOR_MODE == true ) { m_Position.x = 1.f; m_Position.y = 1.f; } else { m_Position.x = random(m_Width, SCREEN_WIDTH - m_Width); m_Position.y = random(m_Height, SCREEN_HEIGHT - m_Height); } } void Update() { //m_Forces.Multiply( 0.01 ); //print( "id: " + m_UniqueID + " x " + m_Position.x + " y " + m_Position.y + '\n' ); m_Position.Add( m_Forces ); m_Position.x = CapFloat( m_Position.x, 0.f, (float)SCREEN_WIDTH ); m_Position.y = CapFloat( m_Position.y, 0.f, (float)SCREEN_HEIGHT ); //print( "id: " + m_UniqueID + " x " + m_Position.x + " y " + m_Position.y + '\n' ); m_Forces.Zero(); } void Draw() { if( m_UniqueID == 0 ) { return; } else { stroke( 0 ); fill( 0 ); ellipse( m_Position.x, m_Position.y, m_DrawWidth, m_DrawHeight ); noFill(); ellipse( m_Position.x, m_Position.y, m_DrawWidth + 4.f, m_DrawHeight + 4.f ); ellipse( m_Position.x, m_Position.y, m_DrawWidth + 8.f, m_DrawHeight + 8.f ); } } void AddToForces( float X, float Y ) { if( m_UniqueID == 0 ) { return; } m_Forces.x += X; m_Forces.y += Y; } };