Merge pull request #147 from westonCoder/cutscene-portal-override

Force Places Auto Portals on Conflict
This commit is contained in:
lambertjamesd 2023-05-03 20:59:30 -06:00 committed by GitHub
commit 78560952be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 3 deletions

View file

@ -124,7 +124,6 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
<br />
## Current New Feature TODO List
- [ ] force placing auto portals when there is a conflict
- [ ] rotate auto uv
- [ ] disable portal surfaces manually on some surfaces
- [ ] Portal not rendering recursively sometimes
@ -135,6 +134,7 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
- [ ] Adding loading notice between levels #45
- [ ] Vertex lighting #39
- [ ] Multi controller support #23
- [x] force placing auto portals when there is a conflict
- [x] Camera shake
- [x] Portal gun movement with player movement/shooting #19

View file

@ -197,6 +197,7 @@ void sceneInitNoPauseMenu(struct Scene* scene) {
scene->last_portal_indx_shot=-1;
scene->looked_wall_portalable_0=0;
scene->looked_wall_portalable_1=0;
scene->continuouslyAttemptingPortalOpen=0;
scene->freeCameraOffset = gZeroVec;
@ -284,6 +285,9 @@ void sceneCheckPortals(struct Scene* scene) {
int hasBlue = (scene->player.flags & PlayerHasFirstPortalGun) != 0;
int hasOrange = (scene->player.flags & PlayerHasSecondPortalGun) != 0;
if (scene->continuouslyAttemptingPortalOpen){
sceneFirePortal(scene, &scene->savedPortal.ray, &scene->savedPortal.transformUp, scene->savedPortal.portalIndex, scene->savedPortal.roomIndex, 0, 0);
}
if (fireOrange && hasOrange && !playerIsGrabbing(&scene->player)) {
sceneFirePortal(scene, &raycastRay, &playerUp, 0, scene->player.body.currentRoom, 1, 0);
@ -334,7 +338,6 @@ void sceneCheckPortals(struct Scene* scene) {
if (scene->player.flags & PlayerHasFirstPortalGun){
if (sceneFirePortal(scene, &raycastRay, &playerUp, 0, scene->player.body.currentRoom, 1, 1)){
scene->looked_wall_portalable_0 = 1;
}
if (sceneFirePortal(scene, &raycastRay, &playerUp, 1, scene->player.body.currentRoom, 1, 1)){
@ -766,7 +769,19 @@ int sceneFirePortal(struct Scene* scene, struct Ray* ray, struct Vector3* player
quatLook(&hitDirection, &upDir, &portalLocation.rotation);
}
return sceneOpenPortal(scene, &portalLocation, relativeIndex, portalIndex, mappingRange, hit.object, hit.roomIndex, fromPlayer, just_checking);
if (!sceneOpenPortal(scene, &portalLocation, relativeIndex, portalIndex, mappingRange, hit.object, hit.roomIndex, fromPlayer, just_checking) && !fromPlayer){
sceneClosePortal(scene, 1-portalIndex);
scene->continuouslyAttemptingPortalOpen = 1;
scene->savedPortal.portalIndex = portalIndex;
scene->savedPortal.ray = *ray;
scene->savedPortal.roomIndex = roomIndex;
scene->savedPortal.transformUp = *playerUp;
return 0;
}
if (!fromPlayer){
scene->continuouslyAttemptingPortalOpen = 0;
}
return 1;
}
void sceneClosePortal(struct Scene* scene, int portalIndex) {

View file

@ -22,6 +22,13 @@
#include "ball_catcher.h"
#include "portal_gun.h"
struct SavedPortal{
struct Ray ray;
struct Vector3 transformUp;
int portalIndex;
int roomIndex;
};
struct Scene {
struct Camera camera;
struct Player player;
@ -41,6 +48,7 @@ struct Scene {
struct CollisionObject* dynamicColliders;
struct BallLauncher* ballLaunchers;
struct BallCatcher* ballCatchers;
struct SavedPortal savedPortal;
OSTime cpuTime;
OSTime lastFrameStart;
OSTime lastFrameTime;
@ -58,6 +66,7 @@ struct Scene {
u8 last_portal_indx_shot;
u8 looked_wall_portalable_0;
u8 looked_wall_portalable_1;
u8 continuouslyAttemptingPortalOpen;
};
extern struct Scene gScene;