Ejemplo n.º 1
0
static void DestroyObject(
	TObject *o, const int flags, const int playerUID, const int uid)
{
	o->Health = 0;

	const Vec2i realPos = Vec2iNew(o->tileItem.x, o->tileItem.y);

	if (!gCampaign.IsClient)
	{
		// Update objective
		UpdateMissionObjective(&gMission, o->tileItem.flags, OBJECTIVE_DESTROY);
		// Extra score if objective
		if ((o->tileItem.flags & TILEITEM_OBJECTIVE) && playerUID >= 0)
		{
			GameEvent e = GameEventNew(GAME_EVENT_SCORE);
			e.u.Score.PlayerUID = playerUID;
			e.u.Score.Score = OBJECT_SCORE;
			GameEventsEnqueue(&gGameEvents, e);
		}

		// Weapons that go off when this object is destroyed
		const Vec2i fullPos = Vec2iReal2Full(realPos);
		for (int i = 0; i < (int)o->Class->DestroyGuns.size; i++)
		{
			const GunDescription **g = CArrayGet(&o->Class->DestroyGuns, i);
			GunFire(*g, fullPos, 0, 0, flags, playerUID, uid, true, false);
		}

		// A wreck left after the destruction of this object
		// TODO: doesn't need to be network event
		GameEvent e = GameEventNew(GAME_EVENT_ADD_BULLET);
		e.u.AddBullet.UID = MobObjsObjsGetNextUID();
		strcpy(e.u.AddBullet.BulletClass, "fireball_wreck");
		e.u.AddBullet.MuzzlePos = Vec2i2Net(fullPos);
		e.u.AddBullet.MuzzleHeight = 0;
		e.u.AddBullet.Angle = 0;
		e.u.AddBullet.Elevation = 0;
		e.u.AddBullet.Flags = 0;
		e.u.AddBullet.PlayerUID = -1;
		e.u.AddBullet.ActorUID = -1;
		GameEventsEnqueue(&gGameEvents, e);
	}

	SoundPlayAt(&gSoundDevice, gSoundDevice.wreckSound, realPos);

	// Turn the object into a wreck, if available
	if (o->Class->Wreck.Pic)
	{
		o->tileItem.flags = TILEITEM_IS_WRECK;
	}
	else
	{
		ObjDestroy(o->tileItem.id);
	}

	// Update pathfinding cache since this object could have blocked a path
	// before
	PathCacheClear(&gPathCache);
}
Ejemplo n.º 2
0
static void FireGuns(const TMobileObject *obj, const CArray *guns)
{
	const Vec2i fullPos = Vec2iNew(obj->x, obj->y);
	const double angle = Vec2iToRadians(obj->vel);
	for (int i = 0; i < (int)guns->size; i++)
	{
		const GunDescription **g = CArrayGet(guns, i);
		GunFire(
			*g, fullPos, obj->z, angle, obj->flags, obj->PlayerUID, obj->ActorUID,
			true, false);
	}
}
Ejemplo n.º 3
0
//checks the controls and how the affect the player
int PlayerCheckControls(int SpriteNum) //returns. 0 - nothing, 1 - a bullet was instantiated
{
	joykey = joypad(); //get joypad
	//printf("%d", joykey);

	//check movement
	if (joykey == 4) //up
	{
		if (P_Strafing)
		{
			PlayerMoveUp(0, SpriteNum);
		}
		else
		{
			PlayerMoveUp(1, SpriteNum);
		}
	}
	if (joykey == 8) //down
	{
		if (P_Strafing)
		{
			PlayerMoveDown(0, SpriteNum);
		}
		else
		{
			PlayerMoveDown(1, SpriteNum);
		}
	}
	if (joykey == 2) //left
	{
		if (P_Strafing)
		{
			PlayerMoveLeft(0, SpriteNum);
		}
		else
		{
			PlayerMoveLeft(1, SpriteNum);
		}
	}
	if (joykey == 1) //right
	{
		if (P_Strafing)
		{
			PlayerMoveRight(0, SpriteNum);
		}
		else
		{
			PlayerMoveRight(1, SpriteNum);
		}
	}
	if (joykey == 5) //northeast
	{
		if (P_Strafing)
		{
			PlayerMoveUp(0, SpriteNum);
			PlayerMoveRight(0, SpriteNum);
		}
		else
		{
			PlayerMoveUp(1, SpriteNum);
			PlayerMoveRight(1, SpriteNum);
		}
	}
	if (joykey == 9) //southeast
	{
		if (P_Strafing)
		{
			PlayerMoveDown(0, SpriteNum);
			PlayerMoveRight(0, SpriteNum);
		}
		else
		{
			PlayerMoveDown(1, SpriteNum);
			PlayerMoveRight(1, SpriteNum);
		}
	}
	if (joykey == 10) //southwest
	{
		if (P_Strafing)
		{
			PlayerMoveDown(0, SpriteNum);
			PlayerMoveLeft(0, SpriteNum);
		}
		else
		{
			PlayerMoveDown(1, SpriteNum);
			PlayerMoveLeft(1, SpriteNum);
		}
	}
	if (joykey == 6) //northwest
	{
		if (P_Strafing)
		{
			PlayerMoveUp(0, SpriteNum);
			PlayerMoveLeft(0, SpriteNum);
		}
		else
		{
			PlayerMoveUp(1, SpriteNum);
			PlayerMoveLeft(1, SpriteNum);
		}
	}

	//bullets and movement
	if (joykey == 16) //A only
	{
		return GunFire(P_PosX, P_PosY, P_Direction);
	}
	if (joykey == 20) //A and up
	{
		if (P_Strafing)
		{
			PlayerMoveUp(0, SpriteNum);
		}
		else
		{
			PlayerMoveUp(1, SpriteNum);
		}
		return GunFire(P_PosX, P_PosY, P_Direction);
	}
	if (joykey == 24) //A and down
	{
		if (P_Strafing)
		{
			PlayerMoveDown(0, SpriteNum);
		}
		else
		{
			PlayerMoveDown(1, SpriteNum);
		}
		return GunFire(P_PosX, P_PosY, P_Direction);
	}
	if (joykey == 17) //A and right
	{
		if (P_Strafing)
		{
			PlayerMoveRight(0, SpriteNum);
		}
		else
		{
			PlayerMoveRight(1, SpriteNum);
		}
		return GunFire(P_PosX, P_PosY, P_Direction);
	}
	if (joykey == 18) //A and left
	{
		if (P_Strafing)
		{
			PlayerMoveLeft(0, SpriteNum);
		}
		else
		{
			PlayerMoveLeft(1, SpriteNum);
		}
		return GunFire(P_PosX, P_PosY, P_Direction);
	}

	//strafing
	if (joykey == 32) //B only
	{
		if (P_StrafeToggle)
		{
			if (P_Strafing)
			{
				P_Strafing = 0;
			}
			else
			{
				P_Strafing = 1;
			}
			P_StrafeToggle = 0;
		}
	}
	if (joykey == 36) //up and B
	{
		if (P_StrafeToggle)
		{
			if (P_Strafing)
			{
				P_Strafing = 0;
			}
			else
			{
				P_Strafing = 1;
			}
			P_StrafeToggle = 0;
		}
		PlayerMoveUp(0);
	}
	if (joykey == 40) //down and B
	{
		if (P_StrafeToggle)
		{
			if (P_Strafing)
			{
				P_Strafing = 0;
			}
			else
			{
				P_Strafing = 1;
			}
			P_StrafeToggle = 0;
		}
		PlayerMoveDown(0);
	}
	if (joykey == 33) //right and B
	{
		if (P_StrafeToggle)
		{
			if (P_Strafing)
			{
				P_Strafing = 0;
			}
			else
			{
				P_Strafing = 1;
			}
			P_StrafeToggle = 0;
		}
		PlayerMoveRight(0);
	}
	if (joykey == 34) //left and B
	{
		if (P_StrafeToggle)
		{
			if (P_Strafing)
			{
				P_Strafing = 0;
			}
			else
			{
				P_Strafing = 1;
			}
			P_StrafeToggle = 0;
		}
		PlayerMoveLeft(0);
	}
	//reset strafe toggle
	if ((joykey != 32) && (joykey != 36) && (joykey != 40) && (joykey != 3) && (joykey != 34))
	{
		P_StrafeToggle = 1;
	}
	return 0;
}