public override void Update(TimeSpan delta, TimeSpan absolute) { var transform = GameObject.Transform; var isHit = GameObject.States.HasState(States.IS_HIT); var leftDirection = GameObject.States.HasState(States.LEFT_DIR); var copterSpeed = GameObjectManager.Get.FindGameObjectBySubType(Subtypes.INFO).FindAtt <float>(GameAttr.COPTERSPEED); var hitFrame = GameObject.FindAtt <int>(GameAttr.HITFRAME); // update copter int next = rnd.Next(0, 60); transform.LocalPos.X += copterSpeed.Value * (leftDirection ? -1 : 1); if (isHit && hitFrame.Value++ > 10) { GameObject.States.ResetState(States.IS_HIT); hitFrame.Value = 0; var targetLives = GameObject.FindAtt <int>(GameAttr.PPLIVES); if (targetLives.Value == 0) { SendMessage(new State(Traverses.SCENEROOT, Traverses.CHILD_FIRST), GameActions.GAMEOBJECT_KILLED, GameObject); GameObject.Destroy(); } } if (transform.LocalPos.X < -111 || transform.LocalPos.X > 640) { if (leftDirection) { GameObject.States.ResetState(States.LEFT_DIR); } else { GameObject.States.SetState(States.LEFT_DIR); } } if (!isHit && next == 15 && (transform.LocalPos.X <= 280 || transform.LocalPos.X >= 340) && (transform.LocalPos.X > 150 || transform.LocalPos.X < 580)) { GameObject para = new GameBuilder().CreatePara(new Transform(transform.LocalPos.X + 55, transform.LocalPos.Y + 50)); GameObject.Parent.AddChild(para); } }
private void Shoot(float rotation, float speed, Weapon actualWeapon) { float canonLength = 37; float posX = (float)(318 + 2 + canonLength * Math.Sin(rotation / 180 * Math.PI)); float posY = (float)(223 + (canonLength - canonLength * Math.Cos(rotation / 180 * Math.PI))); float velX = (float)Math.Sin(rotation / 180 * Math.PI) / 4; float velY = -(float)Math.Cos(rotation / 180 * Math.PI) / 4; velX *= speed; velY *= speed; var bullet = new GameBuilder().CreateBullet(new Transform(posX, posY, rotation, 6), new Vector2d(velX, velY), actualWeapon.ImgSource, actualWeapon.IsImmortal); GameObject.SceneRoot.AddChild(bullet); }