Exemple #1
0
        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;
            }
        }
Exemple #2
0
 public ActorMoverAbility(float direction , float x , float y)
 {
     _Update = _Empty;
     _Direction = direction;
     _Obb = new Utility.OBB(x,y,0.5f,0.5f);
 }