ERR InitTestController()
{
    ship = NewEntity("game/entities/ship.entity");
    if(ship == NULL)
        return 1;
    flames = NewEntity("game/entities/flames.entity");
    if(flames == NULL)
    {
        FreeEntity(ship);
        return 1;
    }
    yoshi = NewEntity("game/entities/test.entity");
    if(yoshi == NULL)
    {
        FreeEntity(ship);
        FreeEntity(flames);
        return 1;
    }

    bolt = NewEntity("game/entities/bolt.entity");

    ship->center_x          = 120;
    ship->center_y          = 120;
    ship->sprite->z_index   = 3;

    yoshi->center_x         = 220;
    yoshi->center_y         = 120;
    yoshi->a_speed          = 2;
    yoshi->x_speed          = 0;
    yoshi->y_speed          = 0;
    yoshi->sprite->z_index  = 4;
    
    UpdateEntity(ship);
    UpdateEntity(flames);
    UpdateEntity(yoshi);

    bolt->sprite->z_index   = 1;

    bolts = NewList();

    visual_debug = NewPixelMap(640, 480, (Vector){320, 240}, 10);
    ClearPMap(visual_debug);

    flags = (INITIALISED | CONTINUE | UPDATE | DRAW);
    return 0;
}
Beispiel #2
0
/**
 * Creates and sets up the hero entity
 * @return The hero entity created
 */
