コード例 #1
0
ファイル: bullet_class.c プロジェクト: ChunHungLiu/cdogs-sdl
static bool HitItemFunc(TTileItem *ti, void *data)
{
	HitItemData *hData = data;
	if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti))
	{
		goto bail;
	}
	int targetUID = -1;
	hData->HitType = GetHitType(ti, hData->Obj, &targetUID);
	Damage(
		hData->Obj->vel, hData->Obj->bulletClass->Power,
		hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID,
		ti->kind, targetUID,
		hData->Obj->bulletClass->Special);
	if (hData->Obj->tileItem.SoundLock <= 0)
	{
		hData->Obj->tileItem.SoundLock += SOUND_LOCK_TILE_OBJECT;
	}
	if (ti->SoundLock <= 0)
	{
		ti->SoundLock += SOUND_LOCK_TILE_OBJECT;
	}
	if (hData->Obj->specialLock <= 0)
	{
		hData->Obj->specialLock += SPECIAL_LOCK;
	}

bail:
	// Whether to produce multiple hits from the same TMobileObject
	return hData->MultipleHits;
}
コード例 #2
0
ファイル: bullet_class.c プロジェクト: NSYXin/cdogs-sdl
static bool HitItemFunc(TTileItem *ti, void *data)
{
	HitItemData *hData = data;
	if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti))
	{
		goto bail;
	}
	int targetUID = -1;
	switch (ti->kind)
	{
	case KIND_CHARACTER:
		hData->HitType = HIT_FLESH;
		targetUID = ((const TActor *)CArrayGet(&gActors, ti->id))->uid;
		break;
	case KIND_OBJECT:
		hData->HitType = HIT_OBJECT;
		targetUID = ((const TObject *)CArrayGet(&gObjs, ti->id))->uid;
		break;
	default:
		CASSERT(false, "cannot damage target kind");
		break;
	}
	if (hData->Obj->soundLock > 0 ||
		!HasHitSound(
		hData->Obj->bulletClass->Power, hData->Obj->flags, hData->Obj->PlayerUID,
		ti->kind, targetUID, hData->Obj->bulletClass->Special, true))
	{
		hData->HitType = HIT_NONE;
	}
	Damage(
		hData->Obj->vel, hData->Obj->bulletClass->Power,
		hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID,
		ti->kind, targetUID,
		hData->Obj->bulletClass->Special);
	if (hData->Obj->soundLock <= 0)
	{
		hData->Obj->soundLock += SOUND_LOCK_MOBILE_OBJECT;
	}
	if (hData->Obj->specialLock <= 0)
	{
		hData->Obj->specialLock += SPECIAL_LOCK;
	}

bail:
	// Whether to produce multiple hits from the same TMobileObject
	return hData->MultipleHits;
}