Exemple #1
0
void AwtMenuItem::DoCommand()
{
    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);

    // peer is sun.awt.windows.WMenuItemPeer
    jobject peer = GetPeer(env);

    if (IsCheckbox()) {
        UINT nState = ::GetMenuState(GetMenuContainer()->GetHMenu(),
                                     GetID(), MF_BYCOMMAND);
        DASSERT(nState != 0xFFFFFFFF);
        DoCallback("handleAction", "(Z)V", ((nState & MF_CHECKED) == 0));
    } else {
        DoCallback("handleAction", "(JI)V", TimeHelper::getMessageTimeUTC(),
                   (jint)AwtComponent::GetJavaModifiers());
    }
}
void BubOpenMouthFallingAnimator::OnStopFalling(Sprite * sprite){
	DASSERT( sprite == this->GetSprite() );
	REMOVE_FROM_ACTION_ANIMATOR( this );

	MovingAnimation *fra= (MovingAnimation*)AnimationsParser::GetAnimation("BubStand");
	Sprite *n_sprite=new Sprite(this->GetSprite()->GetX(),this->GetSprite()->GetY(),
		this->GetSprite()->IsGravityAddicted(),AnimationFilmHolder::GetFilm("BubWalk"), 
						Terrain::GetActionLayer(), this->GetSprite()->GoesLeft());
	n_sprite->SetIsBub(this->GetSprite()->IsBub());
	BubStandAnimator *frtor=new BubStandAnimator();
	frtor->RegistCollitions(n_sprite);
	START_ANIMATOR( frtor, n_sprite, fra, GetGameTime() );
	DESTROY_ANIMATOR( this );

	//logic
	REFRESH_KILLED_ENEMIES_COUNTER();
}
Exemple #3
0
SCState* CompStates::getState(int index)
{
    s_it it = states.find(index);
    if(it!=states.end())
    {
        return it->second;
    }
    else
    {
        pair<s_it, bool> ret = states.insert(pair<int, SCState*>(index, new SCState(parent)));
        DASSERT(ret.second);
        return ret.first->second;
    }
   
   
    return NULL;
}
Exemple #4
0
void AwtMenuItem::SetState(BOOL isChecked)
{
    AwtMenu* menu = GetMenuContainer();
    /* Fix for bug 4257944 by [email protected]
    * check parent
    */
    if (menu == NULL) return;
    DASSERT(menu != NULL && GetID() >= 0);
    VERIFY(::CheckMenuItem(menu->GetHMenu(), GetID(),
                           MF_BYCOMMAND | (isChecked ? MF_CHECKED : MF_UNCHECKED))
           != 0xFFFFFFFF);

    // Redraw menu bar if it was affected.
    if (menu->GetMenuBar() == menu) {
        ::DrawMenuBar(menu->GetOwnerHWnd());
    }
}
// ---------------------------------------------------------------------------
// Decides whether the download can start or not
// ---------------------------------------------------------------------------
//
TInt CCatalogsHttpDownloadManager::StartOperation(
    MCatalogsHttpOperation* aOperation )
{
    DLTRACEIN(( "" ));
    DASSERT( aOperation );
    TInt err = iManager.StartOperation( aOperation, EFalse );
    if ( err == KErrNone || err == KCatalogsHttpOperationQueued )
    {
        TInt err2 = MoveRestoredDlToCurrentDls( *aOperation );
        // Check for unwanted errors
        if ( err2 != KErrNone && err2 != KErrNotFound )
        {
            return err2;
        }
    }
    return err;
}
Exemple #6
0
	const string MultiPlayerMenu::cellText(int server_id, int col_id) const {
		DASSERT(server_id >= 0 && server_id < (int)m_servers.size());
		const auto &row = m_servers[server_id];

		if(col_id == 0)
			return row.server_name;
		else if(col_id == 1)
			return row.map_name;
		else if(col_id == 2)
			return format("% / %", row.num_players, row.max_players);
		else if(col_id == 3)
			return toString(row.game_mode);
		else if(col_id == 4)
			return format("%", row.ping);

		return string();
	}
