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); } }
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); } }
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); }
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; } }
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();; }
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(); }
/* 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; }