/// <summary> /// Parses a substring from an bullet file name, determines which property that substring represents, and assigns the corresponding enum /// </summary> /// <param name="bulletObject">original bullet object</param> /// <param name="bulletSubstring">substring taken from an bullet's filename e.g. arg, xl, or mk2</param> /// <returns>object with the new property added</returns> private BulletModel ParseBulletSubstring(BulletModel bulletObject, string bulletSubstring) { if (bulletObject.Version == null && int.TryParse(bulletSubstring, out int bulletVersion)) { bulletObject.Version = bulletVersion; return(bulletObject); } if (bulletObject.Faction == null && Enum.TryParse(bulletSubstring, true, out FactionType bulletFaction)) { bulletObject.Faction = bulletFaction; return(bulletObject); } if (bulletObject.Size == null && Enum.TryParse(bulletSubstring, true, out BulletSize bulletSize)) { bulletObject.Size = bulletSize; return(bulletObject); } if (bulletObject.Type == null && Enum.TryParse(bulletSubstring, true, out BulletType bulletType)) { bulletObject.Type = bulletType; return(bulletObject); } if (bulletObject.Grade == null && Enum.TryParse(bulletSubstring, true, out BulletGrade bulletGrade)) { bulletObject.Grade = bulletGrade; return(bulletObject); } throw new Exception($"Failed to parse bullet substring \"{bulletSubstring}\""); }
private BulletModel SerializeToBulletModel(BaseGraph graph, BulletGraphAsset asset) { List <Bullet_Node> rootNodes = NodeHelper.GetNodes <Bullet_Node>(graph); if (rootNodes.Count <= 0) { Debug.LogError($"试图序列化出错,没有根节点"); } Bullet_Node node = rootNodes[0]; BulletModel buletModel = new BulletModel(); buletModel.id = asset.bulletId; buletModel.asset = node.asset; buletModel.radius = node.radius; buletModel.hitTimes = node.hitTimes; buletModel.sameTargetDelay = node.sameTargetDelay; buletModel.removeOnObstacle = node.removeOnObstacle; buletModel.hitEnemy = node.hitEnemy; buletModel.hitFriend = node.hitFriend; buletModel.moveFunc = node.GetMoveFunc(); buletModel.catchFunc = node.GetCatchFunc(); buletModel.onCreateFunc = node.GetOnCreateFuncs(); buletModel.onRemovedFunc = node.GetOnRemovedFuncs(); buletModel.onHitFunc = node.GetOnHitFuncs(); return(buletModel); }
public override AbstractFiringPattern Exec() { double i = start, j = stop, tempRadius = 5; firingrate = 65; texture = TextureNames.LaserBullet; while (i < j) { var invis1 = MainContent.ModelFactory.BuildGenericModel(TextureNames.Invisible, start, stop, fromModel.GetLocation(), fromModel); invis1.SetOrbitAngle(0); invis1.SetSourceModel(fromModel); invis1.SetOrbitSpeed(10); invis1.SetOrbitRadius(tempRadius); MainContent.Events.AddScheduledTaggedEvent(start, stop, fromModel, () => invis1.MoveOrbit()); var invis2 = MainContent.ModelFactory.BuildGenericModel(TextureNames.Invisible, start, stop, fromModel.GetLocation(), fromModel); invis2.SetOrbitAngle(180); invis2.SetSourceModel(fromModel); invis2.SetOrbitSpeed(10); invis2.SetOrbitRadius(tempRadius); MainContent.Events.AddScheduledTaggedEvent(start, stop, fromModel, () => invis2.MoveOrbit()); var t1 = invis1.GetLocation(); var t2 = invis1.GetLocation(); //first bullet. BulletModel bullet1 = MainContent.ModelFactory.BuildEnemyBulletModel(texture, i, i + bulletLife, t1, fromModel); bullet1.SetRate(speed); bullet1.SetSourceModel(invis1); bullet1.SetDestinationModel(MainContent.PlayerShip); MainContent.Events.AddSingleTaggedEvent(i, fromModel, () => bullet1.SetLocationFromSourcetModel()); MainContent.Events.AddSingleTaggedEvent(i, fromModel, () => bullet1.SetAngleFromDestinationModel()); MainContent.Events.AddScheduledTaggedEvent(i, i + bulletLife, fromModel, () => bullet1.MoveLinearAngle()); //second bullet. BulletModel bullet2 = MainContent.ModelFactory.BuildEnemyBulletModel(texture, i, i + bulletLife, t2, fromModel); bullet2.SetRate(speed); bullet2.SetSourceModel(invis2); bullet2.SetDestinationModel(MainContent.PlayerShip); MainContent.Events.AddSingleTaggedEvent(i, fromModel, () => bullet2.SetLocationFromSourcetModel()); MainContent.Events.AddSingleTaggedEvent(i, fromModel, () => bullet2.SetAngleFromDestinationModel()); MainContent.Events.AddScheduledTaggedEvent(i, i + bulletLife, fromModel, () => bullet2.MoveLinearAngle()); i += 1 / firingrate; if (tempRadius > 75) { continue; } else { tempRadius += .5; } } return(this); }
public BulletController SpawnBulletType() { BulletModel bulletModel = new BulletModel(bulletLists.bullets[tankService.tank_no]); BulletController bulletController = new BulletController(bulletModel, bulletView); return(bulletController); }
public void Shoot(int i) { // animator.SetInteger("Shoot", i); ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线,到点击的坐标 var point = GetPoint(ray.GetPoint(0), ray.direction, Vector3.up, new Vector3(0, hitPoint.y, 0)); realPosition = new Vector3(point.x, transform.position.y, point.z); isShoot = true; //SetRotation(realPosition); if (i < 30) { return; } BulletModel bulletModel = new BulletModel() { Count = 3, Speed = 5, Angle = 30 }; bulletModel.Set(hitPoint, transform.rotation); // , Count, LifeTime, BulletSpeed, Angle, Distance if (LimitI > CdTime * 50) { BulletManager.Instance.DoShoot(bulletModel, bulletPool); LimitI = 0; } }
//public static BulletManager Instance; //void Awake() //{ // Instance = this; //} /// <summary> /// 发射子弹 /// </summary> /// <param name="bulletModel"></param> /// <param name="pool"></param> public void DoShoot(BulletModel bulletModel, BasePool pool) { int num = bulletModel.Count / 2; for (int i = 0; i < bulletModel.Count; i++) { GameObject go = pool.Get(bulletModel.InitPosition, bulletModel.LifeTime); //从对象池中获取 // 初始位置即enemy当前位置 BulletMove bulletMove = go.GetComponent <BulletMove>(); var render = go.GetComponent <MeshRenderer>(); if (render != null) { go.GetComponent <MeshRenderer>().material?.SetColor("_EmissionColor", bulletModel.Color); } bulletMove.BulletSpeed = bulletModel.Speed; bulletMove.DelayTime = bulletModel.DelayTime; if (bulletModel.Count % 2 == 1) { go.transform.rotation = bulletModel.Direction * Quaternion.Euler(0, 0, -(bulletModel.Angle * num)); // 绕Z轴旋转 , 要带负号 go.transform.position = go.transform.position + go.transform.right * num * bulletModel.Distance; num--; } else { go.transform.rotation = bulletModel.Direction * Quaternion.Euler(0, 0, -(bulletModel.Angle / 2 + bulletModel.Angle * (num - 1))); // 绕Z轴旋转 go.transform.position = go.transform.position + go.transform.right * ((num - 1) * bulletModel.Distance + bulletModel.Distance / 2); num--; } go.transform.position = go.transform.position + go.transform.forward * bulletModel.ShiftInitPos; } }
public override AbstractFiringPattern Exec() { double i = start; speed = 2; firingrate = 1000; //default firing rate. angle = rnd.Next(0, 360); //generate random angle for laser. while (i < stop) //Similar to Laser, just with increasing speed for each subsequent bullet. { var t = fromModel.GetLocation(); speed += .5; BulletModel bullet = MainContent.ModelFactory.BuildEnemyBulletModel(TextureNames.LaserBullet, i, i + bulletLife, t, fromModel); bullet.SetLinearTravelAngle(angle); bullet.SetRate(speed); bullet.SetSourceModel(fromModel); bullet.SetDestinationModel(MainContent.PlayerShip); MainContent.Events.AddSingleTaggedEvent(i, fromModel, () => bullet.SetLocationFromSourcetModel()); MainContent.Events.AddScheduledTaggedEvent(i, i + bulletLife, fromModel, () => bullet.MoveLinearAngle()); scheduledEvents.Add(new GameEvents.Event(start, stop, bullet)); i += 1 / firingrate; } return(this); }
/// <summary> /// Populates an bullet object for a given bullet file path /// </summary> /// <param name="bulletFilePath"></param> /// <returns></returns> public BulletModel PopulateBullet(string bulletFilePath) { string bulletFileName = Path.GetFileName(bulletFilePath); List <string> bulletFileNameSubParts = bulletFileName.Split('_').ToList(); bulletFileNameSubParts.Remove("bullet"); bulletFileNameSubParts.Remove("macro.xml"); BulletModel bullet = new BulletModel(); bullet.WeaponType = DetermineBulletWeaponType(bulletFileNameSubParts); if (bullet.WeaponType == BulletWeaponType.turret) { bulletFileNameSubParts.Remove("turret"); } bulletFileNameSubParts = RemoveMultitermBulletFileNameParameters(bulletFileNameSubParts); bulletFileNameSubParts.ForEach(x => bullet = ParseBulletSubstring(bullet, x)); XmlDocument bulletXml = new XmlDocument(); bulletXml.Load(bulletFilePath); bullet.Properties = ParseBulletPropertiesXml(bulletXml); bullet.Faction ??= FactionType.GEN; bullet.Name = GenerateBulletName(bullet).Trim(); return(bullet); }
public void RemoveBullet(BulletModel bullet) { EnemyBulletList.Remove(bullet); Events.RemoveFutureTaggedEvents(bullet); Events.RemoveAllTaggedEvents(bullet.GetHashCode() + "static".GetHashCode()); enemyBulletList = EnemyBulletList.Except(RemoveBullet(bullet.GetHashCode() + "static".GetHashCode())).ToList(); }
public override AbstractFiringPattern Exec() { double i = 1; var invis1 = MainContent.ModelFactory.BuildGenericModel(TextureNames.Invisible, start, stop, fromModel.GetLocation(), fromModel); invis1.SetSourceModel(fromModel); //MainContent.Events.AddScheduledTaggedEvent(start, stop, fromModel, () => invis1.MoveOrbit()); while (i < 360) { BulletModel bullet = MainContent.ModelFactory.BuildEnemyBulletModel(texture, fromModel.StartLife, fromModel.EndLife, invis1.GetLocation(), fromModel); bullet.SetOrbitAngle(i); bullet.SetSourceModel(invis1); bullet.SetOrbitSpeed(speed); bullet.SetRate(speed); double tag = fromModel.GetHashCode() + "static".GetHashCode(); double middle = (start + stop) / 2; MainContent.Events.AddScheduledTaggedEvent(start, stop, tag, () => bullet.MoveOrbit()); MainContent.Events.AddScheduledTaggedEvent(start, start + 1, tag, () => bullet.IncrementOrbitRadius()); MainContent.Events.AddScheduledTaggedEvent(start + 1, middle, tag, () => bullet.DecrementOrbitRadius()); MainContent.Events.AddScheduledTaggedEvent(middle + 1, stop, tag, () => bullet.ToggleOrbitRate()); MainContent.Events.AddSingleTaggedEvent(start, TextureNames.Invisible, () => invis1.SetLocationFromSourcetModel()); i += density; scheduledEvents.Add(new GameEvents.Event(start, stop, bullet)); } return(this); }
//тригеры для пули public void TriggerBulletDeath(Collider other, BulletModel model, GameObject obj) { if (other.CompareTag("DeathZone") || other.CompareTag("Asteroid")) { tmpBullet = obj; app.model.delBulletCollection(model); } }
public IBullet CreateBullet(IAttackable attackable) { var presenter = GameObject.Instantiate(originalBulletObject); BulletModel model = new BulletModel(attackable, levelData); presenter.Initialize(model); return(model); }
public PlayerModel(ILevelData levelData, IStage stage) { this.levelData = levelData; this.stage = stage; originalBulletObject = levelData.PlayerBullet; moveVelocity = levelData.PlayerMoveVelocity; position.Value = new Vector2(0, -2.3f); }
public BulletController(BulletModel model, Transform spawnPoint, EnemyController target, int turretLevel) { _model = model; _view = BulletFactory.InstantiateView(spawnPoint, _model.PrefabName, this); _target = target; _model.Level = turretLevel; _target.AddObserver(this); }
public BulletsPool(BulletModel bulletModel, BulletView bulletView, Transform poolsParent) { _bulletModel = bulletModel; _bulletView = bulletView; PoolManager.SetRoot(poolsParent); PoolManager.WarmPool(_bulletView.gameObject, _bulletModel.BulletsCountInPool); }
public void CreateBullet(Vector3 position, Quaternion rotation, BulletScriptableObject type) { BulletScriptableObject bullet = type; BulletModel bulletModel = new BulletModel(bullet); BulletController bulletController = new BulletController(bulletModel, bullet.BulletView, position, rotation); bullets.Add(bulletController); }
public BulletController SpawnBullet() { BulletScriptableObjects bulletScriptableObject = bulletConfig[0]; BulletModel BulletModel = new BulletModel(bulletScriptableObject); BulletController BulletController = new BulletController(BulletModel, bulletPrefab); return(BulletController); }
// Good bullet factories public BulletModel BuildGoodBulletModel(string texture, double startTime, double stopTime, Point startPosition) { var gm = new BulletModel(startPosition, 3, MainContent.Textures[TextureNames.GoodBullet]); TimeToLiveTagged(startTime, stopTime, gm, gm); gm.SetLifespan(startTime, stopTime); return(gm); }
// Enemy bullet factories public BulletModel BuildEnemyBulletModel(string texture, double startTime, double stopTime, Point startPosition, BaseModel source) { var bm = new BulletModel(startPosition, 3, MainContent.Textures[texture]); TimeToLiveTagged(startTime, stopTime, source, bm); bm.SetLifespan(startTime, stopTime); return(bm); }
private DanmakuBullet CreateBullet(BulletModel bulletModel) { // Core GameKit Integration Transform bulletTransform = PoolBoss.Spawn(ProjectilePrefab.transform, new Vector3(0, 0, 0), new Quaternion(0, 0, 0, 0), PoolBoss.Instance.transform); DanmakuBullet bullet = bulletTransform.GetComponentInChildren <DanmakuBullet>(); return(bullet); }
//модели зарегестрированные на игровой карте public void RegisterModelBullet(BulletModel bulletmodel) { ////даем уникальный ID //bulletmodel.BulletId = _registerBullets.Count(); //_registerBullets.Enqueue(bulletmodel); _hubContext.Clients.All.instantiateBullet(bulletmodel); }
public BulletController SpawnBullet(Vector3 bulletPosition, Quaternion bulletRotation) { Debug.Log("spawningBullet"); BulletModel bulletModel = new BulletModel(bulletScriptableObjectList.bulletList[0]); BulletController bulletController = new BulletController(bulletModel, bulletView, bulletPosition, bulletRotation); return(bulletController); }
public BulletController(BulletModel model, BulletView view) { _view = view; // Bind Model model.Velocity.Subscribe(v => _view.SetVelocity(v)); // Bind View view.TriggerEnterEvents.Subscribe(_ => Destroy()); }
public BulletController(BulletModel bulletModel, BulletView bulletPrefab, Vector3 position, Quaternion rotation) { BulletModel = bulletModel; BulletView = GameObject.Instantiate <BulletView>(bulletPrefab, position, rotation); //BulletView = GameObject.Instantiate<BulletView>(bulletPrefab); BulletView.SetBulletController(this); BulletModel.SetBulletController(this); rigidBody = BulletView.GetComponent <Rigidbody>(); }
public void init(Tower t) { this.owner = t; var modelObject = GameObject.CreatePrimitive(PrimitiveType.Quad); // Create a quad object for holding the gem texture. model = modelObject.AddComponent <BulletModel>(); // Add a towerModel script to control visuals of the gem. model.transform.parent = transform.parent; model.init(this); }
public void setModel(BulletModel model) { bulletModel = model; bulletModel.Position .ObserveEveryValueChanged(x => x.Value) .Subscribe(xs => { transform.position = xs; }).AddTo(disposables); }
public BulletController(BulletModel bulletModel, BulletView bulletPrefab) { BulletView = GameObject.Instantiate <BulletView>(bulletPrefab); //Rigidbody instBulletRigidBody = BulletView.GetComponent<Rigidbody>(); //instBulletRigidBody.AddForce(Vector3.forward * TankModel.BulletSpeed); //Debug.Log("Speed "+TankModel.Speed); BulletModel = bulletModel; BulletView.InitBulletController(this); }
public TurretModel(float range, float fireRate, string prefabName, BulletModel bullet, int price) { _range = range; _fireRate = fireRate; _prefabName = prefabName; _bullet = bullet; _level = 1; _upgradeCoeff = 0.25f; _price = price; }
/// <summary> /// awake位置应当在屏幕外 /// </summary> void Awake() { Curve = new AnimationCurve(); bulletModel = new BulletModel() { Count = 6, Speed = 10, Angle = 60 }; GameObject bullet = Resources.Load <GameObject>("Prefabs/Bullet"); bulletPool = GameObjectPoolManager.Instance.CreatGameObjectPool <BasePool>("Prefabs/Bullet", bullet); }
public BulletFactory(Vector2 position) { View = GameObject.Instantiate( Refs.Instance.BulletViewPrefab, position, Quaternion.identity, Refs.Instance.Gameplay ); Model = new BulletModel(); Controller = new BulletController(Model, View); }