void particle_controller::DetectCompositeParticles()
{
	int primsum = 1;
	for (int i = 0; i < maxParticles; i++) {
		if (!spaces[i]) {
			primsum *= particles[i]->GetPrimID();
		}
	}

	int i = maxParticles;
	switch (primsum) {
		case 13013:
			//  Proton
			DeleteParticles();
			i = CreateNew(particle::PROTON);
			particles[i]->AnimatedCreation();
			break;
		case 11011:
			//  Neutron
			DeleteParticles();
			i = CreateNew(particle::NEUTRON);
			particles[i]->AnimatedCreation();
			break;
	}

	if (i != maxParticles) {
		DeSelect(i);
		particles[i]->SetLocation(xSize/2 - particles[i]->GetWidth()/2, ySize/2 - particles[i]->GetHeight()/2);
	}
}
Exemple #2
0
void OSD::ClosePanel(void)
{
    spi_transfer(MAX7456_DMDI_reg);
    spi_transfer(MAX7456_END_string); //This is needed "trick" to finish auto increment
    DeSelect();;
    row++; //only after finish the auto increment the new row will really act as desired
}
//Check where in the inventory the user clicks and trigger appropiate actions
void Inventory::OnClick(DX2D::Vector2f& aPointerPosition)
{
	for (unsigned int i = 0; i < myContents.Size(); ++i)
	{
		if (CommonUtilities::Intersection::PointVsRect(
			Vector2<float>(aPointerPosition.x, aPointerPosition.y)
			, Vector2<float>(myContents[i]->GetPosition().x, myContents[i]->GetPosition().y)
			, Vector2<float>(myContents[i]->GetPosition().x + myContents[i]->GetSprite()->GetSize().x
			, myContents[i]->GetPosition().y + myContents[i]->GetSprite()->GetSize().y)))
		{
			if (mySelectedItem == nullptr)
			{
				mySelectedItem = myContents[i];
				myPreviouslySelectedItem = mySelectedItem;
				UpdateSelectedItem();
				return;
			}
			else
			{
				if (Combine(mySelectedItem, myContents[i]) == true)
				{
					mySelectedItem = nullptr;
					myPreviouslySelectedItem = nullptr;
					UpdateSelectedItem();
					return;
				}
				else if (mySelectedItem == myContents[i])
				{
					DeSelect();
				}
				else
				{
					mySelectedItem = nullptr;
					myPreviouslySelectedItem = nullptr;
					UpdateSelectedItem();
					return;
				}
			}
		}
	}

	//Options area in the inventory
	Vector2f topLeft = { 0.86458f, 1 - 0.0833f };
	Vector2f botRight = { 0.97656f, 1 - 0.032407f };

	if (CommonUtilities::Intersection::PointVsRect(
		Vector2<float>(aPointerPosition.x, aPointerPosition.y), topLeft, botRight) == true)
	{
		mySelectedItem = nullptr;
		myPreviouslySelectedItem = nullptr;
		myOptionsPtr->SetActive(!myOptionsPtr->GetActive());

		Sound* SoundPtr = SoundFileHandler::GetInstance()->GetSound("ButtonClick");

		SoundPtr->SetLooping(false);
		SoundPtr->PlaySound();
		SoundPtr->SetVolume(0.4f);
	}
}
Exemple #4
0
void OSD::Clear()
{
    // clear the screen
    //DIGITAL_WRITE(PORTB, PB3,LOW);
    Select();;
    spi_transfer(MAX7456_DMM_reg);
    spi_transfer(MAX7456_CLEAR_display);
    DeSelect();;
    //DIGITAL_WRITE(PORTB, PB3,HIGH);
}
Exemple #5
0
void OSD::DetectMode()
{
    Select();;

    //read STAT and auto detect Mode PAL/NTSC
    spi_transfer(MAX7456_STAT_reg_read);//status register
    byte osdstat_r = spi_transfer(0xff);

    SetMode((0x02 & osdstat_r)?MAX7456_MODE_NTCS:MAX7456_MODE_PAL);
    DeSelect();;
}
//切换选中状态
BOOL CTrackContrl::Toggle( CControlRect* pObject )
{
	if( IsSelected( pObject ) )
	{
		DeSelect( pObject );
		return TRUE;
	}
	else
	{
		Select( pObject );
		return FALSE;
	}
}
Exemple #7
0
void OSD::Control(uint8_t ctrl)
{
    Select();;
    spi_transfer(MAX7456_VM0_reg);
    switch(ctrl)
    {
    case 0:
        spi_transfer(MAX7456_DISABLE_display | video_mode);
        break;
    case 1:
        //spi_transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_internal);
        //spi_transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_external);
        spi_transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_autosync);
        break;
    }
    //DIGITAL_WRITE(PORTB, PB3,HIGH);
    DeSelect();;
}
Exemple #8
0
void OSD::write_NVM(int font_count, uint8_t *character_bitmap)
{
    byte x;
    byte char_address_hi, char_address_lo;
    byte screen_char;

    char_address_hi = font_count;
    char_address_lo = 0;
//Serial.println("write_new_screen");

    // disable display
    //DIGITAL_WRITE(PORTB, PB3,LOW);
    Select();;
    spi_transfer(MAX7456_VM0_reg);
    spi_transfer(MAX7456_DISABLE_display);

    spi_transfer(MAX7456_CMAH_reg); // set start address high
    spi_transfer(char_address_hi);

    for(x = 0; x < NVM_ram_size; x++) // write out 54 (out of 64) bytes of character to shadow ram
    {
        screen_char = character_bitmap[x];
        spi_transfer(MAX7456_CMAL_reg); // set start address low
        spi_transfer(x);
        spi_transfer(MAX7456_CMDI_reg);
        spi_transfer(screen_char);
    }

    // transfer a 54 bytes from shadow ram to NVM
    spi_transfer(MAX7456_CMM_reg);
    spi_transfer(WRITE_nvr);

    // wait until bit 5 in the status register returns to 0 (12ms)
    while ((spi_transfer(MAX7456_STAT_reg_read) & STATUS_reg_nvr_busy) != 0x00);

    spi_transfer(MAX7456_VM0_reg); // turn on screen next vertical
    spi_transfer(MAX7456_ENABLE_display_vert);
    //DIGITAL_WRITE(PORTB, PB3,HIGH);
    DeSelect();;
}
/* Jag la till den här för att den behövs för att ens kunna ta bort items genom editorn /Danne */
void Inventory::RemoveSelectedItem()
{
	Remove(myPreviouslySelectedItem);
	myPreviouslySelectedItem = nullptr;
	DeSelect();
}
Exemple #10
0
/*
  FLTK event handler
 */
