Revision | b93168b39560f10fbc792d0ad2478731da17c48f (tree) |
---|---|
Zeit | 2020-01-14 06:56:59 |
Autor | sebastian_bugiu <sebastian_ <bugiu@head...> |
Commiter | sebastian_bugiu <sebastian_ |
Pbs workflow now taken into account when creating item. 3rd person view for player ship now adapted for larger ship. Further adaptation might be needed. Updated ambient light source in level patrol.
@@ -1365,6 +1365,7 @@ | ||
1365 | 1365 | case SCENEMANAGER_ITEM_CREATE: |
1366 | 1366 | { |
1367 | 1367 | BufferRead<long long> bufferReadLong; |
1368 | + BufferRead<char> bufferReadChar; | |
1368 | 1369 | alignPointer(&buf, 4); |
1369 | 1370 | long long int sceneManagerPtr = bufferReadLong.read(&buf); |
1370 | 1371 | Ogre::SceneManager *sceneManager = (Ogre::SceneManager*) getLongAsPointer(sceneManagerPtr); |
@@ -1372,6 +1373,7 @@ | ||
1372 | 1373 | bool ptrJustCreated = isPointerJustCreated(ptrFlag); |
1373 | 1374 | long long int itemPtr = bufferReadLong.read(&buf); |
1374 | 1375 | const Ogre::String &meshName = readString(&buf); |
1376 | + char workflow = bufferReadChar.read(&buf); | |
1375 | 1377 | Ogre::Item *item = sceneManager->createItem(meshName); |
1376 | 1378 | addToItemList(item, MovableObjectType::ITEM); |
1377 | 1379 | Ogre::String name(std::string("create_item ") + meshName); |
@@ -1383,12 +1385,14 @@ | ||
1383 | 1385 | for (size_t i = 0; i < itemsCount; ++i) |
1384 | 1386 | { |
1385 | 1387 | Ogre::SubItem *pSubItem = item->getSubItem(i); |
1386 | - Ogre::HlmsPbsDatablock *datablock = (Ogre::HlmsPbsDatablock*) pSubItem->getDatablock(); | |
1387 | - datablock->setWorkflow(Ogre::HlmsPbsDatablock::Workflows::MetallicWorkflow); | |
1388 | + if (workflow != (char) Ogre::HlmsPbsDatablock::Workflows::SpecularWorkflow) | |
1389 | + { | |
1390 | + Ogre::HlmsPbsDatablock *datablock = (Ogre::HlmsPbsDatablock*) pSubItem->getDatablock(); | |
1391 | + datablock->setWorkflow((Ogre::HlmsPbsDatablock::Workflows) workflow); | |
1392 | + } | |
1388 | 1393 | write(&wbuf, getPointerAsLong(pSubItem)); |
1389 | 1394 | } |
1390 | 1395 | |
1391 | - | |
1392 | 1396 | } |
1393 | 1397 | break; |
1394 | 1398 | case SCENEMANAGER_ITEM_CREATE_ALL_PARAMS: |
@@ -1404,6 +1408,7 @@ | ||
1404 | 1408 | const Ogre::String &meshName = readString(&buf); |
1405 | 1409 | const Ogre::String &groupName = readString(&buf); |
1406 | 1410 | char sceneMemoryMgrTypeChar = bufferReadChar.read(&buf); |
1411 | + char workflow = bufferReadChar.read(&buf); | |
1407 | 1412 | Ogre::Item *item = sceneManager->createItem(meshName, groupName, |
1408 | 1413 | sceneMemoryMgrTypeChar == 0 ? ::Ogre::SCENE_DYNAMIC : ::Ogre::SCENE_STATIC); |
1409 | 1414 | addToItemList(item, MovableObjectType::ITEM); |
@@ -1416,8 +1421,11 @@ | ||
1416 | 1421 | for (size_t i = 0; i < itemsCount; ++i) |
1417 | 1422 | { |
1418 | 1423 | Ogre::SubItem *pSubItem = item->getSubItem(i); |
1419 | - Ogre::HlmsPbsDatablock *datablock = (Ogre::HlmsPbsDatablock*) pSubItem->getDatablock(); | |
1420 | - datablock->setWorkflow(Ogre::HlmsPbsDatablock::Workflows::MetallicWorkflow); | |
1424 | + if (workflow != (char) Ogre::HlmsPbsDatablock::Workflows::SpecularWorkflow) | |
1425 | + { | |
1426 | + Ogre::HlmsPbsDatablock *datablock = (Ogre::HlmsPbsDatablock*) pSubItem->getDatablock(); | |
1427 | + datablock->setWorkflow((Ogre::HlmsPbsDatablock::Workflows) workflow); | |
1428 | + } | |
1421 | 1429 | write(&wbuf, getPointerAsLong(pSubItem)); |
1422 | 1430 | } |
1423 | 1431 | } |
@@ -0,0 +1,25 @@ | ||
1 | +package headwayent.hotshotengine.renderer; | |
2 | + | |
3 | +public enum ENG_Workflows { | |
4 | + /// Specular workflow. Many popular PBRs use SpecularAsFresnelWorkflow | |
5 | + /// though. @see setWorkflow | |
6 | + SpecularWorkflow(0), | |
7 | + | |
8 | + /// Specular workflow where the specular texture is addressed to the fresnel | |
9 | + /// instead of kS. This is normally referred as simply Specular workflow | |
10 | + /// in many other PBRs. @see setWorkflow | |
11 | + SpecularAsFresnelWorkflow(1), | |
12 | + | |
13 | + //// Metallic workflow. @see setWorkflow | |
14 | + MetallicWorkflow(2); | |
15 | + | |
16 | + private byte workflow; | |
17 | + | |
18 | + private ENG_Workflows(int i) { | |
19 | + workflow = (byte) i; | |
20 | + } | |
21 | + | |
22 | + public byte getWorkflow() { | |
23 | + return workflow; | |
24 | + } | |
25 | +} |
@@ -62,6 +62,7 @@ | ||
62 | 62 | import headwayent.hotshotengine.renderer.ENG_TextAreaOverlayElement; |
63 | 63 | import headwayent.hotshotengine.renderer.ENG_TextureNative; |
64 | 64 | import headwayent.hotshotengine.renderer.ENG_TiledAnimationNative; |
65 | +import headwayent.hotshotengine.renderer.ENG_Workflows; | |
65 | 66 | import headwayent.hotshotengine.renderer.nativeinterface.classwrappers.ENG_NativePointer; |
66 | 67 | import headwayent.hotshotengine.renderer.nativeinterface.classwrappers.ENG_NativePointerWithSetter; |
67 | 68 |
@@ -1159,12 +1160,17 @@ | ||
1159 | 1160 | } |
1160 | 1161 | |
1161 | 1162 | public static void sceneManager_createItem(final ENG_Item item, String meshName, final int subItemCount) { |
1163 | + sceneManager_createItem(item, meshName, subItemCount, ENG_Workflows.SpecularWorkflow); | |
1164 | + } | |
1165 | + | |
1166 | + public static void sceneManager_createItem(final ENG_Item item, String meshName, final int subItemCount, ENG_Workflows workflow) { | |
1162 | 1167 | ENG_RenderingThread.writeByte(NativeCallsList.SCENEMANAGER_ITEM_CREATE.getCallPos()); |
1163 | 1168 | ENG_SceneManager sceneManager = ENG_RenderRoot.getRenderRoot().getSceneManager(); |
1164 | 1169 | ENG_RenderingThread.writeLong(sceneManager.getPointer()); |
1165 | 1170 | item.setPointer(ENG_Utility.getUniqueId()); |
1166 | 1171 | setPtr(item, true); |
1167 | 1172 | writeString(meshName); |
1173 | + ENG_RenderingThread.writeByte(workflow.getWorkflow()); | |
1168 | 1174 | ENG_RenderingThread.addFrameEndListener(new ENG_RenderedFrameListenerWithBufferCopyWithLock( |
1169 | 1175 | ENG_Long.SIZE_IN_BYTES * (subItemCount + 1), true) { |
1170 | 1176 | @Override |
@@ -1176,7 +1182,12 @@ | ||
1176 | 1182 | |
1177 | 1183 | public static void sceneManager_createItem(final ENG_Item item, String meshName, String groupName, |
1178 | 1184 | ENG_Common.SceneMemoryMgrTypes type, final int subItemCount) { |
1179 | - ENG_RenderingThread.writeByte(NativeCallsList.SCENEMANAGER_ITEM_CREATE.getCallPos()); | |
1185 | + sceneManager_createItem(item, meshName, groupName, type, subItemCount, ENG_Workflows.SpecularWorkflow); | |
1186 | + } | |
1187 | + | |
1188 | + public static void sceneManager_createItem(final ENG_Item item, String meshName, String groupName, | |
1189 | + ENG_Common.SceneMemoryMgrTypes type, final int subItemCount, ENG_Workflows workflow) { | |
1190 | + ENG_RenderingThread.writeByte(NativeCallsList.SCENEMANAGER_ITEM_CREATE_ALL_PARAMS.getCallPos()); | |
1180 | 1191 | ENG_SceneManager sceneManager = ENG_RenderRoot.getRenderRoot().getSceneManager(); |
1181 | 1192 | ENG_RenderingThread.writeLong(sceneManager.getPointer()); |
1182 | 1193 | item.setPointer(ENG_Utility.getUniqueId()); |
@@ -1184,6 +1195,7 @@ | ||
1184 | 1195 | writeString(meshName); |
1185 | 1196 | writeString(groupName); |
1186 | 1197 | ENG_RenderingThread.writeByte(type.getPos()); |
1198 | + ENG_RenderingThread.writeByte(workflow.getWorkflow()); | |
1187 | 1199 | ENG_RenderingThread.addFrameEndListener(new ENG_RenderedFrameListenerWithBufferCopyWithLock( |
1188 | 1200 | ENG_Long.SIZE_IN_BYTES * (subItemCount + 1), true) { |
1189 | 1201 | @Override |
@@ -26,7 +26,7 @@ | ||
26 | 26 | |
27 | 27 | private CameraProperties cameraProperties; |
28 | 28 | private final ENG_Quaternion tempOrientation = new ENG_Quaternion(true); |
29 | - private final ENG_Vector4D cameraDelta = new ENG_Vector4D(0.0f, 30.0f, 150.0f, 1.0f); | |
29 | + private final ENG_Vector4D cameraDelta = new ENG_Vector4D(0.0f, 50.0f, 200.0f, 1.0f); | |
30 | 30 | private final ENG_Vector4D finalCameraPos = new ENG_Vector4D(); |
31 | 31 | private final ENG_Vector4D tempCameraPos = new ENG_Vector4D(); |
32 | 32 | private final LinkedList<ENG_Vector4D> finalCameraPositions = new LinkedList<>(); |
@@ -5,10 +5,10 @@ | ||
5 | 5 | skybox SkyboxWorkspace0 |
6 | 6 | light_dir -1.0 0.0 0.0 |
7 | 7 | light_type directional |
8 | - light_power_scale 1.0 | |
9 | - light_diffuse_color 1.0 1.0 1.0 1.0 | |
8 | + light_power_scale 3.14 | |
9 | + light_diffuse_color 0.8 0.4 0.2 1.0 | |
10 | 10 | light_specular_color 0.8 0.4 0.2 1.0 |
11 | - ambient_light_upperhemi_lowerhemi_dir 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 -1.0 0.0 0.0 | |
11 | + ambient_light_upperhemi_lowerhemi_dir 0.3 0.5 0.7 0.1 0.6 0.45 0.3 0.1 -1.0 0.0 0.0 | |
12 | 12 | // play_cutscene sl_level_patrol_begin |
13 | 13 | // use_skybox_data_from_level 1 |
14 | 14 | player_ship_selection |