Originally Posted By: alibaba
If you know a way how I can keep the rendering of a panel inside a specific view, then I'd prefer using panels.

Here goes a try I did some time ago
Code:
#include <acknex.h>
#include <default.c>

#define PRAGMA_PATH "%EXE_DIR%\templates\images";
#define PRAGMA_PATH "%EXE_DIR%\templates\models";

action actIcon ()
{
	BMAP *_bmp = bmap_create ( "schaden.tga" );
	PANEL *_pan = pan_create ( "", 1 );
	pan_setwindow ( _pan, 0, 0, 0, bmap_width(_bmp), bmap_height(_bmp), _bmp, &_pan->skill_x, &_pan->skill_y );
	while ( !key_esc )
	{
		VECTOR _v;
		vec_set ( &_v, &my->x );
		vec_to_screen ( &_v, camera );
		_pan->pos_x = floor(_v.x) - bmap_width(_bmp) / 2;
		_pan->pos_y = floor(_v.y) - bmap_height(_bmp) / 2;
		var _upperX = minv ( bmap_width(_bmp), camera->pos_x + camera->size_x - _pan->pos_x );
		var _upperY = minv ( bmap_height(_bmp), camera->pos_y + camera->size_y - _pan->pos_y );
		_pan->skill_x = maxv ( 0, camera->pos_x - _pan->pos_x );
		_pan->skill_y = maxv ( 0, camera->pos_y - _pan->pos_y );
		if ( ( _upperX < 1 ) || ( _upperY < 1 ) || ( _pan->skill_x > bmap_width(_bmp) ) || ( _pan->skill_y > bmap_height(_bmp) ) )
			_pan->flags &= ~SHOW;
		else
		{
			var _winSizeX = minv ( bmap_width(_bmp) - _pan->skill_x, _upperX );
			var _winSizeY = minv ( bmap_height(_bmp) - _pan->skill_y, _upperY );
			pan_setwindow ( _pan, 1, _pan->skill_x, _pan->skill_y, _winSizeX, _winSizeY, _bmp, &_pan->skill_x, &_pan->skill_y );
			_pan->flags |= SHOW;
		}
		wait(1);
	}
}

void main ()
{
	wait(1);
	level_load ( "" );
	camera->size_x = screen_size.x - 200;
	camera->size_y = screen_size.y - 200;
	camera->pos_x = 100;
	camera->pos_y = 100;
	ent_createlayer ( "skycube+6.tga", SKY | CUBE, 1 );
	ent_create ( "pistol.mdl", vector(300,0,0), actIcon );
	def_move ();
}