Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- task CreateViewfinder(initrad, stAng, change) {
- let angle = stAng;
- let rad = initrad;
- let obj = CreateSprite(Hatate, 57, [256, 0, 512, 128], [128, 64]);
- ObjRender_SetPosition(obj, ObjMove_GetX(objEnemy), ObjMove_GetY(objEnemy), 0);
- ObjRender_SetBlendType(obj, BLEND_ALPHA);
- ObjRender_SetAngleZ(obj, angle+90);
- ObjRender_SetAlpha(obj, 155);
- task scale {
- ascent(i in 0..16) {
- ObjRender_SetScaleXYZ(obj, sin(i/15*90)*0.75, 0.75, 0);
- yield;
- }
- }
- scale;
- ascent(i in 0..40){
- ObjRender_SetPosition(obj, ObjMove_GetX(objEnemy)+rad*cos(angle), ObjMove_GetY(objEnemy)+rad*sin(angle), 0);
- ObjRender_SetAngleZ(obj, angle+90);
- rad+=change;
- if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0) { break; }
- yield;
- }
- if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) > 0) {
- PlaySoundEffect("camerashutter", 80, GetCenterX);
- let collide = Collision_Box_Box(ObjRender_GetX(obj), ObjRender_GetY(obj), 192, 93, angle, GetPlayerX, GetPlayerY, 0.5, 0.5, 0);
- if(collide) { ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, GetPlayerX, GetPlayerY, 5); }
- ascent(i in 0..length(objbullets)) {
- collide = Collision_Box_Box(ObjRender_GetX(obj), ObjRender_GetY(obj), 256-24, 128-24, angle-90, ObjMove_GetX(objbullets[i]), ObjMove_GetY(objbullets[i]), 0.01, 0.01, 0);
- if(collide){
- let obj3 = CreateShotA2(ObjMove_GetX(objbullets[i]), ObjMove_GetY(objbullets[i]), ObjMove_GetSpeed(objbullets[i])-0.25, GetAngleToPoint(ObjMove_GetX(objbullets[i]), ObjMove_GetY(objbullets[i]), GetPlayerX, GetPlayerY), 0.075, 4, WHITE54, 0);
- ObjRender_SetAlpha(obj3, 225);
- }
- }
- ViewfinderFlash(ObjRender_GetX(obj), ObjRender_GetY(obj), angle);
- }
- descent(i in 0..31) {
- ObjRender_SetAlpha(obj, i/30*155);
- yield;
- }
- Obj_Delete(obj);
- }
- task ViewfinderFlash(x, y, angle) {
- let obj2 = CreateSprite(Hatate, 58, [256, 128, 512, 256], [128, 64]);
- ObjRender_SetPosition(obj2, x, y, 0);
- ObjRender_SetBlendType(obj2, BLEND_ADD_ARGB);
- ObjRender_SetAngleZ(obj2, angle+90);
- descent(i in 0..15) {
- ObjRender_SetScaleXYZ(obj2, 0.75+(15-i)/75, 0.75+(15-i)/75, 0);
- ObjRender_SetAlpha(obj2, i/10*255);
- yield;
- }
- Obj_Delete(obj2);
- }
- function Collision_Box_Box(cx1, cy1, w1, h1, r1, cx2, cy2, w2, h2, r2) {
- let rectA = CalculateCorners(cx1, cy1, w1, h1, r1);
- let rectB = CalculateCorners(cx2, cy2, w2, h2, r2);
- let axisList = [
- rectA[1] - rectA[0],
- rectA[1] - rectA[2],
- rectB[0] - rectB[3],
- rectB[0] - rectB[1]
- ];
- ascent(i in 0..4){
- if(!IsAxisCollision(axisList[i])){
- return false;
- }
- }
- return true;
- function CalculateCorners(cx, cy, width, height, rotation){
- if(rotation == 0){
- return [
- [cx-width/2, cy-height/2],
- [cx+width/2, cy-height/2],
- [cx+width/2, cy+height/2],
- [cx-width/2, cy+height/2]
- ];
- }
- else {
- let angles = [
- atan2(height/-2, width/-2)+rotation,
- atan2(height/2, width/-2)+rotation,
- atan2(height/2, width/2)+rotation,
- atan2(height/-2, width/2)+rotation
- ];
- let distance = (height^2 + width^2)^0.5/2;
- return [
- [cx+cos(angles[0])*distance, cy+sin(angles[0])*distance],
- [cx+cos(angles[1])*distance, cy+sin(angles[1])*distance],
- [cx+cos(angles[2])*distance, cy+sin(angles[2])*distance],
- [cx+cos(angles[3])*distance, cy+sin(angles[3])*distance]
- ];
- }
- }
- function IsAxisCollision(axis){
- let rectAScalars = [
- GenerateScalar(rectA[0], axis),
- GenerateScalar(rectA[1], axis),
- GenerateScalar(rectA[2], axis),
- GenerateScalar(rectA[3], axis)
- ];
- let rectBScalars = [
- GenerateScalar(rectB[0], axis),
- GenerateScalar(rectB[1], axis),
- GenerateScalar(rectB[2], axis),
- GenerateScalar(rectB[3], axis)
- ];
- let rectAMin = ArrayMin(rectAScalars);
- let rectAMax = ArrayMax(rectAScalars);
- let rectBMin = ArrayMin(rectBScalars);
- let rectBMax = ArrayMax(rectBScalars);
- if(rectBMax <= rectAMax && rectBMax >= rectAMin)
- {
- return true;
- }
- else if (rectAMax <= rectBMax && rectAMax >= rectBMin)
- {
- return true;
- }
- return false;
- }
- function GenerateScalar(corner, axis){
- let num = (corner[0] * axis[0]) + (corner[1] * axis[1]);
- let denom = (axis[0] * axis[0]) + (axis[1] * axis[1]);
- let divisionResult = num / denom;
- let cornerProjected = [divisionResult * axis[0], divisionResult * axis[1]];
- let scalar = (axis[0] * cornerProjected[0]) + (axis[1] * cornerProjected[1]);
- return scalar;
- }
- function ArrayMin(array){
- let minA = array[0];
- ascent(i in 1..length(array)){
- if(array[i] < minA){ minA = array[i]; }
- }
- return minA;
- }
- function ArrayMax(array){
- let maxA = array[0];
- ascent(i in 1..length(array)){
- if(array[i] > maxA){ maxA = array[i]; }
- }
- return maxA;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement