void _UpdateMover(long time, System.Collections.Generic.IEnumerable<Utility.OBB> obbs) { if (_MoveSpeed > 0) { var dt = (float)new System.TimeSpan(time - _CurrentTime).TotalSeconds; if (dt > 0) { Regulus.CustomType.Vector2 moveVector = new CustomType.Vector2(); moveVector.X = _UnitVector.X * dt * _MoveSpeed; moveVector.Y = _UnitVector.Y * dt * _MoveSpeed; _CurrentTime = time; Utility.OBB testobb = new Utility.OBB(_Obb.getX() + moveVector.X, _Obb.getY() + moveVector.Y, _Obb.getWidth(), _Obb.getHeight()); testobb.setRotation(_Obb.getRotation()); foreach (var obb in obbs) { if (testobb.isCollision(obb) == false) { continue; } Utility.OBB safeobb = new Utility.OBB(_Obb.getX() , _Obb.getY() , _Obb.getWidth(), _Obb.getHeight()); safeobb.setRotation(_Obb.getRotation()); do { moveVector.X += 0 - _UnitVector.X * dt * _MoveSpeed; moveVector.Y += 0 - _UnitVector.Y * dt * _MoveSpeed; safeobb.setXY(_Obb.getX() + moveVector.X, _Obb.getY() + moveVector.Y ); } while (safeobb.isCollision(obb)); if (PositionEvent != null) PositionEvent(time, moveVector); _Act(ActionStatue.GangnamStyle, 0, 0); return; } if (PositionEvent != null) PositionEvent(time, moveVector); } } else { _Update = _Empty; } }
public ActorMoverAbility(float direction , float x , float y) { _Update = _Empty; _Direction = direction; _Obb = new Utility.OBB(x,y,0.5f,0.5f); }