Exemple #7
0
void GOctScale::setState(SoundCompEvent* e)
{
    DASSERT(e!=NULL);
    if(e->empty())return;
    if(e->getSize()!=sizeof(State))
    {
        DERROR("size missmatch");
        if(e->getSize() < sizeof(State))return;
	
        DERROR("trying to read...");
    }
    const State* s = (const State*)e->getData();
   
    ns->setValue(s->noct);
   
    update();
}
Exemple #8
0
void AwtMenuItem::SetLabel(LPCTSTR sb)
{
    AwtMenu* menu = GetMenuContainer();
    /* Fix for bug 4257944 by [email protected]
    * check parent
    */
    if (menu == NULL) return;
    DASSERT(menu != NULL && GetID() >= 0);

/*
 * SetMenuItemInfo is replaced by this code for fix bug 4261935
 */
    HMENU hMenu = menu->GetHMenu();
    MENUITEMINFO mii, mii1;

    // get full information about menu item
    memset(&mii, 0, sizeof(MENUITEMINFO));
    mii.cbSize = sizeof(MENUITEMINFO);
    mii.fMask = MIIM_CHECKMARKS | MIIM_DATA | MIIM_ID
              | MIIM_STATE | MIIM_SUBMENU | MIIM_TYPE;

    ::GetMenuItemInfo(hMenu, GetID(), FALSE, &mii);

    mii.fType = MFT_OWNERDRAW;
    mii.dwTypeData = (LPTSTR)(*sb);

    // find index by menu item id
    int nMenuItemCount = ::GetMenuItemCount(hMenu);;
    int idx;
    for (idx = 0; (idx < nMenuItemCount); idx++) {
        memset(&mii1, 0, sizeof(MENUITEMINFO));
        mii1.cbSize = sizeof mii1;
        mii1.fMask = MIIM_ID;
        ::GetMenuItemInfo(hMenu, idx, TRUE, &mii1);
        if (mii.wID == mii1.wID) break;
    }

    ::RemoveMenu(hMenu, idx, MF_BYPOSITION);
    ::InsertMenuItem(hMenu, idx, TRUE, &mii);

    // Redraw menu bar if it was affected.
    if (menu->GetMenuBar() == menu) {
        ::DrawMenuBar(menu->GetOwnerHWnd());
    }
}
void CNcdNodeContentInfoProxy::InternalizeDataL( RReadStream& aStream )
    {
    DLTRACEIN((""));

    // First read the class id. Because, it is the first thing in the stream.
    TInt classId( aStream.ReadInt32L() );
    
    if ( classId != NcdNodeClassIds::ENcdNodeContentInfoClassId )
        {
        // classId is not recognized
        DLERROR(("Class id was not recognized!"));
        // For testing purposes assert here
        DASSERT( EFalse );
        
        // Otherwise leave is adequate
        User::Leave( KErrCorrupt );
        }

    iPurpose = aStream.ReadUint16L();
    DLINFO(( "Purpose: %u", iPurpose ));
    
    InternalizeDesL( iMimeType, aStream );    
    DLINFO(( _L("Mime: %S"), iMimeType ));
    
    //The Internalization here must be consistant with the externalization in CNcdNodeContentInfo
    if ( iMimeType->Compare( KMimeTypeMatchWidget ) == 0 )
        {
        //widget
        InternalizeDesL( iIdentifier, aStream );
        }
    else
        {
        //sis
        iUid.iUid = aStream.ReadInt32L();   
        DLINFO(( "Uid: %x", iUid.iUid )); 
        }
   
    InternalizeDesL( iVersion, aStream );    
    DLINFO(( _L("Version: %S"), iVersion ));

    iSize = aStream.ReadInt32L();
    DLINFO(( _L("Size: %d"), iSize ));
    
    DLTRACEOUT((""));
    }
