diff --git a/Enum.h b/Enum.h index 68c0755..5c4dea7 100644 --- a/Enum.h +++ b/Enum.h @@ -14,4 +14,10 @@ namespace Enum Ball = 0, Block = 1, Cylinder = 2 }; } + namespace Controller + { + enum Value { + Player = 7, KeyboardRight = 1, KeyboardLeft = 2, Joypad1 = 3, Joypad2 = 4, Chase = 5, Flee = 6, None = 0 + }; + } } \ No newline at end of file diff --git a/GUDButtonListener.cpp b/GUDButtonListener.cpp index aae080a..f493cad 100644 --- a/GUDButtonListener.cpp +++ b/GUDButtonListener.cpp @@ -44,6 +44,10 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) if(g_selectedInstances.at(i)->canDelete) { g_selectedInstances.at(i)->setParent(inst); + if(PartInstance* part = dynamic_cast(g_selectedInstances.at(i))) + { + inst->primaryPart = part; + } } /*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z)); g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/ diff --git a/GroupInstance.cpp b/GroupInstance.cpp index f6be69c..908e99f 100644 --- a/GroupInstance.cpp +++ b/GroupInstance.cpp @@ -6,6 +6,7 @@ GroupInstance::GroupInstance(void) name = "Model"; className = "GroupInstance"; listicon = 12; + primaryPart = NULL; } GroupInstance::GroupInstance(const GroupInstance &oinst) @@ -14,6 +15,7 @@ GroupInstance::GroupInstance(const GroupInstance &oinst) name = "Model"; className = "GroupInstance"; listicon = 12; + primaryPart = NULL; } GroupInstance::~GroupInstance(void) @@ -39,4 +41,37 @@ std::vector GroupInstance::unGroup() children[0]->setParent(parent); } return child; +} + +void GroupInstance::render(RenderDevice * rd) +{ + Instance::render(rd); + if(primaryPart != NULL && controllerFlagShown && getControllerColor(controller) != Color3::gray()) + { + rd->disableLighting(); + Vector3 vec = Vector3(0,0,0); + Vector3 up = Vector3(0,8,0); + rd->setColor(getControllerColor(controller)); + rd->setObjectToWorldMatrix(primaryPart->cFrame); + rd->beforePrimitive(); + + glBegin(GL_LINES); + glVertex3f(vec.x, vec.y, vec.z); + glVertex3f(up.x, up.y, up.z); + glEnd(); + + glBegin( GL_TRIANGLES ); + glVertex3f(up.x, up.y-2, up.z); + glVertex3f(up.x, up.y-1, up.z-2); + glVertex3f(up.x, up.y, up.z); + + glVertex3f(up.x, up.y, up.z); + glVertex3f(up.x, up.y-1, up.z-2); + glVertex3f(up.x, up.y-2, up.z); + + glEnd(); + rd->afterPrimitive(); + rd->setColor(Color3::white()); + rd->enableLighting(); + } } \ No newline at end of file diff --git a/GroupInstance.h b/GroupInstance.h index 072645e..08baed3 100644 --- a/GroupInstance.h +++ b/GroupInstance.h @@ -12,4 +12,5 @@ public: virtual void PropUpdate(LPPROPGRIDITEM &pItem); std::vector unGroup(); PartInstance * primaryPart; + void render(RenderDevice * r); }; diff --git a/PVInstance.cpp b/PVInstance.cpp index f94c6d2..5dc627c 100644 --- a/PVInstance.cpp +++ b/PVInstance.cpp @@ -7,6 +7,7 @@ PVInstance::PVInstance(void) controllerFlagShown = true; className = "PVInstance"; listicon = 0; + controller = (Enum::Controller::Value)0; } PVInstance::PVInstance(const PVInstance &oinst) @@ -22,6 +23,46 @@ void PVInstance::postRender(RenderDevice* rd) { } +static TCHAR* enumStr(int controller) +{ + switch(controller) + { + case Enum::Controller::None: + return "None"; + case Enum::Controller::KeyboardLeft: + return "KeyboardLeft"; + case Enum::Controller::KeyboardRight: + return "KeyboardRight"; + case Enum::Controller::Joypad1: + return "Joypad1"; + case Enum::Controller::Joypad2: + return "Joypad2"; + case Enum::Controller::Chase: + return "Joypad1"; + case Enum::Controller::Flee: + return "Joypad2"; + } +} + +static Enum::Controller::Value strEnum(TCHAR * tval) +{ + if(strcmp(tval, "KeyboardLeft") == 0) + return Enum::Controller::KeyboardLeft; + if(strcmp(tval, "KeyboardRight") == 0) + return Enum::Controller::KeyboardRight; + if(strcmp(tval, "Joypad1") == 0) + return Enum::Controller::Joypad1; + if(strcmp(tval, "Joypad2") == 0) + return Enum::Controller::Joypad2; + if(strcmp(tval, "Chase") == 0) + return Enum::Controller::Chase; + if(strcmp(tval, "Flee") == 0) + return Enum::Controller::Flee; + return Enum::Controller::None; +} + + + std::vector PVInstance::getProperties() { std::vector properties = Instance::getProperties(); @@ -31,6 +72,21 @@ std::vector PVInstance::getProperties() "This chooses whether the item name is shown", nameShown, PIT_CHECK)); + properties.push_back(createPGI( + "Item", + "ControllerFlagShown", + "This chooses whether the item's ControllerFlag is shown", + controllerFlagShown, + PIT_CHECK)); + properties.push_back(createPGI( + "Behaviour", + "Controller", + "This chooses what type of controller is used", + (LPARAM)enumStr(controller), + PIT_COMBO, + TEXT("None\0KeyboardRight\0KeyboardLeft\0Joypad1\0Joypad2\0Chase\0Flee") + )); + return properties; } void PVInstance::PropUpdate(LPPROPGRIDITEM &pItem) @@ -39,5 +95,13 @@ void PVInstance::PropUpdate(LPPROPGRIDITEM &pItem) { nameShown = (bool)pItem->lpCurValue; } + if(strcmp(pItem->lpszPropName, "ControllerFlagShown") == 0) + { + controllerFlagShown = (bool)pItem->lpCurValue; + } + if(strcmp(pItem->lpszPropName, "Controller") == 0) + { + controller = strEnum((TCHAR *)pItem->lpCurValue); + } else Instance::PropUpdate(pItem); } diff --git a/PVInstance.h b/PVInstance.h index e150523..c22436f 100644 --- a/PVInstance.h +++ b/PVInstance.h @@ -1,5 +1,6 @@ #pragma once #include "instance.h" +#include "enum.h" class PVInstance : public Instance @@ -13,4 +14,21 @@ public: virtual void PropUpdate(LPPROPGRIDITEM &pItem); bool nameShown; bool controllerFlagShown; + Enum::Controller::Value controller; +protected: + static G3D::Color3 getControllerColor(int controller) + { + switch(controller) + { + case Enum::Controller::KeyboardLeft: + return Color3::red(); + case Enum::Controller::KeyboardRight: + return Color3::blue(); + case Enum::Controller::Chase: + return Color3::black(); + case Enum::Controller::Flee: + return Color3::yellow(); + } + return Color3::gray(); + } };