Entity_T *SetupHero()
{
	int i, x;
	const GLfloat SPRITE_WIDTH = 32.0f / 128;
	const GLfloat SPRITE_HEIGHT = 48.0f / 192;
	Rect frames[20];
	Animation_T animations[MAX_ANIMATIONS];
	Entity_T *e = NewEntity();
	e->currentAnimation = 0;
	e->currentFrame = 0;
	e->sprite = NewSprite();
	e->body = cpBodyNew(100.0f, 100.0f);
	e->size.x = TILE_WIDTH;
	e->size.y = 1.5f * TILE_HEIGHT;
	e->shape = cpBoxShapeNew(e->body, e->size.x/2, e->size.y/2);
	

	for(i = 0;i < 20;i++)
	{
		frames[i].x = (i % 4) * SPRITE_WIDTH;
		frames[i].y = 1.0f - (i/4+1) * SPRITE_HEIGHT;
		frames[i].w = SPRITE_WIDTH;
		frames[i].h = SPRITE_HEIGHT;
	}
	
	for(x = 0;x < 4;x++)
	{
		animations[x].numFrames = 1;
		animations[x].frames[0] = x*4;
		animations[x].frameLengths[0] = 100;
		animations[x].flags = ANIMFLAG_NONE;
	}

	for(x = 4;x < 8;x++){
		animations[x].numFrames = 4;
		for(i = 0;i < 4;i++){
			animations[x].frames[i] = (x-4)*4+i;
			animations[x].frameLengths[i] = 100;
		}
		animations[x].flags = ANIMFLAG_NONE;
	}
	SetupSprite(e->sprite, "hero.png", frames, 20, animations, 8);
	//Set up the hero's inner light
	e->light = NewLight();
	e->light->brightness = 0.75f;
	e->light->color.x = 1.0f;
	e->light->color.y = .95f;
	e->light->color.z = 0.5f;
	e->light->span = TILE_WIDTH / 2;
	e->light->offset.x = TILE_WIDTH / 2;
	e->light->offset.y = 0;
	SET_FLAG(e->flags, ENTFLAG_LIGHT);
	e->next = NULL;
	return e;
}
Beispiel #3
0
Entity_T *SetupMonster(int monster)
{
	int i, x;
	const GLfloat SPRITE_WIDTH = 32.0f / 128;
	const GLfloat SPRITE_HEIGHT = 48.0f / 192;
	Rect frames[20];
	Animation_T animations[MAX_ANIMATIONS];
	Entity_T *e = NewEntity();
	e->currentAnimation = 0;
	e->currentFrame = 0;
	e->sprite = NewSprite();
	e->body = cpBodyNew(1.0f, 1.0f);
	e->size.x = 3* TILE_WIDTH;
	e->size.y = 3 * 1.5f * TILE_HEIGHT;
	e->shape = cpBoxShapeNew(e->body, e->size.x/2, e->size.y/2);
	
	for(i = 0;i < 20;i++)
	{
		frames[i].x = (i % 4) * SPRITE_WIDTH;
		frames[i].y = 1.0f - (i/4+1) * SPRITE_HEIGHT;
		frames[i].w = SPRITE_WIDTH;
		frames[i].h = SPRITE_HEIGHT;
	}
	
	for(x = 0;x < 4;x++)
	{
		animations[x].numFrames = 1;
		animations[x].frames[0] = x*4;
		animations[x].frameLengths[0] = 100;
		animations[x].flags = ANIMFLAG_NONE;
	}

	for(x = 4;x < 8;x++){
		animations[x].numFrames = 4;
		for(i = 0;i < 4;i++){
			animations[x].frames[i] = (x-4)*4+i;
			animations[x].frameLengths[i] = 100;
		}
		animations[x].flags = ANIMFLAG_NONE;
	}
	//TODO: Kludgy as heck, redo later.
	switch(monster){
	case 0:
		SetupSprite(e->sprite, "monster0.png", frames, 20, animations, 8);
		break;
	case 1:
		SetupSprite(e->sprite, "monster1.png", frames, 20, animations, 8);
		break;
	}
	return e;
}
Beispiel #4
0
//--------------------------------------------------------------------------
LoadEntResult Server::LoadEntity(const VeChar8* pcName,
	const VeChar8* pcSearchIndex, EntityS** ppkOut)
{
	VeUInt32 u32Type = _EntNameToType(pcName);
	if(u32Type == VE_INFINITE)
	{
		if(ppkOut) *ppkOut = NULL;
		return LOAD_ENT_TYPE_NOT_EXIST;
	}
	else
	{
		if(u32Type >= m_kEntityCacheArray.Size())
		{
			m_kEntityCacheArray.Resize(u32Type + 1);
		}
		EntityCache& kCache = m_kEntityCacheArray[u32Type];
		VeStringMap<EntityS*>::iterator it = kCache.m_kIndexMap.Find(pcSearchIndex);
		if(it)
		{
			if(ppkOut) *ppkOut = *it;
			return LOAD_ENT_EXIST;
		}
		else
		{
			EntityS* pkEnt = NewEntity(pcName, pcSearchIndex);
			if(pkEnt)
			{
				if(pkEnt->OnLoad())
				{
					pkEnt->m_pkCache = &kCache;
					kCache.m_kIndexMap[pcSearchIndex] = pkEnt;
					kCache.m_kWildEntities.AttachBack(pkEnt->m_kServerNode);
					if(ppkOut) *ppkOut = pkEnt;
					return LOAD_ENT_S_OK;
				}
				else
				{
					VE_SAFE_DELETE(pkEnt);
					if(ppkOut) *ppkOut = NULL;
					return LOAD_ENT_E_FAIL;
				}
			}
			else
			{
				if(ppkOut) *ppkOut = NULL;
				return LOAD_ENT_E_FAIL;
			}
		}
	}
}
Beispiel #5
0
Entity_T *SetupObject(int object)
{
	int i, x;
	const GLfloat SPRITE_WIDTH = 32.0f / 128;
	const GLfloat SPRITE_HEIGHT = 48.0f / 192;
	Rect frames[20];
	Animation_T animations[MAX_ANIMATIONS];
	Entity_T *e = NewEntity();
	e->currentAnimation = 0;
	e->currentFrame = 0;
	e->sprite = NewSprite();
	e->body = cpBodyNew(1.0f, 1.0f);
	e->size.x = TILE_WIDTH;
	e->size.y = 1.5f * TILE_HEIGHT;
	e->shape = cpBoxShapeNew(e->body, e->size.x/2, e->size.y/2);
	
	frames[0].x = 0;
	frames[0].y = 0;
	frames[0].w = 1;
	frames[0].h = 1;
	
	animations[0].numFrames = 1;
	animations[0].frames[0] = 0;
	animations[0].frameLengths[0] = 100;
	animations[0].flags = ANIMFLAG_NONE;

	//TODO: Kludgy as heck, redo later.
	switch(object){
	case 0:
		SetupSprite(e->sprite, "torch.png", frames, 1, animations, 1);
		e->light = NewLight();
		e->light->color.x = 1.0f;
		e->light->color.y = 0.0f;
		e->light->color.z = 1.0f;
		e->light->brightness = 0.75f;
		e->light->span = TILE_WIDTH * .75f;
		e->light->offset.x = TILE_WIDTH / 2;
		e->light->offset.y = 0;
		SET_FLAG(e->flags, ENTFLAG_LIGHT);
		e->currentAnimation = 0;
		e->currentFrame = 0;
		e->dir = ENTDIR_DOWN;
		break;
	}
	return e;
}
Beispiel #6
0
//--------------------------------------------------------------------------
void ServerAgent::EntityUpdate(BitStream& kStream)
{
	VEString kName;
	kStream >> kName;
	EntityC* pkEntity(NULL);
	VeStringMap<EntityC*>::iterator it = m_kEntityMap.Find(kName);
	if(it)
	{
		pkEntity = *it;
	}
	else
	{
		pkEntity = NewEntity(kName);
		m_kEntityMap[kName] = pkEntity;
		m_kEntityList.AttachBack(pkEntity->m_kNode);
		
	}
	pkEntity->Update(kStream);
	if(!it) pkEntity->OnLoad();
	VeDebugOutputString("EntityUpdated");
}
Beispiel #7
0
TurtleShell* NewTurtleShell ()
{

	Entity *ent = NewEntity ();
	TurtleShell *self = TURTLE_SHELL(ent);

	ent->type = ET_BULLET | ET_SHELL;
	ent->collWith = ET_ENEMY | ET_PLAYER | ET_MAP | ET_BULLET;

	// callbacks
	ent->Update = UpdateCb;
	ent->Render = RenderCb;
	ent->HandleCollision = HandleCollision;

	TURTLE_SHELL (ent)->animTimer=0;

	ent->bounds.type = BT_AABB;
	ent->bounds.half = Vec2f(20,8);


	return self;
}
Beispiel #8
0
void SpawnHeavy(Entity *owner, int x, int y, int weapon, int group)
{
	Entity *newent = NULL;
	newent = NewEntity();


	{
		fprintf(stderr,"Unable to generate enemy entity; %s",SDL_GetError());
		return;
	}
	strcpy(newent->EntName,"MinorShip\0");
	newent->sprite = LoadSprite("images/enemies/heas.ysheet.png",48,48);
	SDL_SetColorKey(newent->sprite->image, SDL_SRCCOLORKEY , SDL_MapRGB(newent->sprite->image->format, 0,0,0));
	newent->owner = owner;
	//	newent->update = UpdateEnemy;
	newent->think = HeavyThink;
	//newent->UpdateRate = 45;
	newent->ThinkRate = 45;
	newent->Unit_Type = group;
	newent->frame = 0;
	newent->fcount = 0;
	newent->frate = 1;
	newent->state = ST_IDLE;
	newent->healthmax = 20;
	newent->health = 20;
	newent->takedamage = 1;
	newent->s.x = x;
	newent->s.y = y;
	newent->currentweapon = 0;
	newent->v.x = 0;
	newent->v.y = 0;
	newent->enemy = 1;
	newent->Boundingbox.x = 8;
	newent->Boundingbox.y = 12;
	newent->Boundingbox.w = 36;
	newent->Boundingbox.h = 26;

}
Beispiel #9
0
void SpawnNPCGeneric(int x, int y,int r,Object *obj)
{
  Entity *self;
  char *buf;
  Progress *p = NULL;
  NPC *npc;
  Monster *monster;
  self = NewEntity();
  if(self == NULL)return;
  if(obj != NULL)
  {
    self->objindex = obj->id;
    p = GetProgressByIndexMap(level.name,obj->id);
    if((p != NULL)&&(strcmp(p->value,"dead")==0))
    {
      FreeEntity(self);
      return;
    }
  }
  else strcpy(self->name,"npc");
  if(!GetObjKey(obj->data,"name",&buf))
  {
    FreeEntity(self);
    return;
  }
  strcpy(self->name,buf);
  npc = GetNPCByName(self->name);
  if(npc == NULL)
  {
    fprintf(stderr,"unable to find NPC %s!",self->name);
    FreeEntity(self);
    return;
  }
  monster = GetMonsterByName(npc->monster);
  if(monster == NULL)
  {
    fprintf(stderr,"failed to retreive monster data for %s!\n",self->name);
    FreeEntity(self);
    return;
  }
  self->radius = monster->radius;
  self->p.x = x;
  self->p.y = y;
  self->p.z = 0;
  self->r.z = r;
  self->s.x = self->s.y = self->s.z = monster->scale;
  self->think = NPCThink;
  self->ThinkRate = 50;
  self->update = UpdateNPC;
  self->UpdateRate = 30;
  self->activate = NPCTalk;
  self->hit = NPCAlert;/*bad touch*/
  self->die = NPCDie;
  self->texture = LoadSprite(monster->sprite,monster->sx,monster->sy);
  self->box.w = 1;
  self->box.d = 1;
  self->box.h = 1;
  self->box.x = self->box.w/2;
  self->box.y = self->box.h/2;
  self->box.z = self->box.d/2;
  self->shaderProg = 0;
  self->team = 0;
  memcpy(self->data,obj->data,sizeof(obj->data));
  self->solid = 1;
  self->frame = 0;
  self->sightblock = 0;
  self->sightdist = monster->sightdistance;
  self->sightrange = monster->sightrange;
  self->takesdamage = 1;
  self->attackrange = 30;
  self->health = self->healthmax = monster->health;
  self->stamina = self->staminamax = monster->stamina;
  self->mana = self->manamax = monster->mana;
  self->accel = 0.25;         /*to be adjusted*/
  self->speed = 5 * monster->movespeed;            /*to be calculated*/
  self->state = MS_Idle;
  self->attackspeed = monster->attackspeed;
  if(self->attackspeed == 0)self->attackspeed = 1;
  SetMonsterCombatStats(self,monster,0);
}
Beispiel #10
0
void SpawnMonsterGeneric(int x, int y,int r,Object *obj)
{
  Entity *self;
  char *buf;
  Progress *p = NULL;
  Monster *monster;
  self = NewEntity();
  if(self == NULL)return;
  if(obj != NULL)
  {
    strcpy(self->name,obj->name);
    self->objindex = obj->id;
    p = GetProgressByIndexMap(level.name,obj->id);
    if((p != NULL)&&(strcmp(p->value,"dead")==0))
    {
      FreeEntity(self);
      return;
    }
  }
  else strcpy(self->name,"monster");
  if(!GetObjKey(obj->data,"monster",&buf))
  {
    FreeEntity(self);
    return;
  }
  sscanf(buf,"%s",self->name);
  monster = GetMonsterByName(self->name);
  if(monster == NULL)
  {
    fprintf(stderr,"failed to retreive monster data for %s!\n",self->name);
    FreeEntity(self);
    return;
  }
  self->radius = monster->radius;
  self->p.x = x;
  self->p.y = y;
  self->p.z = 0;
  self->r.z = r;
  self->s.x = self->s.y = self->s.z = monster->scale;
  self->think = MonsterThink;
  self->ThinkRate = 50;
  self->update = UpdateMonster;
  self->UpdateRate = 30;
  self->activate = MonsterAlert;
  self->touch = MonsterAlert;
  self->hit = MonsterAlert;
  self->die = MonsterDie;
  self->texture = LoadSprite(monster->sprite,monster->sx,monster->sy);
  self->shaderProg = 0;
  if(!GetObjKey(obj->data,"neutral",&buf))
    self->team = 2;
  else self->team = 0;
  memcpy(self->data,obj->data,sizeof(obj->data));
  self->solid = 1;
  self->frame = 0;
  self->sightblock = 0;
  self->sightdist = monster->sightdistance;
  self->sightrange = monster->sightrange;
  self->takesdamage = 1;
  self->health = self->healthmax = monster->health;
  self->stamina = self->staminamax = monster->stamina;
  self->mana = self->manamax = monster->mana;
  self->accel = 0.25;         /*to be adjusted*/
  self->speed = 5 * monster->movespeed;            /*to be calculated*/
  self->attackspeed = monster->attackspeed;
  self->guardstrength = monster->guardstrength;
  self->guardrange = monster->guardrange;
  if(self->attackspeed == 0)self->attackspeed = 1;
  SetMonsterCombatStats(self,monster,0);
  self->state = MS_Idle;
}