void HitTimingGraph::Draw(Window& _win) { // Make sure there is something to draw if (bins.size() == 0) return; // get highest bin for normalization int max = 1; for (int i = 0; i < bins.size(); i++) if (bins[i] > max) max = bins[i]; int seperation = 2; double xScale = ((double)width/(double)bins.size()) - ((double)seperation/(double)bins.size()); double yScale = (double)height / (double)max; _win.driver->draw2DLine(vector2di(absXpos, absYpos), vector2di(absXpos + xScale*bins.size(), absYpos), SColor(255, 255, 255, 255)); SColor color; core::stringw text; for (int i = 0; i < bins.size(); i++) { text = textBins[i]; color = colorTable.getColor(i); _win.driver->draw2DRectangle(color, rect<s32>(absXpos + xScale*i, absYpos - yScale*bins[i], absXpos + xScale*(i + 1) - seperation, absYpos)); _win.font->draw(text, core::rect<s32>(absXpos + xScale*i, absYpos, 100, 10), video::SColor(255, 255, 255, 255)); _win.font->draw(core::stringw(bins[i]), core::rect<s32>(absXpos + xScale*i, absYpos - yScale*bins[i] - 10, 100, 10), video::SColor(255, 255, 255, 255)); } }
void NBEditor::load() { IGUIStaticText* sidebar = state->menu->sidebar; IGUIEnvironment* guienv = state->device->getGUIEnvironment(); if (sidebar) { sidebar->setText(L"Node Box Tool"); IGUIStaticText* t = guienv->addStaticText(L"No node selected", rect<s32>(20, 30, 140, 100), false, true, sidebar, ENB_GUI_MAIN_MSG); IGUIListBox* lb = guienv->addListBox(rect<s32>(20, 30, 230, 128), sidebar, ENB_GUI_MAIN_LISTBOX, true); if (lb) { lb->setVisible(false); IGUIButton* b1 = guienv->addButton(rect<s32>(0, 100, 50, 125), lb, GUI_PROJ_NEW_BOX, L"+", L"Add a node box"); IGUIButton* b2 = guienv->addButton(rect<s32>(60, 100, 110,125), lb, GUI_PROJ_DELETE_BOX, L"-", L"Delete node box"); b1->setNotClipped(true); b2->setNotClipped(true); } // Create nodebox properties t = guienv->addStaticText(L"Properties", rect<s32>(0, 170, 120, 190), false, true, sidebar, ENB_GUI_PROP); t->setVisible(false); // Add name properties box guienv->addStaticText(L"Name:", rect<s32>(10, 30, 50, 50), false, true, t)->setNotClipped(true); guienv->addEditBox(L"", rect<s32>(60, 30, 210, 50), true, t, ENB_GUI_PROP_NAME)->setNotClipped(true); // Add positioning addXYZ(t, guienv, vector2di(10, 60), ENB_GUI_PROP_X1); addXYZ(t, guienv, vector2di(10, 160), ENB_GUI_PROP_X2); // 60 // Add buttons guienv->addButton(rect<s32>(30, 250, 100, 280), t, ENB_GUI_PROP_UPDATE, L"Update", L"")->setNotClipped(true); guienv->addButton(rect<s32>(110, 250, 180, 280), t, ENB_GUI_PROP_REVERT, L"Revert", L"")->setNotClipped(true); } load_ui(); }
void irrgamePlayerStub::run(irrgameApp* application) { //TODO: run app in other thread //start events handler UserEventsHandler->startEventProcess(); io::IReadFile* file = io::SharedFileSystem::getInstance().createReadFile( "/Users/gregorytkach/workspace/irrgame_sdk/src/vendors/libpng/pngtest.png"); video::IImage* img = video::IImage::createImage(file); video::ITexture* t = new video::COpenGLTexture(img, "/Users/gregorytkach/workspace/irrgame_sdk/src/vendors/libpng/pngbar.png", 0, VideoDriver); while (runInternal()) { utils::ITimer::tick(); events::SharedEventScheduler::getInstance().proceedNextRealTimeEvent(); VideoDriver->beginScene(); VideoDriver->draw2DImage(t, vector2di(50, 50), recti(50, 50, 150, 150)); //scenemanager->drawAll(); VideoDriver->endScene(); } //stop events handler UserEventsHandler->stopEventProcess(); }
void addXYZ(IGUIElement* parent,IGUIEnvironment* guienv, vector2di pos,int startIndex){ addBox(parent,guienv,vector2di(pos.X,pos.Y),startIndex,L"X"); // 0,0 addBox(parent,guienv,vector2di(pos.X,pos.Y+30),startIndex+1,L"Y"); // 80, 0 addBox(parent,guienv,vector2di(pos.X,pos.Y+60),startIndex+2,L"Z"); // 160, 0 }
// ---------------------------------------------------------------------------- void Terrain::draw(const TerrainMod& tm) { vector3df p1 = tm.ray.start - getPosition(); vector3df p2 = tm.ray.end - getPosition(); vector3df v = (p2 - p1).normalize(); float t = -p1.Y / v.Y; vector3df p = vector3df(p1.X + v.X * t, 0, p1.Z + v.Z * t); u32 ix = (int)(p.X / (m_x / m_nx) + 0.5); u32 iz = (int)(p.Z / (m_z / m_nz) + 0.5); if (ix < 0 || iz < 0 || ix >= m_nx || iz >= m_nz) return; u8* img; img = (u8*) m_material.getTexture(1)->lock(ETLM_READ_WRITE); vector2df tex = m_mesh.vertices[iz * m_nx + ix].TCoords2; vector2di tc = vector2di((int)(tex.X * SPIMG_X), (int)(tex.Y * SPIMG_X)); int r = (int)(tm.radius / m_x * SPIMG_X); double e; for (int i = tc.X - r; i < tc.X + r; i++) for (int j = tc.Y - r; j < tc.Y + r; j++) { if ((i - tc.X)*(i - tc.X) + (j - tc.Y)*(j - tc.Y) < r*r) if ((i > 0 && i < (s32)SPIMG_X && j > 0 && j < (s32)SPIMG_Y)) { TerrainChange terr_ch; terr_ch.x = i; terr_ch.z = j; e = tm.dh / 5.0f; if (!tm.left_click) e *= -1; if (tm.edge_type > 1) { e *= (1 - ((i - tc.X)*(i - tc.X) + (j - tc.Y)*(j - tc.Y)) / (f32)(r*r)); if (tm.edge_type == 3) e = sqrt(fabs(e)) * e / fabs(e); } for (int k = 0; k < 4; k++) terr_ch.old_v[k] = img[j * SPIMG_X * 4 + i * 4 + k]; switch (tm.type) { case HARD_BRUSH: pixelHardBrush(img, j * SPIMG_X * 4 + i * 4, tm.col_mask, !tm.left_click); break; case SOFT_BRUSH: pixelSoftBrush(img, j * SPIMG_X * 4 + i * 4, tm.col_mask, e); break; case BRIGHTNESS_MOD: pixelBrigBrush(img, j * SPIMG_X * 4 + i * 4, e * 255); break; } for (int k = 0; k < 4; k++) terr_ch.vchanged[k] = (terr_ch.old_v[k] != img[j * SPIMG_X * 4 + i * 4 + k]); terr_ch.img = img; tm.cmd->addVertex(&terr_ch); } } m_material.getTexture(1)->unlock(); m_material.getTexture(1)->regenerateMipMapLevels(); } // draw
bool ClientEventReceiver::OnEvent(const SEvent& event) { if (event.EventType == irr::EET_KEY_INPUT_EVENT) { KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown; if (event.KeyInput.Key >= KEY_KEY_1 && event.KeyInput.Key <= KEY_KEY_9) { if (Universe::instance->guienv->getFocus() != Universe::instance->guienv->getRootGUIElement()->getElementFromId(ChatBox)->getElementFromId(ChatInputEditBox)) { IGUIElement* hkb = Universe::instance->guienv->getRootGUIElement()->getElementFromId(HotkeyBar); CGUIButton* btn = ((IGUIIconTable*)hkb)->getButtonAt(event.KeyInput.Key - KEY_KEY_1); if (btn) { SEvent clickEvent; clickEvent.EventType = EET_GUI_EVENT; clickEvent.GUIEvent.EventType = EGET_BUTTON_CLICKED; clickEvent.GUIEvent.Caller = btn; Universe::instance->render->device->postEventFromUser(clickEvent); } } } else if (KeyIsDown[KEY_ESCAPE]) { //Return to the main menu delete Universe::instance->login; delete Universe::instance->password; Universe::instance->login = NULL; Universe::instance->password = NULL; Universe::instance->state = NextLevel; } else if (KeyIsDown[KEY_RETURN]) { Universe::instance->guienv->setFocus(Universe::instance->guienv->getRootGUIElement()->getElementFromId(ChatBox)->getElementFromId(ChatInputEditBox)); } } else if(event.EventType == irr::EET_MOUSE_INPUT_EVENT) { for (s32 i = 0; i < EMIE_COUNT; ++i) Mouse[i] = i == event.MouseInput.Event; IGUIElement* guiElement = Universe::instance->guienv->getRootGUIElement()->getElementFromPoint(vector2di(event.MouseInput.X, event.MouseInput.Y)); if (guiElement != NULL) { //Mouse is in a window area if (guiElement->getID() != 0) //Mouse is on GUI element return false; } else //Mouse is not in a window area return false; if (Mouse[EMIE_LMOUSE_PRESSED_DOWN]) { CurrentMapObject<MapObject>* targetCurrentMapObject; CGUIButton* leftMouseBind = ((IGUIIconTable*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(HotkeyBar))->selectedButton; if (leftMouseBind) { int targetType; char outPacket[256]; if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentNPC>(Universe::instance->currentLocation->currentNPCs, Universe::instance->currentLocation->currentNPCsCount)) { targetType = 0; } else if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentCharacter>(Universe::instance->currentLocation->currentCharacters, Universe::instance->currentLocation->currentCharactersCount)) { targetType = 3; } else targetType = -1; CreatePacket(outPacket, SkillUse, "%i%b%i", leftMouseBind->currentGameObject->id, targetType, targetCurrentMapObject ? targetCurrentMapObject->id : 0); Universe::instance->connectSocket->Send(outPacket); } } else if (Mouse[EMIE_RMOUSE_PRESSED_DOWN]) { CurrentMapObject<MapObject>* targetCurrentMapObject; if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentNPC>(Universe::instance->currentLocation->currentNPCs, Universe::instance->currentLocation->currentNPCsCount)) { char outPacket[256]; CreatePacket(outPacket, DialogOpen, "%i%i", targetCurrentMapObject->id, 0); Universe::instance->connectSocket->Send(outPacket); } else if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentItem>(Universe::instance->currentLocation->currentItems, Universe::instance->currentLocation->currentItemsCount)) { char outPacket[256]; f32 distance = vector2d<f32>(targetCurrentMapObject->x, targetCurrentMapObject->y).getDistanceFrom(vector2d<f32>(Universe::instance->currentCharacter->x, Universe::instance->currentCharacter->y)); if (distance < 3.0f) { CreatePacket(outPacket, ItemPickUp, "%i", targetCurrentMapObject->id); } else { //Emulate character's move request to this item double targetX, targetY; //TODO: other angles targetX = targetCurrentMapObject->x + (targetCurrentMapObject->x < Universe::instance->currentCharacter->x ? 1.0f : -1.0f); targetY = targetCurrentMapObject->y + (targetCurrentMapObject->y < Universe::instance->currentCharacter->y ? 1.0f : -1.0f); CreatePacket(outPacket, Move, "%f%f", targetX, targetY); } Universe::instance->connectSocket->Send(outPacket); } else { //Move char outPacket[256]; vector2d<f32> clickPos = Universe::instance->render->MouseCoordToWorldCoord(); if (clickPos.X > 0 && clickPos.X < Universe::instance->currentLocation->width && clickPos.Y > 0 && clickPos.Y < Universe::instance->currentLocation->height) if (Universe::instance->currentLocation->mask[(int)clickPos.Y][(int)clickPos.X] == Free) //TODO: see 'void Location::SpawnStatic(CurrentStatic* currentStatic)' { CreatePacket(outPacket, Move, "%f%f", clickPos.X, clickPos.Y); Universe::instance->connectSocket->Send(outPacket); } } } else if (Mouse[EMIE_MOUSE_WHEEL]) { f32 cameraNextY = Universe::instance->cameraY + event.MouseInput.Wheel * 5.0f; if (cameraNextY > 5.0f && cameraNextY < 200.0f) Universe::instance->cameraY = cameraNextY; } } else if (event.EventType == EET_GUI_EVENT) { s32 eventCallerId = event.GUIEvent.Caller->getID(); IGUIElement* eventCaller = event.GUIEvent.Caller; switch(event.GUIEvent.EventType) { case RPGATOR_EET_ELEMENT_DRAGGED: if (event.GUIEvent.Element) { //Element dragged to an GUI element if (event.GUIEvent.Element->getParent()) { //Element dragged to an GUI element that has parent (IGUIIconTableContainer) if (event.GUIEvent.Element->getParent()->getID() == HotkeyBar) { //Empty cell CGUIButton* hotkeyButton = new CGUIButton(*((CGUIButton*)event.GUIEvent.Caller)); ((IGUIIconTable::IGUIIconTableContainer*)event.GUIEvent.Element)->setButton(hotkeyButton); } else if (event.GUIEvent.Element->getParent()->getParent()) { //Element dragged to an GUI element that has parent (IGUIIconTable) if (event.GUIEvent.Element->getParent()->getParent()->getID() == HotkeyBar) { //Existing cell CGUIButton* hotkeyButton = new CGUIButton(*((CGUIButton*)event.GUIEvent.Caller)); ((IGUIIconTable::IGUIIconTableContainer*)event.GUIEvent.Element->getParent())->setButton(hotkeyButton); } } } } break; case EGET_EDITBOX_ENTER: switch (eventCallerId) { case ChatInputEditBox: IGUIElement* eb = Universe::instance->guienv->getRootGUIElement()->getElementFromId(ChatBox)->getElementFromId(ChatInputEditBox); if (wcslen(eb->getText()) > 0) { char outPacket[256]; CreatePacket(outPacket, Say, "%b%ws", Public, eb->getText()); Universe::instance->connectSocket->Send(outPacket); eb->setText(NULL); } break; } break; case EGDT_WINDOW_CLOSE: switch (eventCallerId) { case InventoryWindow: ((IGUIButton*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(InventoryToggleButton))->setPressed(false); break; case SkillsWindow: ((IGUIButton*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(SkillsToggleButton))->setPressed(false); break; } break; case EGET_BUTTON_CLICKED: switch (eventCallerId) { case IconTableItemButton: { char outPacket[256]; CreatePacket(outPacket, ItemUse, "%i", ((CGUIButton*)eventCaller)->currentGameObject->id); Universe::instance->connectSocket->Send(outPacket); break; } case IconTableSkillButton: { ((IGUIIconTable*)eventCaller->getParent()->getParent())->selectedButton = (CGUIButton*)eventCaller; //rightMouseBind = eventCaller; /* char outPacket[256]; CurrentMapObject<MapObject>* targetCurrentMapObject; int currentMapObjectId; int targetType; if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentNPC>(Universe::instance->currentLocation->currentNPCs, Universe::instance->currentLocation->currentNPCsCount)) { currentMapObjectId = targetCurrentMapObject->id; targetType = 0; } else if (targetCurrentMapObject = (CurrentMapObject<MapObject>*)Universe::instance->render->GetCurrentMapObjectUnderCursor<CurrentCharacter>(Universe::instance->currentLocation->currentCharacters, Universe::instance->currentLocation->currentCharactersCount)) { currentMapObjectId = targetCurrentMapObject->id; targetType = 3; } else { currentMapObjectId = 0; targetType = -1; } CreatePacket(outPacket, SkillUse, "%i%b%i", ((CGUIButton*)eventCaller)->currentGameObject->id, targetType, currentMapObjectId); Universe::instance->connectSocket->Send(outPacket); */ break; } case InventoryToggleButton: { IGUIWindow* wnd = (IGUIWindow*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(InventoryWindow); if (wnd) wnd->remove(); else { int btnsSize = 48; wnd = Universe::instance->guienv->addWindow(rect< s32 >(Universe::instance->render->screenWidth - btnsSize * 6 - (6 - 1) * 2 - 20, 150, Universe::instance->render->screenWidth, 150 + 100 + btnsSize * 6 + (6 - 1) * 2 + 10), false, L"Inventory", NULL, InventoryWindow); IGUIIconTable* tbl = new IGUIIconTable(Universe::instance->guienv, wnd, InventoryItemsIconTable, rect< s32 >(10, 100, 10 + btnsSize * 6 + (6 - 1) * 2, 100 + btnsSize * 6 + (6 - 1) * 2), 6, 6); tbl->buttonSize = btnsSize; wnd->addChild(tbl); for (int i = 0; i < Universe::instance->currentCharacter->currentItemsCount; i++) { tbl->addButton((CurrentGameObject<GameObject>*)Universe::instance->currentCharacter->currentItems[i], IconTableItemButton); } } break; } case SkillsToggleButton: { IGUIWindow* wnd = (IGUIWindow*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(SkillsWindow); if (wnd) wnd->remove(); else { int btnsSize = 48; wnd = Universe::instance->guienv->addWindow(rect< s32 >(Universe::instance->render->screenWidth - btnsSize * 6 - (6 - 1) * 2 - 20 - 400, 150, Universe::instance->render->screenWidth - 400, 150 + 100 + btnsSize * 6 + (6 - 1) * 2 + 10), false, L"Skills", NULL, SkillsWindow); IGUIIconTable* tbl = new IGUIIconTable(Universe::instance->guienv, wnd, SkillsIconTable, rect< s32 >(10, 100, 10 + btnsSize * 6 + (6 - 1) * 2, 100 + btnsSize * 6 + (6 - 1) * 2), 6, 6); tbl->buttonSize = btnsSize; wnd->addChild(tbl); for (int i = 0; i < Universe::instance->currentCharacter->currentSkillsCount; i++) { tbl->addButton((CurrentGameObject<GameObject>*)Universe::instance->currentCharacter->currentSkills[i], IconTableSkillButton); } } break; } case ChatInputEditBox: Universe::instance->guienv->getRootGUIElement()->getElementFromId(ChatInputEditBox)->setText(L""); break; default: if (eventCallerId > DialogElement) //Dialog button { char outPacket[256]; int currentNPCId; swscanf(eventCaller->getParent()->getText(), L"[%d]", ¤tNPCId); eventCaller->getParent()->remove(); CreatePacket(outPacket, DialogOpen, "%i%i", currentNPCId, eventCallerId - DialogElement); Universe::instance->connectSocket->Send(outPacket); } break; } break; case EGET_COMBO_BOX_CHANGED: break; case EGET_TAB_CHANGED: break; case EGET_CHECKBOX_CHANGED: break; } } return false; }
bool Player::ProcessEvent(const SGUIEvent* e) { SWRayObjIntersect isc; //screen ray intersection bool rc = false; //rotation change flag mmask_t modb = BUTTON_CTRL | BUTTON_SHIFT | BUTTON_ALT; switch (e->t) { case GUIEV_MOUSE: if (e->m.bstate & (GUISCRL_UP | GUISCRL_DW)) { //Wheel (camera rotation) if ((e->m.bstate & modb) == rot_ver) rot.X += (e->m.bstate & GUISCRL_UP)? rspd:-rspd; else if ((e->m.bstate & modb) == rot_hor) rot.Z -= (e->m.bstate & GUISCRL_UP)? rspd:-rspd; else return false; rc = true; } else if (e->m.bstate == BUTTON1_PRESSED) { //Action button isc = *(world->ScreenRay(vector2di(e->m.x,e->m.y))); switch (state) { case PCS_EXPLORING: if (!isc.model) return true; if (isc.model == model) { world->LogMsg("SELFPOINT_LOG"); } else if (isc.actor) { world->GetMsgSys()->SetActorName(isc.actor->GetAttributes().name); if (isc.actor->GetAttributes().female) world->LogMsg("ACTRESS_LOG"); else world->LogMsg("ACTOR_LOG"); } break; case PCS_INTERACTING: //TODO break; case PCS_COMBAT: if (isc.pnt != vector3di(-1)) world->FireTo(isc.pnt,&isc); break; default: break; } } else return false; break; case GUIEV_KEYPRESS: switch (binder->DecodeKey(e->k)) { default: return false; case PAKEY_WALK_FORW: Move(LMOVE_FORW,1.2f); break; //FIXME: use speed value case PAKEY_WALK_BACK: Move(LMOVE_BACK,1.2f); break; case PAKEY_WALK_LEFT: Move(LMOVE_LEFT,1.2f); break; case PAKEY_WALK_RGHT: Move(LMOVE_RGHT,1.2f); break; case PAKEY_RUN_FORW: Move(LMOVE_FORW,2.2f); break; //FIXME: use speed value case PAKEY_RUN_BACK: Move(LMOVE_BACK,2.2f); break; case PAKEY_RUN_LEFT: Move(LMOVE_LEFT,2.2f); break; case PAKEY_RUN_RGHT: Move(LMOVE_RGHT,2.2f); break; case PAKEY_TURN_LEFT: rot.Z += rspd; rc = true; break; case PAKEY_TURN_RGHT: rot.Z -= rspd; rc = true; break; case PAKEY_TURN_UP: rot.X += rspd; rc = true; break; case PAKEY_TURN_DW: rot.X -= rspd; rc = true; break; case PAKEY_TOG_STATE: //TODO: check conditions, apply some changes etc switch (state) { case PCS_EXPLORING: state = PCS_INTERACTING; break; case PCS_INTERACTING: state = PCS_COMBAT; break; case PCS_COMBAT: state = PCS_EXPLORING; break; case PCS_VEHICLE: break; } } break; default: return false; } if (rc) SetRot(rot); //Update rotation return true; }