本文整理汇总了C++中Vec2iZero函数的典型用法代码示例。如果您正苦于以下问题:C++ Vec2iZero函数的具体用法?C++ Vec2iZero怎么用?C++ Vec2iZero使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Vec2iZero函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UIObjectCreate
static UIObject *CreateAddKeyObjs(Vec2i pos, EditorBrush *brush)
{
UIObject *o2;
UIObject *c = UIObjectCreate(UITYPE_CONTEXT_MENU, 0, pos, Vec2iZero());
UIObject *o = UIObjectCreate(
UITYPE_CUSTOM, 0,
Vec2iZero(), Vec2iNew(TILE_WIDTH + 4, TILE_HEIGHT + 4));
o->ChangeFunc = BrushSetBrushTypeAddKey;
o->u.CustomDrawFunc = DrawKey;
o->OnFocusFunc = ActivateIndexedEditorBrush;
o->OnUnfocusFunc = DeactivateIndexedEditorBrush;
pos = Vec2iZero();
int width = 4;
for (int i = 0; i < KEY_COUNT; i++)
{
o2 = UIObjectCopy(o);
o2->IsDynamicData = 1;
CMALLOC(o2->Data, sizeof(IndexedEditorBrush));
((IndexedEditorBrush *)o2->Data)->Brush = brush;
((IndexedEditorBrush *)o2->Data)->u.ItemIndex = i;
o2->Pos = pos;
UIObjectAddChild(c, o2);
pos.x += o->Size.x;
if (((i + 1) % width) == 0)
{
pos.x = 0;
pos.y += o->Size.y;
}
}
UIObjectDestroy(o);
return c;
}
示例2: MissionBriefingDraw
static void MissionBriefingDraw(void *data)
{
const MissionBriefingData *mData = data;
GraphicsClear(&gGraphicsDevice);
// Mission title
FontStrOpt(mData->Title, Vec2iZero(), mData->TitleOpts);
// Display password
FontStrOpt(mData->Password, Vec2iZero(), mData->PasswordOpts);
// Display description with typewriter effect
FontStr(mData->TypewriterBuf, mData->DescriptionPos);
// Display objectives
CA_FOREACH(
const Objective, o, mData->MissionOptions->missionData->Objectives)
// Do not brief optional objectives
if (o->Required == 0)
{
continue;
}
Vec2i offset = Vec2iNew(0, _ca_index * mData->ObjectiveHeight);
FontStr(o->Description, Vec2iAdd(mData->ObjectiveDescPos, offset));
// Draw the icons slightly offset so that tall icons don't overlap each
// other
offset.x = -16 * (_ca_index & 1);
DrawObjectiveInfo(o, Vec2iAdd(mData->ObjectiveInfoPos, offset));
CA_FOREACH_END()
}
示例3: UIObjectCreate
static UIObject *CreateSetKeyObjs(Vec2i pos, EditorBrush *brush)
{
UIObject *o2;
UIObject *c = UIObjectCreate(UITYPE_CONTEXT_MENU, 0, pos, Vec2iZero());
UIObject *o = UIObjectCreate(
UITYPE_CUSTOM, 0,
Vec2iZero(), Vec2iNew(TILE_WIDTH + 4, TILE_HEIGHT + 4));
o->ChangeFunc = BrushSetBrushTypeSetKey;
o->u.CustomDrawFunc = DrawKey;
o->OnFocusFunc = ActivateIndexedEditorBrush;
o->OnUnfocusFunc = DeactivateIndexedEditorBrush;
pos = Vec2iZero();
for (int i = -1; i < KEY_COUNT; i++)
{
o2 = UIObjectCopy(o);
o2->IsDynamicData = 1;
CMALLOC(o2->Data, sizeof(IndexedEditorBrush));
((IndexedEditorBrush *)o2->Data)->Brush = brush;
((IndexedEditorBrush *)o2->Data)->ItemIndex = i;
o2->Pos = pos;
if (i == -1)
{
// -1 means no key
CSTRDUP(o2->Tooltip, "no key");
}
UIObjectAddChild(c, o2);
pos.x += o->Size.x;
}
UIObjectDestroy(o);
return c;
}
示例4: MissionBriefingDraw
static void MissionBriefingDraw(void *data)
{
const MissionBriefingData *mData = data;
GraphicsBlitBkg(&gGraphicsDevice);
// Mission title
FontStrOpt(mData->Title, Vec2iZero(), mData->TitleOpts);
// Display password
FontStrOpt(mData->Password, Vec2iZero(), mData->PasswordOpts);
// Display description with typewriter effect
FontStr(mData->TypewriterBuf, mData->DescriptionPos);
// Display objectives
for (int i = 0;
i < (int)mData->MissionOptions->missionData->Objectives.size;
i++)
{
const MissionObjective *o =
CArrayGet(&mData->MissionOptions->missionData->Objectives, i);
// Do not brief optional objectives
if (o->Required == 0)
{
continue;
}
const Vec2i yInc = Vec2iNew(0, i * mData->ObjectiveHeight);
FontStr(o->Description, Vec2iAdd(mData->ObjectiveDescPos, yInc));
DrawObjectiveInfo(
mData->MissionOptions, i, Vec2iAdd(mData->ObjectiveInfoPos, yInc));
}
}
示例5: FontH
UIObject *CreateAddItemObjs(
Vec2i pos, EditorBrush *brush, CampaignOptions *co)
{
const int th = FontH();
UIObject *o2;
UIObject *c = UIObjectCreate(UITYPE_CONTEXT_MENU, 0, pos, Vec2iZero());
UIObject *o = UIObjectCreate(
UITYPE_LABEL, 0, Vec2iZero(), Vec2iNew(65, th));
o->Data = brush;
pos = Vec2iZero();
o2 = UIObjectCopy(o);
o2->Label = "Player start";
o2->ChangeFunc = BrushSetBrushTypeSetPlayerStart;
o2->Pos = pos;
CSTRDUP(o2->Tooltip, "Location where players start");
o2->OnFocusFunc = ActivateBrush;
o2->OnUnfocusFunc = DeactivateBrush;
o2->Data = brush;
UIObjectAddChild(c, o2);
pos.y += th;
o2 = UIObjectCopy(o);
o2->Label = "Map item >";
o2->Pos = pos;
UIObjectAddChild(o2, CreateAddMapItemObjs(
o2->Size, AddMapItemBrushObjFunc, brush, sizeof(IndexedEditorBrush),
true));
UIObjectAddChild(c, o2);
pos.y += th;
o2 = UIObjectCopy(o);
o2->Label = "Pickup spawner >";
o2->Pos = pos;
UIObjectAddChild(o2, CreateAddPickupSpawnerObjs(
o2->Size, AddPickupSpawnerBrushObjFunc, brush,
sizeof(IndexedEditorBrush)));
UIObjectAddChild(c, o2);
pos.y += th;
o2 = UIObjectCopy(o);
o2->Label = "Character >";
o2->Pos = pos;
UIObjectAddChild(o2, CreateAddCharacterObjs(o2->Size, brush, co));
UIObjectAddChild(c, o2);
pos.y += th;
o2 = UIObjectCopy(o);
o2->Label = "Objective >";
o2->Pos = pos;
UIObjectAddChild(o2, CreateAddObjectiveObjs(o2->Size, brush, co));
UIObjectAddChild(c, o2);
pos.y += th;
o2 = UIObjectCopy(o);
o2->Label = "Key >";
o2->Pos = pos;
UIObjectAddChild(o2, CreateAddKeyObjs(o2->Size, brush));
UIObjectAddChild(c, o2);
UIObjectDestroy(o);
return c;
}
示例6: RunGame
bool RunGame(const CampaignOptions *co, struct MissionOptions *m, Map *map)
{
// Clear the background
DrawRectangle(
&gGraphicsDevice, Vec2iZero(), gGraphicsDevice.cachedConfig.Res,
colorBlack, 0);
SDL_UpdateTexture(
gGraphicsDevice.bkg, NULL, gGraphicsDevice.buf,
gGraphicsDevice.cachedConfig.Res.x * sizeof(Uint32));
MapLoad(map, m, co);
// Seed random if PVP mode (otherwise players will always spawn in same
// position)
if (IsPVP(co->Entry.Mode))
{
srand((unsigned int)time(NULL));
}
if (!co->IsClient)
{
MapLoadDynamic(map, m, &co->Setting.characters);
// For PVP modes, mark all map as explored
if (IsPVP(co->Entry.Mode))
{
MapMarkAllAsVisited(map);
}
// Reset players for the mission
CA_FOREACH(const PlayerData, p, gPlayerDatas)
// Only reset for local players; for remote ones wait for the
// client ready message
if (!p->IsLocal) continue;
GameEvent e = GameEventNew(GAME_EVENT_PLAYER_DATA);
e.u.PlayerData = PlayerDataMissionReset(p);
GameEventsEnqueue(&gGameEvents, e);
CA_FOREACH_END()
// Process the events to force add the players
HandleGameEvents(&gGameEvents, NULL, NULL, NULL);
// Note: place players first,
// as bad guys are placed away from players
Vec2i firstPos = Vec2iZero();
CA_FOREACH(const PlayerData, p, gPlayerDatas)
if (!p->Ready) continue;
firstPos = PlacePlayer(&gMap, p, firstPos, true);
CA_FOREACH_END()
if (!IsPVP(co->Entry.Mode))
{
InitializeBadGuys();
CreateEnemies();
}
}
示例7: PicTrim
void PicTrim(Pic *pic, const bool xTrim, const bool yTrim)
{
// Scan all pixels looking for the min/max of x and y
Vec2i min = pic->size;
Vec2i max = Vec2iZero();
for (Vec2i pos = Vec2iZero(); pos.y < pic->size.y; pos.y++)
{
for (pos.x = 0; pos.x < pic->size.x; pos.x++)
{
const Uint32 pixel = *(pic->Data + pos.x + pos.y * pic->size.x);
if (PixelToColor(&gGraphicsDevice, pixel).a > 0)
{
min.x = MIN(min.x, pos.x);
min.y = MIN(min.y, pos.y);
max.x = MAX(max.x, pos.x);
max.y = MAX(max.y, pos.y);
}
}
}
// If no opaque pixels found, don't trim
Vec2i newSize = pic->size;
Vec2i offset = Vec2iZero();
if (min.x < max.x && min.y < max.y)
{
if (xTrim)
{
newSize.x = max.x - min.x + 1;
offset.x = min.x;
}
if (yTrim)
{
newSize.y = max.y - min.y + 1;
offset.y = min.y;
}
}
// Trim by copying pixels
Uint32 *newData;
CMALLOC(newData, newSize.x * newSize.y * sizeof *newData);
for (Vec2i pos = Vec2iZero(); pos.y < newSize.y; pos.y++)
{
for (pos.x = 0; pos.x < newSize.x; pos.x++)
{
Uint32 *target = newData + pos.x + pos.y * newSize.x;
const int srcIdx =
pos.x + offset.x + (pos.y + offset.y) * pic->size.x;
*target = *(pic->Data + srcIdx);
}
}
// Replace the old data
CFREE(pic->Data);
pic->Data = newData;
pic->size = newSize;
pic->offset = Vec2iZero();
}
示例8: ShowControls
void ShowControls(void)
{
FontOpts opts = FontOptsNew();
opts.HAlign = ALIGN_CENTER;
opts.VAlign = ALIGN_END;
opts.Area = gGraphicsDevice.cachedConfig.Res;
opts.Pad.y = 10;
#ifdef __GCWZERO__
FontStrOpt(
"(use joystick or D pad + START + SELECT)", Vec2iZero(), opts);
#else
FontStrOpt(
"(use joystick 1 or arrow keys + Enter/Backspace)", Vec2iZero(), opts);
#endif
}
示例9: CreateAddCharacterSubObjs
static void CreateAddCharacterSubObjs(UIObject *c, void *vData)
{
EditorBrushAndCampaign *data = vData;
CharacterStore *store = &data->Campaign->Setting.characters;
if (c->Children.size == store->OtherChars.size)
{
return;
}
// Recreate the child UI objects
c->Highlighted = NULL;
UIObject **objs = c->Children.data;
for (int i = 0; i < (int)c->Children.size; i++, objs++)
{
UIObjectDestroy(*objs);
}
CArrayTerminate(&c->Children);
CArrayInit(&c->Children, sizeof c);
UIObject *o = UIObjectCreate(
UITYPE_CUSTOM, 0,
Vec2iZero(), Vec2iNew(TILE_WIDTH + 4, TILE_HEIGHT * 2 + 4));
o->ChangeFunc = BrushSetBrushTypeAddCharacter;
o->u.CustomDrawFunc = DrawCharacter;
o->OnFocusFunc = ActivateEditorBrushAndCampaignBrush;
o->OnUnfocusFunc = DeactivateEditorBrushAndCampaignBrush;
Vec2i pos = Vec2iZero();
int width = 8;
for (int i = 0; i < (int)store->OtherChars.size; i++)
{
UIObject *o2 = UIObjectCopy(o);
Character *ch = CArrayGet(&store->OtherChars, i);
CSTRDUP(o2->Tooltip, ch->Gun->name);
o2->IsDynamicData = 1;
CMALLOC(o2->Data, sizeof(EditorBrushAndCampaign));
((EditorBrushAndCampaign *)o2->Data)->Brush.Brush = data->Brush.Brush;
((EditorBrushAndCampaign *)o2->Data)->Campaign = data->Campaign;
((EditorBrushAndCampaign *)o2->Data)->Brush.u.ItemIndex = i;
o2->Pos = pos;
UIObjectAddChild(c, o2);
pos.x += o->Size.x;
if (((i + 1) % width) == 0)
{
pos.x = 0;
pos.y += o->Size.y;
}
}
UIObjectDestroy(o);
}
示例10: CampaignIntroDraw
static void CampaignIntroDraw(void *data)
{
// This will only draw once
const CampaignSetting *c = data;
GraphicsBlitBkg(&gGraphicsDevice);
const int w = gGraphicsDevice.cachedConfig.Res.x;
const int h = gGraphicsDevice.cachedConfig.Res.y;
const int y = h / 4;
// Display title + author
char *buf;
CMALLOC(buf, strlen(c->Title) + strlen(c->Author) + 16);
sprintf(buf, "%s by %s", c->Title, c->Author);
FontOpts opts = FontOptsNew();
opts.HAlign = ALIGN_CENTER;
opts.Area = gGraphicsDevice.cachedConfig.Res;
opts.Pad.y = y - 25;
FontStrOpt(buf, Vec2iZero(), opts);
CFREE(buf);
// Display campaign description
// allow some slack for newlines
if (strlen(c->Description) > 0)
{
CMALLOC(buf, strlen(c->Description) * 2);
// Pad about 1/6th of the screen width total (1/12th left and right)
FontSplitLines(c->Description, buf, w * 5 / 6);
FontStr(buf, Vec2iNew(w / 12, y));
CFREE(buf);
}
}
示例11: DrawEditorTiles
static void DrawEditorTiles(DrawBuffer *b, Vec2i offset)
{
Vec2i pos;
Tile *tile = &b->tiles[0][0];
pos.y = b->dy + offset.y;
for (int y = 0; y < Y_TILES; y++, pos.y += TILE_HEIGHT)
{
pos.x = b->dx + offset.x;
for (int x = 0; x < b->Size.x; x++, tile++, pos.x += TILE_WIDTH)
{
if (gMission.missionData->Type == MAPTYPE_STATIC)
{
Vec2i start = gMission.missionData->u.Static.Start;
if (!Vec2iEqual(start, Vec2iZero()) &&
Vec2iEqual(start, Vec2iNew(x + b->xStart, y + b->yStart)))
{
// mission start
BlitMasked(
&gGraphicsDevice,
PicManagerGetPic(&gPicManager, "editor/start"),
pos, colorWhite, 1);
}
}
}
tile += X_TILES - b->Size.x;
}
}
示例12: MakeBackground
static void MakeBackground(GraphicsDevice *g, int buildTables)
{
if (buildTables)
{
// Automatically pan camera to middle of screen
Mission *m = gMission.missionData;
Vec2i focusTile = Vec2iScaleDiv(m->Size, 2);
// Better yet, if the map has a known start position, focus on that
if (m->Type == MAPTYPE_STATIC &&
!Vec2iEqual(m->u.Static.Start, Vec2iZero()))
{
focusTile = m->u.Static.Start;
}
camera = Vec2iCenterOfTile(focusTile);
}
// Clear background first
for (int i = 0; i < GraphicsGetScreenSize(&g->cachedConfig); i++)
{
g->buf[i] = PixelFromColor(g, colorBlack);
}
GrafxDrawExtra extra;
extra.guideImage = brush.GuideImageSurface;
extra.guideImageAlpha = brush.GuideImageAlpha;
DrawBufferTerminate(&sDrawBuffer);
DrawBufferInit(&sDrawBuffer, Vec2iNew(X_TILES, Y_TILES), &gGraphicsDevice);
GrafxMakeBackground(
g, &sDrawBuffer, &gCampaign, &gMission, &gMap,
tintNone, 1, buildTables, camera, &extra);
}
示例13: GenerateQuickPlayMapSize
static Vec2i GenerateQuickPlayMapSize(QuickPlayQuantity size)
{
const int minMapDim = 16;
const int maxMapDim = 64;
// Map sizes based on total dimensions (width + height)
// Small: 32 - 64
// Medium: 64 - 96
// Large: 96 - 128
// Restrictions: at least 16, at most 64 per side
switch (size)
{
case QUICKPLAY_QUANTITY_ANY:
return GenerateRandomPairPartitionWithRestrictions(
32 + (rand() % (128 - 32 + 1)),
minMapDim, maxMapDim);
case QUICKPLAY_QUANTITY_SMALL:
return GenerateRandomPairPartitionWithRestrictions(
32 + (rand() % (64 - 32 + 1)),
minMapDim, maxMapDim);
case QUICKPLAY_QUANTITY_MEDIUM:
return GenerateRandomPairPartitionWithRestrictions(
64 + (rand() % (96 - 64 + 1)),
minMapDim, maxMapDim);
case QUICKPLAY_QUANTITY_LARGE:
return GenerateRandomPairPartitionWithRestrictions(
96 + (rand() % (128 - 96 + 1)),
minMapDim, maxMapDim);
default:
assert(0 && "invalid quick play map size config");
return Vec2iZero();
}
}
示例14: PicLoad
void PicLoad(
Pic *p, const Vec2i size, const Vec2i offset,
const SDL_Surface *image, const SDL_Surface *s)
{
p->size = size;
p->offset = Vec2iZero();
CMALLOC(p->Data, size.x * size.y * sizeof *((Pic *)0)->Data);
// Manually copy the pixels and replace the alpha component,
// since our gfx device format has no alpha
int srcI = offset.y*image->w + offset.x;
for (int i = 0; i < size.x * size.y; i++, srcI++)
{
const Uint32 alpha =
((Uint32 *)image->pixels)[srcI] >> image->format->Ashift;
// If completely transparent, replace rgb with black (0) too
// This is because transparency blitting checks entire pixel
if (alpha == 0)
{
p->Data[i] = 0;
}
else
{
const Uint32 pixel = ((Uint32 *)s->pixels)[srcI];
const Uint32 rgbMask =
s->format->Rmask | s->format->Gmask | s->format->Bmask;
p->Data[i] =
(pixel & rgbMask) | (alpha << gGraphicsDevice.Ashift);
}
if ((i + 1) % size.x == 0)
{
srcI += image->w - size.x;
}
}
}
示例15: PicLoad
void PicLoad(
Pic *p, const Vec2i size, const Vec2i offset, const SDL_Surface *image)
{
p->size = size;
p->offset = Vec2iZero();
p->Data = malloc(size.x * size.y * sizeof *((Pic *)0)->Data);
// Manually copy the pixels and replace the alpha component,
// since our gfx device format has no alpha
int srcI = offset.y*image->w + offset.x;
for (int i = 0; i < size.x * size.y; i++, srcI++)
{
const Uint32 pixel = ((Uint32 *)image->pixels)[srcI];
SDL_Color c;
SDL_GetRGBA(pixel, image->format, &c.r, &c.g, &c.b, &c.a);
// If completely transparent, replace rgb with black (0) too
// This is because transparency blitting checks entire pixel
if (c.a == 0)
{
p->Data[i] = 0;
}
else
{
p->Data[i] = WHITE;
}
if ((i + 1) % size.x == 0)
{
srcI += image->w - size.x;
}
}
}