Esempio n. 1
0
ICharacter* MovieClip::getTopMost(float x, float y, bool polygonTest) {
	ICharacter* pRet = NULL;
	DisplayList::reverse_iterator rit = _display_list.rbegin();
	while( rit != _display_list.rend() ) {
		MovieObject &object = rit->second;
		ICharacter* pCharacter = object._character;
		if (pCharacter && pCharacter->visible()) {
			MATRIX m;
			POINT local, world = {x,y};
			m.setInverse( object._transform );
			m.transform(local, world);
			pRet = pCharacter->getTopMost(local.x, local.y, polygonTest);
			if (pRet) {
				switch(pRet->type()) {
				case ICharacter::TYPE_BUTTON:
				case ICharacter::TYPE_MOVIE:
					return pRet;
				default:
					return this;
				}
			}
		}
        ++rit;
	}
	return NULL;
}
Esempio n. 2
0
ICharacter *World::AddCharacter(IMesh *mesh, s32 idAnimIdle, s32 idAnimWalk, f32 height)
{
	ICharacter *character = new Character(this, physics, mesh, idAnimIdle, idAnimWalk, height);
	AddTransformable(character);
	character->drop();
	return character;
}
Esempio n. 3
0
ICharacter *MovieClip::createCharacter(const ITag* tag, const PlaceObjectTag* place) {
	ICharacter *character = NULL;
	switch ( tag->code() ) {
	case TAG_DEFINE_SPRITE:
		character = new MovieClip(_owner, this, ((DefineSpriteTag*)tag)->getMovieFrames(), place);
		character->update();
		_characters.push_back(character);
		break;
	case TAG_DEFINE_BUTTON2:
		character = new Button(*this, *(DefineButton2Tag*)tag);
		_characters.push_back(character);
		break;
	case TAG_DEFINE_EDIT_TEXT:
		character = new Text(*(DefineEditTextTag*)tag, place);
		_characters.push_back(character);
		break;
	case TAG_IMPORT_ASSETS2:
		character = ((ImportAssets2Tag*)tag)->getCharacter();
		break;
	default:
		character = (DefineShapeTag*)tag;
		break;
	}
	return character;
}
Esempio n. 4
0
void			Cure::use(ICharacter &target)
{
	std::cout << "* heals " << target.getName() << "’s wounds *" << std::endl;
	AMateria::use(target);
}
Esempio n. 5
0
File: Ice.cpp Progetto: alex8092/cpp
void 		Ice::use(ICharacter& target)
{
	AMateria::use(target);
	std::cout << "* shoots an ice bolt at " << target.getName() << " *" << std::endl;
}
Esempio n. 6
0
void Ice::effect(ICharacter & target) {
	speak(std::string("* shoots an ice bolt at ") + target.getName() + " *");
}
Esempio n. 7
0
void		Cure::useMateria(ICharacter& user) {
  std::cout << "* heals " << user.getName() << "'s wounds *" << std::endl; }
