void* IAGSEngine::GetManagedObjectAddressByKey(int key) { void *object; ICCDynamicObject *manager; ScriptValueType obj_type = ccGetObjectAddressAndManagerFromHandle(key, object, manager); if (obj_type == kScValPluginObject) { GlobalReturnValue.SetPluginObject(object, manager); } else { GlobalReturnValue.SetDynamicObject(object, manager); } return object; }
GUITextBox* GUIControl_GetAsTextBox(GUIObject *guio) { if (guis[guio->guin].get_control_type(guio->objn) != GOBJ_TEXTBOX) return NULL; GlobalReturnValue.SetDynamicObject(guio, &ccDynamicGUIObject); return (GUITextBox*)guio; }
GUISlider* GUIControl_GetAsSlider(GUIObject *guio) { if (guis[guio->guin].get_control_type(guio->objn) != GOBJ_SLIDER) return NULL; GlobalReturnValue.SetDynamicObject(guio, &ccDynamicGUIObject); return (GUISlider*)guio; }
GUILabel* GUIControl_GetAsLabel(GUIObject *guio) { if (guis[guio->guin].get_control_type(guio->objn) != GOBJ_LABEL) return NULL; GlobalReturnValue.SetDynamicObject(guio, &ccDynamicGUIObject); return (GUILabel*)guio; }
GUIInv* GUIControl_GetAsInvWindow(GUIObject *guio) { if (guis[guio->guin].get_control_type(guio->objn) != GOBJ_INVENTORY) return NULL; GlobalReturnValue.SetDynamicObject(guio, &ccDynamicGUIObject); return (GUIInv*)guio; }
GUIButton* GUIControl_GetAsButton(GUIObject *guio) { if (guis[guio->guin].get_control_type(guio->objn) != GOBJ_BUTTON) return NULL; GlobalReturnValue.SetDynamicObject(guio, &ccDynamicGUIObject); return (GUIButton*)guio; }
ScriptDynamicSprite* DynamicSprite_CreateFromDrawingSurface(ScriptDrawingSurface *sds, int x, int y, int width, int height) { int gotSlot = spriteset.findFreeSlot(); if (gotSlot <= 0) return NULL; // use DrawingSurface resolution sds->MultiplyCoordinates(&x, &y); sds->MultiplyCoordinates(&width, &height); sds->StartDrawing(); if ((x < 0) || (y < 0) || (x + width > abuf->GetWidth()) || (y + height > abuf->GetHeight())) quit("!DynamicSprite.CreateFromDrawingSurface: requested area is outside the surface"); int colDepth = abuf->GetColorDepth(); Bitmap *newPic = BitmapHelper::CreateBitmap(width, height, colDepth); if (newPic == NULL) return NULL; newPic->Blit(abuf, x, y, 0, 0, width, height); sds->FinishedDrawingReadOnly(); add_dynamic_sprite(gotSlot, newPic, (sds->hasAlphaChannel != 0)); ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(gotSlot); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; }
ScriptRegion *GetRegionAtLocation(int xx, int yy) { int hsnum = GetRegionAt(xx, yy); if (hsnum < 0) hsnum = 0; GlobalReturnValue.SetDynamicObject(&scrRegion[hsnum], &ccDynamicRegion); return &scrRegion[hsnum]; }
int GetGUIObjectAt (int xx, int yy) { GUIObject *toret = GetGUIControlAtLocation(xx, yy); GlobalReturnValue.Invalidate(); if (toret == NULL) return -1; return toret->objn; }
ScriptAudioClip* ViewFrame_GetLinkedAudio(ScriptViewFrame *svf) { int soundIndex = views[svf->view].loops[svf->loop].frames[svf->frame].sound; if (soundIndex < 0) return NULL; GlobalReturnValue.SetDynamicObject(&game.audioClips[soundIndex], &ccDynamicAudioClip); return &game.audioClips[soundIndex]; }
ScriptDynamicSprite* DynamicSprite_CreateFromFile(const char *filename) { int slotnum = LoadImageFile(filename); if (slotnum) { ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(slotnum); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; } return NULL; }
ScriptDynamicSprite* DynamicSprite_CreateFromSaveGame(int sgslot, int width, int height) { int slotnum = LoadSaveSlotScreenshot(sgslot, width, height); if (slotnum) { ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(slotnum); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; } return NULL; }
ScriptDynamicSprite* DynamicSprite_CreateFromScreenShot(int width, int height) { int gotSlot = spriteset.findFreeSlot(); if (gotSlot <= 0) return NULL; if (width <= 0) width = virtual_screen->GetWidth(); else width = multiply_up_coordinate(width); if (height <= 0) height = virtual_screen->GetHeight(); else height = multiply_up_coordinate(height); Bitmap *newPic; if (!gfxDriver->UsesMemoryBackBuffer()) { // D3D driver Bitmap *scrndump = BitmapHelper::CreateBitmap(scrnwid, scrnhit, final_col_dep); gfxDriver->GetCopyOfScreenIntoBitmap(scrndump); update_polled_stuff_if_runtime(); if ((scrnwid != width) || (scrnhit != height)) { newPic = BitmapHelper::CreateBitmap(width, height, final_col_dep); newPic->StretchBlt(scrndump, RectWH(0, 0, scrndump->GetWidth(), scrndump->GetHeight()), RectWH(0, 0, width, height)); delete scrndump; } else { newPic = scrndump; } } else { // resize the sprite to the requested size newPic = BitmapHelper::CreateBitmap(width, height, virtual_screen->GetColorDepth()); newPic->StretchBlt(virtual_screen, RectWH(0, 0, virtual_screen->GetWidth(), virtual_screen->GetHeight()), RectWH(0, 0, width, height)); } // replace the bitmap in the sprite set add_dynamic_sprite(gotSlot, gfxDriver->ConvertBitmapToSupportedColourDepth(newPic)); ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(gotSlot); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; }
ScriptDrawingSurface* DynamicSprite_GetDrawingSurface(ScriptDynamicSprite *dss) { ScriptDrawingSurface *surface = new ScriptDrawingSurface(); surface->dynamicSpriteNumber = dss->slot; if ((game.spriteflags[dss->slot] & SPF_ALPHACHANNEL) != 0) surface->hasAlphaChannel = true; ccRegisterManagedObject(surface, surface); GlobalReturnValue.SetDynamicObject(surface, surface); return surface; }
GUIObject *GetGUIControlAtLocation(int xx, int yy) { int guinum = GetGUIAt(xx, yy); if (guinum == -1) return NULL; multiply_up_coordinates(&xx, &yy); int oldmousex = mousex, oldmousey = mousey; mousex = xx - guis[guinum].x; mousey = yy - guis[guinum].y; int toret = guis[guinum].find_object_under_mouse(0, false); mousex = oldmousex; mousey = oldmousey; if (toret < 0) return NULL; GlobalReturnValue.SetDynamicObject(guis[guinum].objs[toret], &ccDynamicGUIObject); return guis[guinum].objs[toret]; }
ScriptDynamicSprite* DynamicSprite_Create(int width, int height, int alphaChannel) { multiply_up_coordinates(&width, &height); int gotSlot = spriteset.findFreeSlot(); if (gotSlot <= 0) return NULL; Bitmap *newPic = BitmapHelper::CreateBitmap(width, height, final_col_dep); if (newPic == NULL) return NULL; newPic->Clear(newPic->GetMaskColor()); if ((alphaChannel) && (final_col_dep < 32)) alphaChannel = false; add_dynamic_sprite(gotSlot, gfxDriver->ConvertBitmapToSupportedColourDepth(newPic), alphaChannel != 0); ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(gotSlot); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; }
ScriptDynamicSprite* DynamicSprite_CreateFromBackground(int frame, int x1, int y1, int width, int height) { if (frame == SCR_NO_VALUE) { frame = play.bg_frame; } else if ((frame < 0) || (frame >= thisroom.num_bscenes)) quit("!DynamicSprite.CreateFromBackground: invalid frame specified"); if (x1 == SCR_NO_VALUE) { x1 = 0; y1 = 0; width = play.room_width; height = play.room_height; } else if ((x1 < 0) || (y1 < 0) || (width < 1) || (height < 1) || (x1 + width > play.room_width) || (y1 + height > play.room_height)) quit("!DynamicSprite.CreateFromBackground: invalid co-ordinates specified"); multiply_up_coordinates(&x1, &y1); multiply_up_coordinates(&width, &height); int gotSlot = spriteset.findFreeSlot(); if (gotSlot <= 0) return NULL; // create a new sprite as a copy of the existing one Bitmap *newPic = BitmapHelper::CreateBitmap(width, height, thisroom.ebscene[frame]->GetColorDepth()); if (newPic == NULL) return NULL; newPic->Blit(thisroom.ebscene[frame], x1, y1, 0, 0, width, height); // replace the bitmap in the sprite set add_dynamic_sprite(gotSlot, newPic); ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(gotSlot); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; }
ScriptDynamicSprite* DynamicSprite_CreateFromExistingSprite(int slot, int preserveAlphaChannel) { int gotSlot = spriteset.findFreeSlot(); if (gotSlot <= 0) return NULL; if (!spriteset.doesSpriteExist(slot)) quitprintf("DynamicSprite.CreateFromExistingSprite: sprite %d does not exist", slot); // create a new sprite as a copy of the existing one Bitmap *newPic = BitmapHelper::CreateBitmap(spritewidth[slot], spriteheight[slot], spriteset[slot]->GetColorDepth()); if (newPic == NULL) return NULL; newPic->Blit(spriteset[slot], 0, 0, 0, 0, spritewidth[slot], spriteheight[slot]); bool hasAlpha = (preserveAlphaChannel) && ((game.spriteflags[slot] & SPF_ALPHACHANNEL) != 0); // replace the bitmap in the sprite set add_dynamic_sprite(gotSlot, newPic, hasAlpha); ScriptDynamicSprite *new_spr = new ScriptDynamicSprite(gotSlot); GlobalReturnValue.SetDynamicObject(new_spr, new_spr); return new_spr; }
const char* IAGSEngine::CreateScriptString(const char *fromText) { const char *string = CreateNewScriptString(fromText); // Should be still standard dynamic object, because not managed by plugin GlobalReturnValue.SetDynamicObject((void*)string, &myScriptStringImpl); return string; }
ScriptGUI* GUIControl_GetOwningGUI(GUIObject *guio) { GlobalReturnValue.SetDynamicObject(&scrGui[guio->guin], &ccDynamicGUI); return &scrGui[guio->guin]; }
void IAGSEngine::RegisterUnserializedObject(int key, const void *object, IAGSScriptManagedObject *callback) { GlobalReturnValue.SetPluginObject((void*)object, (ICCDynamicObject*)callback); ccRegisterUnserializedObject(key, object, (ICCDynamicObject*)callback, true); }
int IAGSEngine::RegisterManagedObject(const void *object, IAGSScriptManagedObject *callback) { GlobalReturnValue.SetPluginObject((void*)object, (ICCDynamicObject*)callback); return ccRegisterManagedObject(object, (ICCDynamicObject*)callback, true); }