Victory::Victory(float xPosition, float yPosition) : WorldObject(AB_VICTORY, xPosition, yPosition), restartButton(Button(xPosition + AB_VICTORY_TEXT_OFFSET_X, yPosition + AB_VICTORY_TEXT_OFFSET_Y)), victoryText(HUDElement(xPosition + AB_VICTORY_MSG1_X, yPosition + AB_VICTORY_MSG1_Y)), teamText(HUDElement(xPosition + AB_VICTORY_MSG2_X, yPosition + AB_VICTORY_MSG2_Y)) { auto armyengine = ArmyEngine::getInstance(); auto componentFactory = armyengine->getComponentFactory(); //setup the shape component to represent the border of the // victory screen auto shapeComponent = componentFactory.createShapeComponent(AB_VICTORY_SHAPE); this->getEntity()->addComponent(shapeComponent); //shape attributes shapeComponent->setAttribute_int(ATTRIBUTE_ENABLE, 0); shapeComponent->setAttribute_string(ATTRIBUTE_SHAPE_TYPE, SHAPETYPE_RECTANGLE); shapeComponent->setAttribute_float(ATTRIBUTE_WIDTH, 400.0); shapeComponent->setAttribute_float(ATTRIBUTE_HEIGHT, 400.0); COLOR_FILL_BLACK(shapeComponent); COLOR_OUTLINE_GREEN(shapeComponent); shapeComponent->update(); //button parameters restartButton.hide(); restartButton.setButtonText("Restart"); restartButton.setSize(200, 100); restartButton.setButtonCallback((functionEventTemplate) [] (int ID, int eventIndex) { auto entityManager = EntityManager::getInstance(); auto entity = entityManager->getEntityById(ID); sf::Event theEvent = *EventManager::getInstance()->getEvents()[eventIndex]; auto mouseButton = theEvent.mouseButton.button; if (mouseButton == sf::Mouse::Button::Left) { auto world = World::getInstance(); world->menu.hide(); world->victory.hide(); world->generateWorld(); EntityManager::getInstance()->sortEntityList(); #ifdef LOGGING std::cout << "Restart Button Pressed" << std::endl; #endif //LOGGING } return 0; }); //set the Z-buffer of the text to show auto textComponent = restartButton.buttonHUDElement.getEntity()->getComponentByName(AB_HUD_TEXT); textComponent->setAttribute_float(ATTRIBUTE_ZBUFFER, 16.0); //change the text size for the restart button restartButton.buttonHUDElement.setTextSize(50); //text parameters victoryText.setSuccessString(AB_VICTORY_MSG1); victoryText.hide(); teamText.setSuccessString(""); teamText.hide(); }
int Utils::getActiveWeaponId(Player p) { DWORD activeWeapon = *(int*)(p.base + Offsets::activeWeapon); int index = activeWeapon & 0xFFF; index -= 1; Player weapon = getEntityById(index); if (weapon.base == NULL) return 0; int weaponId = *(int*)(weapon.base + Offsets::weaponId); return weaponId; }
int main() { //preallocate the instance auto entityManager = EntityManager::getInstance(); //lets create an entity to place in entity manager auto entity = std::shared_ptr<AbstractEntity> (new MainEntity("Drone", 0)); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Health"))); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Armor"))); entityManager->addEntity(entity); entity = std::shared_ptr<AbstractEntity> (new MainEntity("Drone", 1)); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Health"))); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Armor"))); entityManager->addEntity(entity); entity = std::shared_ptr<AbstractEntity> (new MainEntity("Base", 2)); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Health"))); entity->addComponent(std::shared_ptr<AbstractComponent> (new HealthComponent("Drone Armor"))); entityManager->addEntity(entity); //getting entity by ID auto entity_0 = entityManager->getEntityById(0); std::cout << "Entity ID 0: " << entity_0->getName() << std::endl; //getting entity by Name auto entityList = entityManager->getEntitiesByName("Drone"); std::cout << "list: entities by name 'Drone'" << std::endl; for (auto entity : entityList) { std::cout << "Name: " << entity->getName(); std::cout << "( " << entity->getID() << " )" << std::endl; } //getting entity by Family entityList = entityManager->getEntitiesByFamily("Main"); std::cout << "list: entities by family 'Main'" << std::endl; for (auto entity : entityList) { std::cout << "Name: " << entity->getName(); std::cout << "( " << entity->getID() << " )" << std::endl; } //get all entities in an STL vector auto entityVec = entityManager->getAllEntities(); std::cout << "list: all entities" << std::endl; for (auto entity : entityList) { std::cout << "Name: " << entity->getName(); std::cout << "( " << entity->getID() << " )" << std::endl; } return 0; }
int Utils::getClipCount(Player p) { if (!p.base) return -1; DWORD activeWeapon = *(int*)(p.base + Offsets::activeWeapon); if (!activeWeapon) return -1; int index = activeWeapon & 0xFFF; index -= 1; Player weapon = getEntityById(index); if (!weapon.base) return -1; int clip = *(int*)(weapon.base + Offsets::clip); if (clip >= 0 && clip <= 150) return clip; return -1; }
Button::Button(float xPosition, float yPosition) : WorldObject(AB_BUTTON, xPosition, yPosition), buttonHUDElement(HUDElement(xPosition, yPosition, BUTTON_FONT_SIZE)), buttonText("Test message") { this->setButtonText(buttonText); //change the Z-Buffer of our button to display over the // the button auto textComponent_HUD = this->buttonHUDElement.getEntity()->getComponentByName(AB_HUD_TEXT); textComponent_HUD->setAttribute_float(ATTRIBUTE_ZBUFFER, 4.0); textComponent_HUD->update(); auto armyEngine = ArmyEngine::getInstance(); auto entity = this->getEntity(); auto componentFactory = armyEngine->getComponentFactory(); auto shapeComponent = componentFactory.createShapeComponent(AB_BUTTON_SHAPE); entity->addComponent(shapeComponent); //shape attributes shapeComponent->setAttribute_int(ATTRIBUTE_ENABLE, 1); shapeComponent->setAttribute_string(ATTRIBUTE_SHAPE_TYPE, SHAPETYPE_RECTANGLE); shapeComponent->setAttribute_float(ATTRIBUTE_WIDTH, BUTTON_DEFAULT_WIDTH); shapeComponent->setAttribute_float(ATTRIBUTE_HEIGHT, BUTTON_DEFAULT_HEIGHT); shapeComponent->setAttribute_int(ATTRIBUTE_OUTLINE_COLOR_RED, 0); shapeComponent->setAttribute_int(ATTRIBUTE_OUTLINE_COLOR_BLUE, 255); shapeComponent->setAttribute_int(ATTRIBUTE_OUTLINE_COLOR_GREEN, 0); shapeComponent->setAttribute_int(ATTRIBUTE_OUTLINE_COLOR_ALPHA, 255); shapeComponent->setAttribute_float(ATTRIBUTE_OUTLINE_THICKNESS, BUTTON_DEFAULT_OUTLINE); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_RED, 0); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_BLUE, 128); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_GREEN, 128); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_ALPHA, 255); shapeComponent->setAttribute_float(ATTRIBUTE_OFFSET_X, 0.0); shapeComponent->setAttribute_float(ATTRIBUTE_OFFSET_Y, 0.0); shapeComponent->setAttribute_float(ATTRIBUTE_ZBUFFER, 12.0); shapeComponent->update(); //collision component for mouse over focusing auto collisionComponent = componentFactory.createCollisionComponent(AB_BUTTON_COLLISION); entity->addComponent(collisionComponent); collisionComponent->setAttribute_int(ATTRIBUTE_ENABLE, 1); collisionComponent->setAttribute_string(ATTRIBUTE_COLLISION_BOUND_TYPE, COLLISION_BOUND_RECTANGLE); collisionComponent->setAttribute_float(ATTRIBUTE_WIDTH, BUTTON_DEFAULT_WIDTH); collisionComponent->setAttribute_float(ATTRIBUTE_HEIGHT, BUTTON_DEFAULT_HEIGHT); collisionComponent->setAttribute_string(ATTRIBUTE_COLLISION_TAG, AB_BUTTON); armyEngine->addCollisionCallback(collisionTagTuple(AB_BUTTON, AB_MOUSE), (functionCollisionTemplate) [] (collisionParamTuple paramTuple) { int entityID1, entityID2; std::string compName1, compName2; bool bRegistered; std::tie(entityID1, compName1, entityID2, compName2, bRegistered) = paramTuple; //grab the button entity auto buttonEntity = EntityManager::getInstance()->getEntityById(entityID1); auto shapeComponent = buttonEntity->getComponentByName(AB_BUTTON_SHAPE); auto inputComponent = buttonEntity->getComponentByName(AB_BUTTON_PRESSED); if (bRegistered) { //change the shape component to have new outline shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_RED, 128); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_GREEN, 0); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_BLUE, 0); //enable input component inputComponent->setAttribute_int(ATTRIBUTE_ENABLE, 1); } else { shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_RED, 0); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_GREEN, 128); shapeComponent->setAttribute_int(ATTRIBUTE_FILL_COLOR_BLUE, 128); //disable input component inputComponent->setAttribute_int(ATTRIBUTE_ENABLE, 0); } shapeComponent->update(); return 0; }); auto inputComponent_mousePressed = componentFactory.createInputComponent(AB_BUTTON_PRESSED); entity->addComponent(inputComponent_mousePressed); inputComponent_mousePressed->setAttribute_int(ATTRIBUTE_ENABLE, 0); inputComponent_mousePressed->setAttribute_string(ATTRIBUTE_INPUT_TYPE, INPUT_MOUSE_PRESSED); inputComponent_mousePressed->setAttribute_string(ATTRIBUTE_CALLBACK, AB_BUTTON_PRESSED); armyEngine->addInputCallback(AB_BUTTON_PRESSED, (functionEventTemplate) [] (int ID, int eventIndex) { auto entityManager = EntityManager::getInstance(); auto entity = entityManager->getEntityById(ID); sf::Event theEvent = *EventManager::getInstance()->getEvents()[eventIndex]; auto mouseButton = theEvent.mouseButton.button; if (mouseButton == sf::Mouse::Button::Left) { std::cout << "ERROR: callback hasn't been set" << std::endl; exit(0); } return 0; }); }