Exemple #10
0
page_hdr_t* file_get_page(file_t* file, page_id_t pageid)
{
    page_hdr_t* page;
    page_id_t oldid;
    void* oldptr;
    
#if !defined(NDEBUG)
    if (pageid >= file->size) {
        fprintf(stderr, "file_get_page: requested page %u, file has %u pages\n",
                pageid, file->size);
        DASSERT(0);
    }
#endif /* !defined(NDEBUG) */

    /* Try to find an already mapped page in the cache. */
    page = (page_hdr_t*)cache_get_page(&file->cache, pageid);
    if (page != NULL)
        return page;

    /* Page was not found in the cache, need to map it. */
    page = (page_hdr_t*)os_get_page(file->handle, pageid);
    if (page == NULL) {
        file_dump_info(file);
        return NULL;
    }

    file->stats.mapped++;
    DPRINT("get_page: mapped page %u (%p)\n", pageid, page);
    
    /* Update the cache. */
    if (cache_replace(&file->cache, pageid, page, &oldid, &oldptr) == 0) {
        if (oldptr != NULL) {
            DPRINT("get_page: unmapping cached page %u (%p)\n", oldid,
                   oldptr);
            if (os_put_page(file->handle, oldptr) == 0)
                file->stats.unmapped++;
        }
    }
    else {
        /* Page could not be placed in the cache. */
        file->stats.ncmapped++;
    }

    return page;
}
Exemple #11
0
void TypeSetConstraint::format(FormatStream & out) const {
  static int recursionCheck = 0;
  ++recursionCheck;
  DASSERT(recursionCheck < 50);

  QualifiedTypeSet expansion;
  expandImpl(expansion, 0);
  out << "{";
  for (QualifiedTypeSet::iterator it = expansion.begin(); it != expansion.end(); ++it) {
    if (it != expansion.begin()) {
      out << "|";
    }

    out << *it;
  }
  out << "}";
  --recursionCheck;
}
void AwtObjectList::Cleanup()
{
    DASSERT(GetCurrentThreadId() == AwtToolkit::MainThread());

    CriticalSection::Lock l(theAwtObjectList.m_lock);

    AwtObjectListItem* item = theAwtObjectList.m_head;
    if (item != NULL) {
	while (item != NULL) {
            // The AwtObject's destructor will call AwtObjectList::Remove(),
            // which will delete the item structure.
	    AwtObjectListItem* next = item->next;
            delete item->obj;
	    item = next;
	}
    }
    theAwtObjectList.m_head = NULL;
}
Exemple #13
0
	ImageButtonProto::ImageButtonProto(const char *back_tex, const char *up_tex, const char *down_tex, const char *font_name, FRect text_area) {
		DASSERT(up_tex && down_tex);

		if(back_tex)
			back = DTexture::gui_mgr[back_tex];

		up = DTexture::gui_mgr[up_tex];
		down = DTexture::gui_mgr[down_tex];
		if(font_name)
			font = Font::mgr[font_name];

		rect = IRect({0, 0}, back? back->size() : max(up->size(), down->size()));
		text_rect = text_area.isEmpty()? IRect::empty() :
			IRect(	lerp(float(rect.min.x), float(rect.max.x), text_area.min.x),
					lerp(float(rect.min.y), float(rect.max.y), text_area.min.y),
					lerp(float(rect.min.x), float(rect.max.x), text_area.max.x),
					lerp(float(rect.min.y), float(rect.max.y), text_area.max.y));
	}
Exemple #14
0
	/* Remove a tag and it's associated val from the list. Returns false
		if the tag wasn't found, or true if it was and was removed. */
	bool rem(const char *tag)
	{
		char *t, *v;

		int l = ta.length();
		for(int i = 0; i < l; i++)
		{
			t = (char *)ta.getTag(i);
			if(strcmp(t, tag) == 0)
			{
				v = (char *)ta.rem(i);
				DASSERT(v); 
				free(v);
				return true;
			}
		}
		return false;
	}
