MCPcopy Create free account
hub / github.com/assaultcube/AC / flagdropped

Function flagdropped

source/src/entities.cpp:540–584  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

538}
539
540void flagdropped(int flag, float x, float y, float z)
541{
542 flaginfo &f = flaginfos[flag];
543 if(OUTBORD(x, y)) return; // valid pos
544 bounceent p;
545 p.plclipped = true;
546 p.rotspeed = 0.0f;
547 p.o.x = x;
548 p.o.y = y;
549 p.o.z = z;
550 p.vel.z = -0.8f;
551 p.aboveeye = 1.0f;
552 p.eyeheight = p.maxeyeheight = 0.1f;
553 p.radius = 0.1f;
554
555 bool oldcancollide = false;
556 if(f.actor)
557 {
558 oldcancollide = f.actor->cancollide;
559 f.actor->cancollide = false; // avoid collision with owner
560 }
561 loopi(100) // perform physics steps
562 {
563 moveplayer(&p, 10, true, 50);
564 if(p.stuck) break;
565 }
566 if(p.o.z < waterlevel)
567 {
568 p.aboveeye = 6.7f;
569 loopirev((waterlevel - p.o.z) / 0.2f + 1)
570 {
571 p.o.z += 0.2f;
572 if(p.o.z > z) p.radius = 1.0f; // don't float through small holes in the ceiling
573 if(collide(&p)) break;
574 }
575 if(p.o.z > waterlevel) p.o.z = waterlevel;
576 }
577 if(f.actor) f.actor->cancollide = oldcancollide; // restore settings
578
579 f.pos.x = floor(p.o.x + 0.5f);
580 f.pos.y = floor(p.o.y + 0.5f);
581 f.pos.z = floor(p.o.z * 5 + 0.5f) / 5;
582 f.flagent->spawned = true;
583 f.ack = true;
584}
585
586void flaginbase(int flag)
587{

Callers 1

parsemessagesFunction · 0.85

Calls 4

moveplayerFunction · 0.85
collideFunction · 0.85
loopiFunction · 0.70
loopirevFunction · 0.70

Tested by

no test coverage detected