Example #1
0
TGUINode * GUI_CreateNode( void ) {
    TGUINode * node = Memory_New( TGUINode );
    node->visible = true;
    node->color = Vec3_Set( 1.0f, 1.0f, 1.0f );
    List_Add( &gGUINodeList, node );
    return node;
}
Example #2
0
void Octree_Build( TOctree * octree, TTriangle * triangles, int triangleCount, int maxTrianglesPerNode ) {
    // compute metrics of vertices( min, max ) and build root node 
    octree->root = Memory_New( TOctreeNode );
    octree->root->indexCount = 0;
    octree->root->indices = 0;
    octree->root->split = 0;

    octree->root->min = Vec3_Set( FLT_MAX, FLT_MAX, FLT_MAX );
    octree->root->max = Vec3_Set( -FLT_MAX, -FLT_MAX, -FLT_MAX );

    int i;
    for( i = 0; i < triangleCount; i++ ) {
        const TTriangle * triangle = triangles + i;

        // so much wow, so copypaste wow 
        if( triangle->a.x < octree->root->min.x ) octree->root->min.x = triangle->a.x;
        if( triangle->b.x < octree->root->min.x ) octree->root->min.x = triangle->b.x;
        if( triangle->c.x < octree->root->min.x ) octree->root->min.x = triangle->c.x;

        if( triangle->a.y < octree->root->min.y ) octree->root->min.y = triangle->a.y;
        if( triangle->b.y < octree->root->min.y ) octree->root->min.y = triangle->b.y;
        if( triangle->c.y < octree->root->min.y ) octree->root->min.y = triangle->c.y;

        if( triangle->a.z < octree->root->min.z ) octree->root->min.z = triangle->a.z;
        if( triangle->b.z < octree->root->min.z ) octree->root->min.z = triangle->b.z;
        if( triangle->c.z < octree->root->min.z ) octree->root->min.z = triangle->c.z;

        if( triangle->a.x > octree->root->max.x ) octree->root->max.x = triangle->a.x;
        if( triangle->b.x > octree->root->max.x ) octree->root->max.x = triangle->b.x;
        if( triangle->c.x > octree->root->max.x ) octree->root->max.x = triangle->c.x;

        if( triangle->a.y > octree->root->max.y ) octree->root->max.y = triangle->a.y;
        if( triangle->b.y > octree->root->max.y ) octree->root->max.y = triangle->b.y;
        if( triangle->c.y > octree->root->max.y ) octree->root->max.y = triangle->c.y;

        if( triangle->a.z > octree->root->max.z ) octree->root->max.z = triangle->a.z;
        if( triangle->b.z > octree->root->max.z ) octree->root->max.z = triangle->b.z;
        if( triangle->c.z > octree->root->max.z ) octree->root->max.z = triangle->c.z;
    }

    int * indices = Memory_NewCount( triangleCount, int );
    for( int i = 0; i < triangleCount; i++ ) {
        indices[i] = i;
    }

    int conIndSize = 10 * triangleCount;
    octree->containIndices = Memory_NewCount( conIndSize, int );
    octree->containIndexCount = 0;
    
    // multithreaded version
    for( int i = 0; i < OCTREE_MAX_SIMULTANEOUS_THREADS; i++ ) {
        octree->containIndicesMT[i] = Memory_NewCount( conIndSize, int );
        octree->containIndexCountMT[i] = 0;
    }

    Octree_BuildRecursiveInternal( octree->root, triangles, triangleCount, indices, triangleCount, maxTrianglesPerNode );
}
Example #3
0
TGUINode * GUI_CreateRect( float x, float y, float w, float h, TTexture * tex ) { 
    TGUINode * node = GUI_CreateNode();
    node->rect = Memory_New( TGUIRect );
    node->rect->tex = tex; 
    node->rect->x = x;
    node->rect->y = y;
    node->rect->w = w;
    node->rect->h = h;    
    return node;
}
Example #4
0
def(bool, Run) {
	unsigned int *ptr[2048];

	for (size_t i = 1; i < nElems(ptr); i++) {
		ptr[i] = Memory_New(i * sizeof(unsigned int));

		fwd(j, i) {
			ptr[i][j] = i + j;
		}
	}
Example #5
0
def(void, Enqueue, void *ptr, int flags) {
    ref(Event) *event = Memory_New(sizeof(ref(Event)));

    *event = (ref(Event)) {
        .ptr   = ptr,
         .flags = flags,
          .next  = NULL
    };

    LinkedList_Push(&this->events, event);
}
Example #6
0
TGUINode * GUI_CreateButton( float x, float y, float width, float height, TTexture * backgroundTex, TFont * font, const char * text ) {
    TGUINode * node = GUI_CreateNode();
    node->button = Memory_New( TGUIButton );
    node->button->background = GUI_CreateRect( x, y, width, height, backgroundTex );
    node->button->text = GUI_CreateText( x, y, width, height, text, font );
    GUI_SetTextAlign( node, GUITA_MIDDLE );
    node->button->normalColor = Vec3_Set( 1.0f, 1.0f, 1.0f );
    node->button->pressedColor = Vec3_Set( 0.8f, 0.8f, 0.8f );
    node->button->pickedColor = Vec3_Set( 0.9f, 0.9f, 0.9f );
    node->color = node->button->normalColor;
    return node;
}
Example #7
0
TGUINode * GUI_CreateSlider( float x, float y, float width, float height, TTexture * backgroundTex, TTexture * sliderTex, float minValue, float maxValue, TFont * font, const char * text ) {
    TGUINode * node = GUI_CreateNode();
    node->slider = Memory_New( TGUISlider );
    node->slider->minValue = minValue;
    node->slider->maxValue = maxValue;
    node->slider->value = maxValue;
    node->slider->background = GUI_CreateRect( x, y, width, height, backgroundTex );
    node->slider->slider = GUI_CreateRect( width - 10, -4, 10, height + 8, sliderTex );
    GUI_Attach( node->slider->slider, node->slider->background );
    node->slider->text = GUI_CreateText( width + 10, 0, width, height, text, font );
    GUI_Attach( node->slider->text, node->slider->background );
    return node;
}
Example #8
0
TGUINode * GUI_CreateText( float x, float y, float fieldWidth, float fieldHeight, const char * text, TFont * font ) {
    TGUINode * node = GUI_CreateNode();
    node->text = Memory_New( TGUIText );
    node->text->text = String_Duplicate( text );
    node->text->fieldWidth = fieldWidth;
    node->text->fieldHeight = fieldHeight;
    node->text->x = x;
    node->text->y = y;
    node->text->font = font;
    node->text->width = 0;
    node->text->height = font->size;
    int length = strlen( text );
    for( int i = 0; i < length; i++ ) {
        node->text->width += font->charMetrics[(unsigned int)text[i]].advanceX;
    }
    return node;
}
Example #9
0
void Octree_SplitNode( TOctreeNode * node ) {
    TVec3 center = Vec3_Middle( node->min, node->max );

    for(int i = 0; i < 8; i++) {
        node->childs[i] = Memory_New( TOctreeNode );
        node->childs[i]->split = 0;
        node->childs[i]->indices = 0;
        node->childs[i]->indexCount = 0;
    }

    node->childs[0]->min = Vec3_Set( node->min.x, node->min.y, node->min.z );
    node->childs[0]->max = Vec3_Set( center.x, center.y, center.z );

    node->childs[1]->min = Vec3_Set( center.x, node->min.y, node->min.z );
    node->childs[1]->max = Vec3_Set( node->max.x, center.y, center.z );

    node->childs[2]->min = Vec3_Set( node->min.x, node->min.y, center.z );
    node->childs[2]->max = Vec3_Set( center.x, center.y, node->max.z );

    node->childs[3]->min = Vec3_Set( center.x, node->min.y, center.z );
    node->childs[3]->max = Vec3_Set( node->max.x, center.y, node->max.z );

    node->childs[4]->min = Vec3_Set( node->min.x, center.y, node->min.z );
    node->childs[4]->max = Vec3_Set( center.x, node->max.y, center.z );

    node->childs[5]->min = Vec3_Set( center.x, center.y, node->min.z );
    node->childs[5]->max = Vec3_Set( node->max.x, node->max.y, center.z );

    node->childs[6]->min = Vec3_Set( node->min.x, center.y, center.z );
    node->childs[6]->max = Vec3_Set( center.x, node->max.y, node->max.z );

    node->childs[7]->min = Vec3_Set( center.x, center.y, center.z );
    node->childs[7]->max = Vec3_Set( node->max.x, node->max.y, node->max.z );

    node->split = true;
}
Example #10
0
void Player_Create( ) {
    if( player ) {
        Player_Free( );
        Memory_Free( player );        
    }
    
    player = Memory_New( TPlayer );
    // create main pivot
    player->pivot = Entity_Create( );
	
	// create camera
    player->cameraPivot = Entity_Create();
    Entity_MakeCamera( player->cameraPivot );
    Entity_Attach( player->cameraPivot, player->pivot );
    player->cameraPivot->localPosition = Vec3_Set( 0, 0.4, 0 );

    // add physical body
    Shape_CreateSphere( &player->shape, 1.0f );
    Body_Create( &player->body, &player->shape );
    Dynamics_AddBody( &player->body );

    player->body.position.y = 10;
    player->body.elasticity = 0.05f;

    player->cameraOffset = Vec3_Set( 0, 0.4, 0 );
    player->cameraShakeOffset = Vec3_Zero();    
    player->velocity = Vec3_Zero();
    player->destVelocity = Vec3_Zero(); 
    
    // set parameters
    player->speed = 4.5f;
    player->speedMultiplier = 1.8f;
    player->jumpStrength = 0.1f;
    player->mouseSensivity = 0.2f;
    player->yaw = 0.0f;
    player->pitch = 0.0f;
    player->maxPitch = M_PI / 2.0;
    player->pathLength = 0.0f;
    player->crouchRadius = 0.5f;
    player->standRadius = 1.0f;
    player->crouch = false;
    player->move = false;
    player->run = false;
    player->onGround = false;
	player->cameraShakeCoeff = 0.0f;
    
    
    // ==================
    // step sounds
    Player_SetSoundGroup( "data/sounds/dirt", STEP_SOIL, "data/materials/soil.mtl" );
    Player_SetSoundGroup( "data/sounds/stonestep", STEP_ROCK, "data/materials/stone.mtl" );
    Player_SetSoundGroup( "data/sounds/wood", STEP_WOOD, "data/materials/wood.mtl" );
    Player_SetSoundGroup( "data/sounds/metal", STEP_METAL, "data/materials/metal.mtl" );
    // set default step sounds
    player->stepSoundGroup = &player->stepSounds[STEP_SOIL];

	player->weapon = Weapon_Create( WEAPON_BLASTER );
	Entity_Attach( player->weapon->model, player->cameraPivot );
    
    player->interface.font = Font_LoadFromFile( "data/fonts/font3.ttf", 16 );
    player->interface.ammo = GUI_CreateText( Renderer_GetScreenResolutionWidth() - 200, Renderer_GetScreenResolutionHeight() - 200, 190, 190, "Ammo:\n", player->interface.font );
}
Example #11
0
rsdef(self *, New, RdString title) {
	self *res = Memory_New(sizeof(self));

	return *res = (self) {
		.title = title
	}, res;
Example #12
0
File: Task.c Project: tindzk/Jivai
#import "Task.h"

#define self Task

rsdef(self *, new, void *data, void (*destroy)(Instance $this)) {
	self *res = Memory_New(sizeof(self));

	res->next    = null;
	res->data    = data;
	res->destroy = destroy;

	return res;
}

def(void, destroy) {
	if (this->destroy != null) {
		this->destroy(this->data);
	}

	Memory_Destroy(this);
}

#undef self

#define self Tasks

rsdef(self, new) {
	return (self) {
		.first = null
	};
}