int ViewWindow::handle (int msg)
{
	int ret =  GlWindow::handle (msg);
	int x = fltk::event_x(),y = fltk::event_y(), b = fltk::event_button();

	if(msg == fltk::PUSH)
	{
		click.x = fltk::event_x ();
		click.y = fltk::event_y ();
		last = click;
		if (fltk::event_state() & fltk::SHIFT)
			bBoxSelect=true;
		return -1;
	}

	if(msg == fltk::MOVE)
	{
		last.x = fltk::event_x ();
		last.y = fltk::event_y ();
		return -1;
	}

	if (msg == fltk::DRAG)
	{
		if (bBoxSelect) 
			redraw ();

		last.x = fltk::event_x ();
		last.y = fltk::event_y ();
	}

	if(msg == fltk::RELEASE)
	{
		if(bBoxSelect)
		{
			int sx=fltk::event_x (), sy = fltk::event_y ();
			int ex=click.x, ey=click.y;

			if (sx>ex) std::swap (sx,ex);
			if (sy>ey) std::swap (sy,ey);

			Select (sx,sy, ex-sx,ey-sy, true);
			bBoxSelect=false;
			redraw ();
		}
		else
		{
			if(click.x == x && click.y == y)
			{
				if(b == 1)
					Select(click.x-SELECT_W/2, click.y-SELECT_W/2, SELECT_W, SELECT_W, false);
				else if(b == 3)
					DeSelect ();
			}
		}
		return -1;
	}

	if(msg == fltk::ENTER)
		return 1;

	if(msg == fltk::LEAVE)
	{
		if(x < this->x() || x > this->x()+w() || y<this->y() || y >this->y()+h())
			bBoxSelect=false;
	}

	return ret;
}