Esempio n. 8
0
void Cure::effect(ICharacter & target) {
	speak(std::string("* heals ") + target.getName() + "'s wounds *");
}
Esempio n. 9
0
//Set Z for everything
void World::Update()
{
	//Update everything first
	for (int i = 0; i < capacity; i++)
	{
		ICharacter* player = players[i];
		if (player)
			player->Update();
		//set z

	}

	//Update map box objects (lol, i dont have any that move)
	//Update map circle objects (lol, i dont have any)

	//Check for collisions second
	for (int i = 0; i < capacity; i++)
	{
		ICharacter* player = players[i];
		if (player)
		{
			Collision coll;
			Circle& circle = player->circle;

			//player collision with map boxes
			Box* pBox = boxList.Begin();
			while (pBox != NULL)
			{
				if (Physics::CircleToBox(circle, *pBox, &coll))
					Physics::ResolveCollision(circle, *pBox, coll);

				//player's balls (only circles)
				BallList* pBallList = &player->ballList;
				IBall* pBall = pBallList->Begin();
				while (pBall != NULL)
				{
					Circle* pCircle = pBall->circle;
					if (pCircle != NULL && Physics::CircleToBox(*pCircle, *pBox, &coll))
						if (pBall->Hit(COLL::OBJ, NULL) == COLL::BOUNCE)
							Physics::ResolveCollision(*pCircle, *pBox, coll);
					pBallList->Next();
					pBall = pBallList->At();
				}
				boxList.Next();
				pBox = boxList.At();
			}

			//Player collision with map circles
			Circle* pCircle = circleList.Begin();
			while (pCircle != NULL)
			{
				if (Physics::CircleToCircle(circle, *pCircle, &coll))
					Physics::ResolveCollision(circle, *pCircle, coll);

				//player's balls
				BallList* pBallList = &player->ballList;
				IBall* pBall = pBallList->Begin();
				while (pBall != NULL)
				{
					Circle* pCircle2 = pBall->circle;
					Box* pBox = pBall->box;

					//Note at least one of these hitboxes is null
					if ((pBox != NULL && Physics::CircleToBox(*pCircle, *pBox, &coll)) ||
						(pCircle2 != NULL && Physics::CircleToCircle(*pCircle, *pCircle2, &coll)))
					{
						if (pBall->Hit(COLL::OBJ, NULL) == COLL::BOUNCE)
						{
							if (pBox != NULL)
								Physics::ResolveCollision(*pCircle, *pBox, coll);
							else if (pCircle2 != NULL)
								Physics::ResolveCollision(*pCircle, *pCircle2, coll);
						}
					}
					pBallList->Next();
					pBall = pBallList->At();
				}
				circleList.Next();
				pCircle = circleList.At();
			}

			//player-player collisions
			for (int n = i + 1; n < capacity; n++)
			{
				ICharacter* player2 = players[n];
				if (player2)
				{
					//player to player collision
					Circle& circle2 = player2->circle;
					if (Physics::CircleToCircle(circle, circle2, &coll))
						Physics::ResolveCollision(circle, circle2, coll);

					//player's balls to player collisions
					BallList* pBallList = &player->ballList;
					IBall* pBall = pBallList->Begin();
					while (pBall != NULL)
					{
						Circle* pCircle = pBall->circle;
						Box* pBox = pBall->box;
						COLL type;

						//Note at least one of these hitboxes is null
						if ((pBox != NULL && Physics::CircleToBox(circle2, *pBox, &coll)) ||
							(pCircle != NULL && Physics::CircleToCircle(circle2, *pCircle, &coll)))
						{
							if (pBall->Hit(COLL::HIT, player2) == COLL::BOUNCE)
							{
								if (pBox != NULL)
									Physics::ResolveCollision(circle2, *pBox, coll);
								else if (pCircle != NULL)
									Physics::ResolveCollision(circle2, *pCircle, coll);
							}
						}

						//to player's balls collisions
						BallList* pBallList2 = &player2->ballList;
						IBall* pBall2 = pBallList2->Begin();
						while (pBall2 != NULL)
						{
							Circle* pCircle2 = pBall2->circle;
							Box* pBox2 = pBall2->box;

							if (pBox != NULL)
							{
								if (pBox2 != NULL && Physics::BoxToBox(*pBox, *pBox2))
								{
									pBall->Hit(COLL::BALL, NULL);
									pBall2->Hit(COLL::BALL, NULL);
								}
								else if (pCircle2 != NULL && Physics::CircleToBox(*pCircle2, *pBox, &coll))
									if (pBall->Hit(COLL::BALL, NULL) == COLL::BOUNCE && pBall2->Hit(COLL::BALL, NULL) == COLL::BOUNCE)
										Physics::ResolveCollision(*pCircle2, *pBox, coll);
							}
							else if (pCircle != NULL)
							{
								if (pBox2 != NULL && Physics::CircleToBox(*pCircle, *pBox2, &coll))
								{
									if (pBall->Hit(COLL::BALL, NULL) == COLL::BOUNCE && pBall2->Hit(COLL::BALL, NULL) == COLL::BOUNCE)
										Physics::ResolveCollision(*pCircle, *pBox2, coll);
								}
								else if (pCircle2 != NULL && Physics::CircleToCircle(*pCircle, *pCircle2, &coll))
									if (pBall->Hit(COLL::BALL, NULL) == COLL::BOUNCE && pBall2->Hit(COLL::BALL, NULL) == COLL::BOUNCE)
										Physics::ResolveCollision(*pCircle, *pCircle2, coll);
							}

							if ((pBox != NULL && Physics::CircleToBox(circle2, *pBox, &coll)) ||
								(pCircle != NULL && Physics::CircleToCircle(circle2, *pCircle, &coll)))
							{
								type = pBall->Hit(COLL::HIT, player2);
								if (type == COLL::BOUNCE)
								{
									if (pBox != NULL)
										Physics::ResolveCollision(circle2, *pBox, coll);
									else if (pCircle != NULL)
										Physics::ResolveCollision(circle2, *pCircle, coll);
								}
							}
							pBallList2->Next();
							pBall2 = pBallList->At();
						}
						pBallList->Next();
						pBall = pBallList->At();
					}
				}
			}
		}
	}
}