Exemple #15
0
BOOL AwtPrintControl::IsSupportedLevel(HANDLE hPrinter, DWORD dwLevel) {
    BOOL isSupported = FALSE;
    DWORD cbBuf = 0;
    LPBYTE pPrinter = NULL;

    DASSERT(hPrinter != NULL);

    VERIFY(::GetPrinter(hPrinter, dwLevel, NULL, 0, &cbBuf) == 0);
    if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
        pPrinter = new BYTE[cbBuf];
        if (::GetPrinter(hPrinter, dwLevel, pPrinter, cbBuf, &cbBuf)) {
            isSupported = TRUE;
        }
        delete[] pPrinter;
    }

    return isSupported;
}
Exemple #16
0
//==================================================================
void TokNode::ReplaceNode( TokNode *pOldNode )
{
	if NOT( pOldNode->mpParent )
		return;

	for (size_t i=0; i < pOldNode->mpParent->mpChilds.size(); ++i)
	{
		if ( pOldNode->mpParent->mpChilds[i] == pOldNode )
		{
			pOldNode->mpParent->mpChilds[i] = this;
			mpParent = pOldNode->mpParent;
			pOldNode->mpParent = NULL;
			return;
		}
	}

	DASSERT( 0 );
}
Exemple #17
0
void AwtMenuItem::Enable(BOOL isEnabled)
{
    AwtMenu* menu = GetMenuContainer();
    /* Fix for bug 4257944 by [email protected]
    * check state of the parent
    */
    if (menu == NULL) return;
    isEnabled = isEnabled && !menu->IsDisabledAndPopup();
    DASSERT(menu != NULL && GetID() >= 0);
    VERIFY(::EnableMenuItem(menu->GetHMenu(), GetID(),
                            MF_BYCOMMAND | (isEnabled ? MF_ENABLED : MF_GRAYED))
           != 0xFFFFFFFF);

    // Redraw menu bar if it was affected.
    if (menu->GetMenuBar() == menu) {
        ::DrawMenuBar(menu->GetOwnerHWnd());
    }
}
Exemple #18
0
void AwtMenuItem::DrawItem(DRAWITEMSTRUCT& drawInfo)
{
    DASSERT(drawInfo.CtlType == ODT_MENU);

    if (drawInfo.itemID != m_Id)
        return;

    /* Fixed bug 4349969. Since the problem occurs on Windows 98 and not on
       Windows NT, the fix is to check for Windows 95/98 and to check if the
       handle to the menu of the item to be drawn is the same as the handle to the
       menu of the menu object. If they're not the same, just return and don't do
       the drawing.
    */
    if ( IS_WIN95 && drawInfo.hwndItem != (HWND)this->m_menuContainer->GetHMenu()) {
        return;
    } else
        DrawSelf(drawInfo);
}
// ---------------------------------------------------------------------------
// RunOperation
// ---------------------------------------------------------------------------
//
TInt CNcdRightsObjectOperation::RunOperation()
    {
    DLTRACEIN(( "Pending message: %X", iPendingMessage ));
    DASSERT( iDownloadOp );
    
    if ( !iPendingMessage ) 
        {      
        DLTRACE(("No pending message"));  
        return KErrNotReady;
        }
    
    // Start download.
    DLINFO(("Starting download op"));
    TInt err = iDownloadOp->Start();

    DLTRACEOUT(("err: %d", err));
    return err;
    }
