You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.1 KiB
Objective-C

#import "Camera.h"
#import "properties.h"
@implementation GameCamera
@synthesize camera;
@synthesize mode;
-(id) init {
if ((self = [super init])) {
camera.position = (Vector3){0.0f, 2.0f, 0.0f};
camera.target = (Vector3){0.0f, 0.0f, 1.0f};
camera.up = (Vector3){0.0f, 1.0f, 0.0f};
camera.fovy = 90.0f;
camera.projection = CAMERA_PERSPECTIVE;
mode = CAMERA_CUSTOM;
crosshair = (Vector2){default_properties.width/2, default_properties.height/2};
crosshairColor = WHITE;
crosshairSize = 2.0f;
}
return self;
}
-(void) update {
Vector2 mouseDelta = GetMouseDelta();
CameraYaw(&camera, -mouseDelta.x * 0.008, false);
CameraPitch(&camera, -mouseDelta.y * 0.008, true, false, false);
camera.position = [attachedPlayer pos];
}
-(void) attach: (Player *) player {
attachedPlayer = player;
[attachedPlayer setAttachedCamera: self];
}
-(void) showPos {
char buffer[50];
sprintf(buffer, "pos: (%.02f, %.02f, %.02f)", camera.position.x, camera.position.y, camera.position.z);
DrawText(buffer, 0, 0, 20, BLACK);
}
-(void) showTarget {
char buffer[50];
sprintf(buffer, "tgt: (%.02f, %.02f, %.02f)", camera.target.x, camera.target.y, camera.target.z);
DrawText(buffer, 0, 30, 20, BLACK);
}
-(void) drawCrosshair {
DrawCircleV(crosshair, crosshairSize, crosshairColor);
}
-(void) drawWeapon {
if (attachedPlayer != nil) {
Texture2D texture = [attachedPlayer weapon];
DrawTexture(texture, 0.0f, 0.0f, WHITE);
}
}
-(bool) raycast {
BoundingBox bbox = {(Vector3){-1.0f, -1.0f, -1.0f}, (Vector3){2.0f, 2.0f, 2.0f}};
//i called them both raycast to maximize confusion
if ( ObjectiveCBugFixRaycast(camera, bbox).hit ) {
crosshairColor = RED;
} else {
crosshairColor = WHITE;
}
#define DEBUG
#ifdef DEBUG
BeginMode3D(camera);
DrawBoundingBox(bbox, BLUE);
#endif
EndMode3D();
return ObjectiveCBugFixRaycast(camera, bbox).hit;
}
-(Camera3D *) addressOfCamera {
return &camera;
}
@end