/// <summary> /// 创建自定义的直线激光 /// <para>customizedName 自定义直线激光类名</para> /// <para>posX</para> /// <para>posY</para> /// <para>...自定义参数</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int CreateCustomizedLaser(ILuaState luaState) { int numArgs = luaState.GetTop() - 3; string customizedName = luaState.ToString(-3 - numArgs); float posX = (float)luaState.ToNumber(-2 - numArgs); float posY = (float)luaState.ToNumber(-1 - numArgs); EnemyLaser laser = ObjectsPool.GetInstance().CreateBullet(BulletType.Enemy_Laser) as EnemyLaser; laser.SetPosition(posX, posY); // 设置自定义的数据 BCCustomizedTask bc = laser.AddOrGetComponent <BCCustomizedTask>(); int funcRef = InterpreterManager.GetInstance().GetBulletInitFuncRef(customizedName); luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef); if (!luaState.IsFunction(-1)) { Logger.Log("InitFuncRef of " + customizedName + " is not point to a function"); } luaState.PushLightUserData(laser); // 将自定义参数push到栈上 for (int i = 0; i < numArgs; i++) { luaState.PushValue(-2 - numArgs); } luaState.Call(numArgs + 1, 0); // 将laser压入栈 luaState.PushLightUserData(laser); return(1); }
protected override void UpdateAttacking(float delta) { base.UpdateAttacking(delta); if (_currentTimeBetweenLaserShot > 0) { _currentTimeBetweenLaserShot -= delta; OrientEnemyToTarget(delta, PlayerVariables.LastPlayerPosition); } else if (_currentTimeBetweenLaserShot <= 0) { if (!_laserLaunchEffect.IsEmitting()) { _laserLaunchEffect.ActivateParticleEffects(); } _currentTimeLeftBeforeLaserShot -= delta; if (_currentTimeLeftBeforeLaserShot <= 0) { CheckAndLaunchLaserAttack(); _currentTimeLeftForLaserShot -= delta; if (_currentTimeLeftForLaserShot <= 0) { _currentLaser.DestroyLaser(); _currentLaser = null; _laserLaunched = false; _laserLaunchEffect.DeActivateParticleEffects(); ResetTimers(); } } } }
void OnTriggerEnter(Collider collider) { EnemyLaser laser = collider.gameObject.GetComponent <EnemyLaser>(); Upgrade upgrade = collider.gameObject.GetComponent <Upgrade>(); if (laser) { bullets--; if (bullets == 0) { Destroy(gameObject); GameObject deathExplosion = Instantiate(explosion, transform.position, Quaternion.identity) as GameObject; Destroy(deathExplosion, 1.0f); AudioSource.PlayClipAtPoint(explosionSound, transform.position); loseCanvas.SetActive(true); } } if (upgrade) { if (bullets < 3) { bullets++; } } }
/// <summary> /// 设置射线的长度 /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int SetLaserLength(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; float length = (float)luaState.ToNumber(-1); laser.SetLength(length); return(0); }
/// <summary> /// 设置射线发射源的尺寸 /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int SetLaserSourceSize(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; float size = (float)luaState.ToNumber(-1); laser.SetSourceSize(size); return(0); }
/// <summary> /// 射线关闭 /// <para>laser</para> /// <para>int duraiton 关闭时间</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int LaserTurnOff(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; int duration = luaState.ToInteger(-1); laser.TurnOff(duration); return(0); }
private BulletBase NewBullet(BulletType bulletID) { BulletBase bullet = null; Stack <BulletBase> _stack; // 判断对象池中是否有该类型的对象,如果有,则取出 if (_bulletsPool.TryGetValue(bulletID, out _stack)) { if (_stack.Count > 0) { bullet = _stack.Pop(); } } else { _stack = new Stack <BulletBase>(); _bulletsPool.Add(bulletID, _stack); } // 如果对象池内没有该对象,则创建 if (bullet == null) { switch (bulletID) { case BulletType.ReimuA_Sub1: bullet = new BulletReimuASub1(); break; case BulletType.Player_Laser: bullet = new PlayerLaser(); break; case BulletType.Player_Simple: bullet = new PlayerBulletSimple(); break; case BulletType.Enemy_Laser: bullet = new EnemyLaser(); break; case BulletType.Enemy_CurveLaser: bullet = new EnemyCurveLaser(); break; case BulletType.Enemy_Simple: bullet = new EnemySimpleBullet(); break; case BulletType.Enemy_LinearLaser: bullet = new EnemyLinearLaser(); break; default: Logger.Log("Create Bullet Fail! Invalid BulledId!"); break; } } return(bullet); }
public static int SetLaserCollisionFactor(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; float factor = (float)luaState.ToNumber(-1); luaState.Pop(2); laser.SetCollisionFactor(factor); return(0); }
/// <summary> /// 射线半展开 /// <para>laser</para> /// <para>int duraiton 展开时间</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int LaserTurnHalfOn(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; float toWidth = (float)luaState.ToNumber(-2); int duration = luaState.ToInteger(-1); laser.TurnHalfOn(toWidth, duration); return(0); }
EnemyLaser SpawnEnemyLaserLeft(EnemyLaser enemyLaser) { Vector3 spawnPos = (player.transform.position) + new Vector3(-spawnLaserDistance * Mathf.Sin(player.getAngle() * Mathf.Deg2Rad), spawnLaserDistance * Mathf.Cos(player.getAngle() * Mathf.Deg2Rad)); EnemyLaser e = Instantiate <EnemyLaser>(enemyLaser, spawnPos, Quaternion.identity); e.transform.Rotate(0, 0, player.getAngle() + 90); return(e); }
public static int SetLaserSize(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; float length = (float)luaState.ToNumber(-2); float width = (float)luaState.ToNumber(-1); laser.SetSize(width, length); return(0); }
public static int SetLaserExistDuration(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; int existDuration = luaState.ToInteger(-1); luaState.Pop(2); laser.SetLaserExistDuration(existDuration); return(0); }
public static int SetLaserAngle(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser; float angle = (float)luaState.ToNumber(-1); luaState.Pop(2); laser.SetRotation(angle); return(0); }
protected override void EndAttack() { base.EndAttack(); _currentLaser?.DestroyLaser(); _currentLaser = null; _laserLaunched = false; _laserLaunchEffect.DeActivateParticleEffects(); }
void OnTriggerEnter(Collider collider) { EnemyLaser eLaser = collider.gameObject.GetComponent <EnemyLaser>(); Upgrade upgrade = collider.gameObject.GetComponent <Upgrade>(); if (eLaser || upgrade) { Destroy(collider.gameObject); } }
/// <summary> /// 更改laser的alpha /// <para>laser</para> /// <para>toAlpha 变更到的alpha</para> /// <para>delay延迟执行的时间</para> /// <para>duration</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int ChangeLaserAlphaTo(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-4) as EnemyLaser; float toAlpha = (float)luaState.ToNumber(-3); int changeDelay = luaState.ToInteger(-2); int changeDuration = luaState.ToInteger(-1); laser.ChangeToAlpha(toAlpha, changeDelay, changeDuration); return(0); }
public static int SetLaserPos(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; float posX = (float)luaState.ToNumber(-2); float posY = (float)luaState.ToNumber(-1); luaState.Pop(3); laser.SetPosition(posX, posY); return(0); }
public static int SetLaserRotateParaWithOmega(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; float omega = (float)luaState.ToNumber(-2); int duration = luaState.ToInteger(-1); luaState.Pop(3); laser.DoRotateWithOmega(omega, duration); return(0); }
// Use this for initialization void Start() { map = GameObject.Find("Map").GetComponent <TileMap> ().map; steeringUtils = GetComponent <SteeringUtils> (); followPath = GetComponent <FollowPath> (); rb = GetComponent <Rigidbody2D> (); player = GameObject.Find("Player").transform; laser = GetComponentInChildren <EnemyLaser> (); sr = GetComponent <SpriteRenderer> (); }
protected override void RemoveEnemyFromWorld() { _laserLaunchEffect.DeActivateParticleEffects(); _currentLaser?.DestroyLaser(); _currentLaser = null; _laserLaunched = false; base.RemoveEnemyFromWorld(); }
public void FireLaser() { EnemyLaser laser = Instantiate(Resources.Load("Projectiles/EnemyLaser", typeof(EnemyLaser)) as EnemyLaser) as EnemyLaser; laser.transform.position = laserWeapon.position; laser.transform.LookAt(Player.Instance().transform.position); laser.transform.Find("Sprite").eulerAngles = Vector3.zero; laser.GetComponent <Rigidbody>().velocity = laser.transform.forward * laserSpeed; // laser.transform.parent = transform; timer = timeToFire; }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.GetComponent <EnemyLaser>()) { incoming = collision.gameObject.GetComponent <EnemyLaser>(); Debug.Log("Player HIT!!"); if (!invicible) { TakeDamage(); } } }
void OnTriggerEnter2D(Collider2D other) { EnemyLaser enemyLaser = other.GetComponent <EnemyLaser>(); if (enemyLaser) { TakeDamage(enemyLaser.GetDamage()); dmgParticles.transform.position = other.transform.position; dmgParticles.Play(); enemyLaser.Hit(); } }
public static int SetLaserGrazeDetectParas(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; GrazeDetectParas detectParas = new GrazeDetectParas() { type = GrazeDetectType.Rect, halfWidth = (float)luaState.ToNumber(-2), halfHeight = (float)luaState.ToNumber(-1), }; luaState.Pop(3); laser.SetGrazeDetectParas(detectParas); return(0); }
/// <summary> /// 设置激光的属性 /// <para>laser 激光本体</para> /// <para>posX</para> /// <para>posY</para> /// <para>angle 激光的角度,x正半轴为0,逆时针增加角度</para> /// <para>length 激光长度</para> /// <para>width 激光宽度</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int SetLaserProps(ILuaState luaState) { EnemyLaser laser = luaState.ToUserData(-6) as EnemyLaser; float posX = (float)luaState.ToNumber(-5); float posY = (float)luaState.ToNumber(-4); float angle = (float)luaState.ToNumber(-3); float length = (float)luaState.ToNumber(-2); float width = (float)luaState.ToNumber(-1); laser.SetPosition(posX, posY); laser.SetRotation(angle); laser.SetSize(width, length); luaState.PushLightUserData(laser); return(1); }
void OnTriggerEnter2D(Collider2D col) { EnemyLaser missile = col.gameObject.GetComponent <EnemyLaser>(); if (missile) { hp -= missile.GetDamage(); missile.Hit(); if (hp <= 0) { Die(); } } }
public static int SetLaserCollisionDetectParas(ILuaState luaState) { Logger.LogError("Try to call unused Method LuaLib:SetLaserCollisionDetectParas"); EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser; CollisionDetectParas detectParas = new CollisionDetectParas() { type = CollisionDetectType.Rect, halfWidth = (float)luaState.ToNumber(-2), halfHeight = (float)luaState.ToNumber(-1), }; luaState.Pop(3); //laser.SetCollisionDetectParas(detectParas); return(0); }
void FixedUpdate() { speed = Pilot.instance.speed - 10f; if (speed < 2f) { speed = 2f; } float angleDiff = Vector3.SignedAngle(transform.up, Pilot.instance.transform.position - transform.position, Vector3.up); if (Mathf.Abs(angleDiff) <= turnRate * Time.fixedDeltaTime) { transform.Rotate(new Vector3(0, angleDiff, 0), Space.World); } else if (angleDiff > 0) { transform.Rotate(new Vector3(0, turnRate * Time.fixedDeltaTime, 0), Space.World); } else { transform.Rotate(new Vector3(0, -turnRate * Time.fixedDeltaTime, 0), Space.World); } float dist = Vector3.Distance(transform.position, Pilot.instance.transform.position); if (dist > stoppingDistance) { transform.localPosition += transform.up * speed * Time.fixedDeltaTime; } if (dist <= shootingDistance) { fireAccumulator += Time.fixedDeltaTime; while (fireAccumulator >= 1f / fireRate) { fireAccumulator -= 1f / fireRate; if (Mathf.Abs(angleDiff) <= 4) { EnemyLaser newLaser = Instantiate(laser, gunPosition.position, Quaternion.LookRotation(transform.up, Vector3.up)); newLaser.GetComponent <Weapon>().caster = GetComponent <Damageable>(); } } } else { fireAccumulator = 0.0f; } }
void OnTriggerEnter2D(Collider2D col) { if (!peacePeriod) { EnemyLaser enemyLaser = col.gameObject.GetComponent <EnemyLaser> (); //Create a variable of enemyLaser when hit by one if (enemyLaser) { StartCoroutine(playerHitAnimation()); //Starts hit animation Destroy(col.gameObject); //Destroys laser LifeController.livesLeft--; //Reduces current lives after being hit StartCoroutine(playerPeaceWait()); PlayerPos = new Vector2((topRightWorldCoordinates.x / 2), transform.position.y); //Starting position of Player this.transform.position = PlayerPos; // ^^^^^^^^ } } }
private IEnumerator RandomLaserSpawn(EnemyLaser enemyLaser, float range1, float range2) { while (true) { SpawnEnemyLaserLeft(enemyLaser); yield return(new WaitForSeconds(Random.Range(range1, range2))); /* * SpawnEnemyLaserRight(enemyLaser); * yield return new WaitForSeconds(Random.Range(range1, range2)); * SpawnEnemyLaserTop(enemyLaser); * yield return new WaitForSeconds(Random.Range(range1, range2)); * SpawnEnemyLaserBottom(enemyLaser); * yield return new WaitForSeconds(Random.Range(range1, range2)); */ } }