Exemple #20
0
LineData* Connection::saveLine()
{
    DASSERT(in!=NULL && out!=NULL);
    LineData* data = new LineData(outpos, inpos, out, in);
   
    if(default_color)
    {
        const ProgramState& progstate = ProgramState::instance();
        color = progstate.getLineColor();
    }
   
    data->color[0]=color.r;
    data->color[1]=color.g;
    data->color[2]=color.b;
   
    lines.push_back(data);
    return data;
}
Exemple #21
0
//==================================================================
const FltVec &Param::NumVec( size_t n )
{
	if ( type == FLT_ARR )
	{
		if ( n != DNPOS )
			ensFltArr( n );
	}
	else
	if ( type == INT_ARR )
	{
		if ( n != DNPOS )
		{
			ensIntArr( n );
		}
		else
		{
			// get the proper N from the int array !
			n = u.intArrayVal.size();
		}

		// first time ?
		if ( u.floatArrayVal.size() != n )
		{
			// build it
			u.floatArrayVal.resize( n );
			for (size_t i=0; i < u.intArrayVal.size(); ++i)
				u.floatArrayVal[i] = (float)u.intArrayVal[i];
		}
#ifdef _DEBUG
		else
		{
			// check it !
			for (size_t i=0; i < u.intArrayVal.size(); ++i)
			{
				DASSERT( u.floatArrayVal[i] == (float)u.intArrayVal[i] );
			}
		}
#endif
	}
	else
		badType();

	return u.floatArrayVal;
}
void ZenChanInBubbleHighAngryAnimator::OnFinishCallback(Animator*anim, void*args){
	DASSERT( anim && anim==args );
	ZenChanInBubbleHighAngryAnimator* _this = (ZenChanInBubbleHighAngryAnimator*) anim;
	REMOVE_FROM_ACTION_ANIMATOR( _this );

	FrameRangeAnimation *fra = (FrameRangeAnimation*)AnimationsParser::GetAnimation("ZenChanAngryWalkLeft");
	Sprite *n_sprite = new Sprite(
									_this->GetSprite()->GetX(),
									_this->GetSprite()->GetY(),
									true,
									AnimationFilmHolder::GetFilm("ZenChanAngry"), 
									Terrain::GetActionLayer(), 
									_this->GetSprite()->GoesLeft()
								);
	ZenChanAngryWalkingAnimator *frtor=new ZenChanAngryWalkingAnimator();
	n_sprite->AddStartFallingListener(frtor);
	START_ANIMATOR(frtor, n_sprite, fra, GetGameTime() );
	DESTROY_ANIMATOR( _this );
}
Exemple #23
0
//
// Reads Windows parameters and sets the corresponding values
// in WDesktopProperties
//
void AwtDesktopProperties::GetWindowsParameters() {    
    if (GetEnv()->EnsureLocalCapacity(MAX_PROPERTIES) < 0) {
	DASSERT(0);
	return;
    }
    // this number defines the set of properties available, it is incremented
    // whenever more properties are added (in a public release of course)
    // for example, version 1 defines the properties available in Java SDK version 1.3.
    SetIntegerProperty( TEXT("win.properties.version"), AWT_DESKTOP_PROPERTIES_VERSION);
    GetNonClientParameters();
    GetIconParameters();
    GetColorParameters();
    GetOtherParameters();
    GetSoundEvents();
    GetSystemProperties();
    if (IS_WINXP) {
	GetXPStyleProperties();
    }
}
void CNcdNodeItemLink::InternalizeL( const MNcdPreminetProtocolEntityRef& aData,
                                     const CNcdNodeIdentifier& aParentIdentifier,
                                     const CNcdNodeIdentifier& aRequestParentIdentifier,
                                     const TUid& aClientUid )
    {
    DLTRACEIN((""));
    if( aData.Type() != MNcdPreminetProtocolEntityRef::EItemRef )
        {
        // The data should be for the item
        DLERROR(("Wrong type"));
        DASSERT( EFalse );
        User::Leave( KErrArgument );
        }
    
    // Let the parent do its internalizing
    CNcdNodeLink::InternalizeL( 
        aData, aParentIdentifier, aRequestParentIdentifier, aClientUid );
    DLTRACEOUT((""));
    }
Exemple #25
0
bool OccluderMap::verifyBBoxes(int occluder_id, const vector<FBox> &bboxes) const {
	DASSERT(occluder_id >= 0 && occluder_id < size());

	vector<int> objects = m_occluders[occluder_id].objects;
	std::sort(objects.begin(), objects.end());

	vector<int> bobjects;
	for(int n = 0; n < (int)bboxes.size(); n++)
		m_grid.findAll(bobjects, bboxes[n]);
	for(int n = 0; n < (int)bobjects.size(); n++)
		if(m_grid[bobjects[n]].occluder_id > occluder_id) {
			bobjects[n--] = bobjects.back();
			bobjects.pop_back();
		}
	std::sort(bobjects.begin(), bobjects.end());
	bobjects.resize(std::unique(bobjects.begin(), bobjects.end()) - bobjects.begin());

	return bobjects == objects;
}
Exemple #26
0
// Fix for 4665745.
// Override WmPrint to catch when the list control (not wrapper) should
// operate WM_PRINT to be compatible with the "smooth scrolling" feature.
MsgRouting AwtList::WmPrint(HDC hDC, LPARAM flags)
{
    if (!isWrapperPrint &&
        (flags & PRF_CLIENT) &&
        (GetStyleEx() & WS_EX_CLIENTEDGE))
    {
        int nOriginalDC = ::SaveDC(hDC);
        DASSERT(nOriginalDC != 0);
        // Save a copy of the DC for WmPrintClient
        VERIFY(::SaveDC(hDC));
        DefWindowProc(WM_PRINT, (WPARAM) hDC,
            (flags & (PRF_CLIENT | PRF_CHECKVISIBLE | PRF_ERASEBKGND)));
        VERIFY(::RestoreDC(hDC, nOriginalDC));

        flags &= ~PRF_CLIENT;
    }

    return AwtComponent::WmPrint(hDC, flags);
}
Exemple #27
0
/*
 * client_data is MScrollPanePeer instance
 */
