/* Shader description goes here */
  
#include "lcl_funlib.h"
  
surface
pandafloor (float    verticleFlip = 1, /* [0 or 1] */
                horizontalFlip = 1, /* [0 or 1] */
                Ka =0.8 ,
                 Kd =0.8 ,
                Ks =0.5,
                srepeat= 1,
                trepeat= 1,
                roughness =0.1,
                s_center = 0.5,
                t_center = 0.5,
                rad = 0.4,
                blur = 1;
                color     edgecolor = color (0.8,1.0,0.8),
                        edgecolor2 = color (0.8,0.6,1.0),
                        incolor = color ( 1.0,0.8,0.8),
                        outcolor = color (0.8,1.0,0.8),
                hilitecolor = 1 )
{
color    surfcolor = color (0.8,1.0,0.8) ;
color planecolor = isInCircle( s_center, t_center, rad, blur, incolor, outcolor);
normal n = normalize (N);
  
vector i = normalize (I);
  
  
float tt = 1-t;
if (verticleFlip == 0)
    tt=t;
float ss = 1-s;
if (horizontalFlip == 0)
    ss = s;
    
ss=mod(s*srepeat,1);
tt=mod(t*trepeat,1);
  
/* pattern1*/
  
  
float midcircle;
midcircle = (pow ( ss - 0.5, 2) + pow ( tt - 0.5 , 2));
 if (midcircle <= 0.5 )
        surfcolor = planecolor;
  
  
  
float edgeC1;
edgeC1 = (pow ( ss - 0.05, 2) + pow ( tt - 0.05 , 2));
float edgeC2;
edgeC2 = (pow ( ss - 0.05, 2) + pow ( tt - 0.05 , 2));
  
if (edgeC1 <= 0.05) 
    surfcolor = edgecolor; 
  
 else if (edgeC1 <= 0.08) 
    surfcolor = edgecolor2;
  
/*------------------------------------------------------------*/
  
float edge2C1;
edge2C1 = (pow ( ss - 0.95, 2) + pow ( tt - 0.05 , 2));
float edge2C2;
edge2C2 = (pow ( ss - 0.95, 2) + pow ( tt - 0.05 , 2));
  
if (edge2C1 <= 0.05) 
    surfcolor = edgecolor; 
  
 else if (edge2C1 <= 0.08) 
    surfcolor = edgecolor2;
  
/*------------------------------------------------------------*/    
    
float edge3C1;
edge3C1 = (pow ( ss - 0.95, 2) + pow ( tt - 0.95 , 2));
float edge3C2;
edge3C2 = (pow ( ss - 0.95, 2) + pow ( tt - 0.95 , 2));
  
if (edge3C1 <= 0.05) 
    surfcolor = edgecolor; 
  
 else if (edge3C1 <= 0.08) 
    surfcolor = edgecolor2;
/*------------------------------------------------------------*/
  
float edge4C1;
edge4C1 = (pow ( ss - 0.05, 2) + pow ( tt - 0.95 , 2));
float edge4C2;
edge4C2 = (pow ( ss - 0.05, 2) + pow ( tt - 0.95 , 2));
  
  
if (edge4C1 <= 0.05) 
    surfcolor = edgecolor; 
  
 else if (edge4C1 <= 0.08) 
    surfcolor = edgecolor2;
/*------------------------------------------------------------*/
  
  
  
  
  
color ambientColor = ambient() * Ka;
color diffuseColor = diffuse(n) * Kd;
color specColor = specular (n, -i, roughness) * hilitecolor * Ks;
  
  
/* STEP 1 - set the apparent surface opacity */
Oi = Os;
  
  
  
/* STEP 2 - calculate the apparent surface color */
Ci = Oi * Cs * surfcolor * (ambientColor + diffuseColor + specColor);
}