Example #1
0
int BulletCreate(char *id_str, FVector2 *pos, FVector2 *vct, float r, u_int target, sParam *param, int level, float powofs)
{
	char id_param[ID_MAXLEN];

	sParam *objParam = ObjGetSetupParam(id_str);
	ASSERT(objParam);

	int maxlevel = ParamGetReal(objParam, "maxlevel");
	if(level > maxlevel) level = maxlevel;
	
	for(int i = 1; ; i += 1)
	{
		sprintf(id_param, "%d.shot_pos%d", level, i);
		if(!ParamIsExists(objParam, id_param)) break;
		
		FVector3 *p = ParamGetFVec3(objParam, id_param);
		FVector2 v;
		v.x = p->x;
		v.y = p->y;
		MathRotateXY(&v, r);
		AddV2d(&v, &v, pos);

		StkMakeFrame();
		StkPushP(param);							// 0
		StkPushP(&v);								// 1
		StkPushP(vct);								// 2
		StkPushF(NormalAngle(r + ANG2RAD(p->z)));	// 3
		StkPushF(powofs);							// 4
		ObjCreate(id_str, OBJ_SHOT, objProc, level, target);
		StkDelFrame();
	}

	sprintf(id_param, "%d.interval", level);
	return ParamGetReal(objParam, id_param);
}
Example #2
0
void SpriteSetup(Sprite *spr, char *name, sParam *param)
{
	char id_str[ID_MAXLEN];
	FVector2 *value;

	sprintf(id_str, "%s.uv", name);
	value = ParamGetFVec2(param, id_str);
	ASSERT(value);
	spr->uv = *value;
	
	sprintf(id_str, "%s.size", name);
	value = ParamGetFVec2(param, id_str);
	ASSERT(value);
	spr->size = *value;

	sprintf(id_str, "%s.pos", name);
	value = ParamGetFVec2(param, id_str);
	ASSERT(value);
	spr->pos = *value;

	spr->center = FVec2Zero;
	sprintf(id_str, "%s.center", name);
	if(ParamIsExists(param, id_str))
	{
		spr->center = *ParamGetFVec2(param, id_str);
	}

	spr->scale = FVec2One;
	spr->col = RGBAWhite;
	spr->blend = GRP_BLEND_NORMAL;

	spr->rot = 0.0f;
	spr->prio = PRIO_COCKPIT;
	sprintf(id_str, "%s.disp", name);
	spr->disp = ParamIsExists(param, id_str) ? ParamGetReal(param, id_str) : TRUE;
}
Example #3
0
static int spriteProc(sTaskBody *body, int msg, int lParam, int rParam)
{
	int res = 0;
	SpriteVar *var = (SpriteVar *)TaskGetVar(body, sizeof(SpriteVar), MEM_APP);
	switch(msg)
	{
	case MSG_CREATE:
		{
			char *name = (char *)StkRefFrameP(0);
			var->obj = (Sprite *)StkRefFrameP(1);
			sParam *param = (sParam *)StkRefFrameP(2);
			int delay = StkRefFrameI(3);

			char id_str[ID_MAXLEN];

			sprintf(id_str, "%s.delay", name);
			delay += ParamGetReal(param, id_str) * FRAME_RATE;
			if(delay > 0) TaskSleep(body, delay);
			sprintf(id_str, "%s.frame", name);
			var->frame = ParamGetReal(param, id_str) * FRAME_RATE;

			sprintf(id_str, "%s.slow", name);
			var->slow = ParamGetReal(param, id_str);

			sprintf(id_str, "%s.start", name);
			if(ParamIsExists(param, id_str))
			{
				var->pos_start = *ParamGetFVec2(param, id_str);
			}
			else
			{
				var->pos_start = var->obj->pos;
			}

			sprintf(id_str, "%s.end", name);
			if(ParamIsExists(param, id_str))
			{
				var->pos_end = *ParamGetFVec2(param, id_str);
			}
			else
			{
				var->pos_end = var->obj->pos;
			}
			var->obj->pos = var->pos_start;

			sprintf(id_str, "%s.s_sc", name);
			if(ParamIsExists(param, id_str))
			{
				var->scale_start = *ParamGetFVec2(param, id_str);
			}
			else
			{
				var->scale_start = var->obj->scale;
			}

			sprintf(id_str, "%s.e_sc", name);
			if(ParamIsExists(param, id_str))
			{
				var->scale_end = *ParamGetFVec2(param, id_str);
			}
			else
			{
				var->scale_end = var->obj->scale;
			}
			var->obj->scale = var->scale_start;
		}
		break;

	case MSG_KILL:
		{
		}
		break;

	case MSG_STEP:
		{
			var->count += 1;
			float d = (float)var->count / (float)var->frame;

			if(var->slow) d = d * d;
			else          d = (2.0f - d) * d;
			var->obj->pos.x = var->pos_start.x + (var->pos_end.x - var->pos_start.x) * d;
			var->obj->pos.y = var->pos_start.y + (var->pos_end.y - var->pos_start.y) * d;
			var->obj->scale.x = var->scale_start.x + (var->scale_end.x - var->scale_start.x) * d;
			var->obj->scale.y = var->scale_start.y + (var->scale_end.y - var->scale_start.y) * d;

			res = (var->count == var->frame);
		}
		break;

		
	case MSG_GAME_TITLE_SKIP_EFFECT:
		{
			TaskAwake(body);
			var->count = var->frame - 1;
		}
		break;
	}
	return res;
}