static void 
postScrollEvent(jint jorient, jobject peer, XmScrollBarCallbackStruct *scroll)
{
    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);

    jint jscrollcode;
    jboolean jadjusting = JNI_FALSE;

    switch (scroll->reason) {
      case XmCR_DECREMENT:
	  jscrollcode = java_awt_event_AdjustmentEvent_UNIT_DECREMENT;
	  break;
      case XmCR_INCREMENT:
	  jscrollcode = java_awt_event_AdjustmentEvent_UNIT_INCREMENT;
	  break;
      case XmCR_PAGE_DECREMENT:
	  jscrollcode = java_awt_event_AdjustmentEvent_BLOCK_DECREMENT;
	  break;
      case XmCR_PAGE_INCREMENT:
	  jscrollcode = java_awt_event_AdjustmentEvent_BLOCK_INCREMENT;
	  break;
      case XmCR_DRAG:
	  jscrollcode = java_awt_event_AdjustmentEvent_TRACK;
	  jadjusting = JNI_TRUE;
	  break;
      case XmCR_VALUE_CHANGED:	/* drag finished */
      case XmCR_TO_TOP:
      case XmCR_TO_BOTTOM:
	  jscrollcode = java_awt_event_AdjustmentEvent_TRACK;
	  break;
      default:
	  DASSERT(FALSE);
	  return;
    }

    (*env)->CallVoidMethod(env, peer,  mScrollPanePeerIDs.postScrollEventID,
        jorient, jscrollcode, (jint)scroll->value, jadjusting);

    if ((*env)->ExceptionOccurred(env)) {
        (*env)->ExceptionDescribe(env);
        (*env)->ExceptionClear(env);
    }
}
Dual2<Vec3>
gabor3 (const Dual2<Vec3> &P, const NoiseParams *opt)
{
    DASSERT (opt);
    GaborParams gp (*opt);

    if (gp.do_filter)
        gabor_setup_filter (P, gp);

    Dual2<Vec3> result = make_Vec3 (gabor_evaluate (gp, P, 0),
                                    gabor_evaluate (gp, P, 1),
                                    gabor_evaluate (gp, P, 2));

    float gabor_variance = 1.0f / (4.0f*sqrtf(2.0) * (gp.a * gp.a * gp.a));
    float scale = 1.0f / (3.0f*sqrtf(gabor_variance));
    scale *= 0.5f;  // empirical -- make it fit in [-1..1]

    return result * scale;
}
Dual2<float>
pgabor (const Dual2<Vec3> &P, const Vec3 &Pperiod, const NoiseParams *opt)
{
    DASSERT (opt);
    GaborParams gp (*opt);

    gp.periodic = true;
    gp.period = Pperiod;
    
    if (gp.do_filter)
        gabor_setup_filter (P, gp);

    Dual2<float> result = gabor_evaluate (gp, P);
    float gabor_variance = 1.0f / (4.0f*sqrtf(2.0) * (gp.a * gp.a * gp.a));
    float scale = 1.0f / (3.0f*sqrtf(gabor_variance));
    scale *= 0.5f;  // empirical -- make it fit in [-1..1]

    return result * scale;
}
void MightaInBubbleAnimator::OnBubbleExpiredTime(void* args){
	DASSERT( args );
	MightaInBubbleAnimator* _this = (MightaInBubbleAnimator*) args;
	MovingPathAnimation *mpa = (MovingPathAnimation*) AnimationsParser::GetAnimation("EnemyAgryBubble");
	Sprite *sprite = new Sprite(
								_this->GetSprite()->GetX(),
								_this->GetSprite()->GetY(),
								false,						  
								AnimationFilmHolder::GetFilm( "MightaInBubbleMediumAngry" ), 
								Terrain::GetActionLayer(), 
								true
								);
	MightaInBubbleMediumAngryAnimator* bpbamr = new MightaInBubbleMediumAngryAnimator();
	bpbamr->RegistCollitions(sprite);
	START_ANIMATOR(bpbamr, sprite, mpa, GetGameTime() );

	REMOVE_FROM_ACTION_ANIMATOR( _this );
	DESTROY_ANIMATOR( _this );
}