int check_intersect(struct CaveRoom* cr1, struct CaveRoom* cr2) { Pos2 dst; pos_sub(cr2->origin, cr1->origin, &dst); float angle = pos_angle_rel(dst); float addAngle = 0.0f; while(addAngle < M_PI/2.0f) { cr1->rotation + addAngle; addAngle += 0.1f; } }
_Bool GetNodeValue(char *sMessage, char *sNodeName, char *sNodeValue){ sprintf(strHead,"<%s>",sNodeName); sprintf(strTail,"</%s>",sNodeName); nHead=pos_sub(sMessage,strHead); nTail=pos_sub(sMessage,strTail); if((-1==nHead)||(-1==nTail)) { return FALSE; } nStart = nHead+strlen(strHead); if(nStart>nTail) { return FALSE; } substring(sNodeValue,sMessage,nStart,nTail); return TRUE; }
// generate a cave room from a random generator void gen_cave_room(struct CaveRoom* cr, struct CaveRoomGenerator caveGen) { cr->exits = NULL; cr->origin.x = 0; cr->origin.y = 0; cr->radius = ((float)rand()/(float)RAND_MAX)*(caveGen.max_radius-caveGen.min_radius)+caveGen.min_radius; cr->rotation = ((float)rand()/(float)RAND_MAX)*(caveGen.minRot-caveGen.maxRot)+caveGen.minRot; pos_cpy(caveGen.max_trig_effect, &(cr->trig_effect)); pos_sub(cr->trig_effect, caveGen.min_trig_effect, &(cr->trig_effect)); pos_mul(cr->trig_effect, (float)rand()/(float)RAND_MAX, &(cr->trig_effect)); pos_add(cr->trig_effect, caveGen.min_trig_effect, &(cr->trig_effect)); pos_print(cr->trig_effect); pos_cpy(caveGen.max_trig_period, &(cr->trig_period)); pos_sub(cr->trig_period, caveGen.min_trig_period, &(cr->trig_period)); pos_mul(cr->trig_period, (float)rand()/(float)RAND_MAX, &(cr->trig_effect)); pos_add(cr->trig_period, caveGen.min_trig_period, &(cr->trig_period)); pos_flr(cr->trig_period, &(cr->trig_period)); }