/** * @param initHealth * @param initShield * @param initEnergy * @param rechargeType * @param weaponType * @param ammoType */ public bool InitEnemy(int initLifes, float initHealth, float initShield, float initEnergy, CoreSystems.Energy.eRechargeTypes rechargeType, WeaponSystems.eWeaponTypes weaponType, Weapon.eAmmoTypes ammoType, bool autoShoting) { bool ret = true; ret = nesCoreSys.Init(initLifes, initHealth, initShield, initEnergy, rechargeType) && ret; ret = nesWeapSys.Init(weaponType, ammoType, autoShoting) && ret; return(ret); }
public void OnTriggerEnter(Collider other) { if (other.tag == "Boundary" || other.tag == "Shield") { // 1) ignore BOUNDARY --> boundary will destroy THIS after // OnTriggerExit of Destroy By Boundary script is called // 2) ignore SHIELD --> for unknown reason, shield is collieding // with the ship in the moment, when the shield is activated... return; } // player ship is hit by ENEMY BULLET if (other.tag == "Bullet") { // fail-safe float bullDamage = 20.0f; BulletController refBullCtrl = other.gameObject.GetComponent <BulletController>(); if (refBullCtrl != null) { bullDamage = refBullCtrl.nesBulletSys.GetDamageCollision(); } else { Debug.LogWarning("PLAYER >> Unable to obtain damage of bullet, which just hit the player..."); } // destroy enemy's bullet Destroy(other.gameObject); // show explosion caused by hit //Instantiate (refExplosionPlayer, transform.position, transform.rotation); bool isAlive = HitShip(bullDamage); // show actualized gui texts RuntimeContext.GetInst().StorePlayerCore(nesCoreSys.nesLifes.GetLifes(), nesCoreSys.nesHealth.GetHealth(), nesCoreSys.nesShield.GetShield()); // store flags for bonus generation into global context container RuntimeContext.GetInst().StorePlayerCoreMax(nesCoreSys.nesHealth.IsMaxHealth(), nesCoreSys.nesShield.IsMaxShield()); if (!isAlive) { PlayerDestruction(); } } // player ship is hit by BONUS else if (other.tag == "Bonus") { BonusController refBonCtrl = other.gameObject.GetComponent <BonusController>(); if (refBonCtrl != null) { if (refBonCtrl.bonusType == "Energy") { // recharge energy & show actualized gui texts RuntimeContext.GetInst().StorePlayerCoreEnergy( nesCoreSys.nesEnergy.RechargeEnergy(refBonCtrl.bonusValue), nesCoreSys.nesEnergy.actualRechargeType); } else if (refBonCtrl.bonusType == "Shield") { // shield was initialized properlly if (refShieldControll != null) { // activate shield's GameObject refShieldControll.gameObject.SetActive(true); // recharge shield & show actualized gui texts RuntimeContext.GetInst().StorePlayerCoreShield( nesCoreSys.nesShield.RechargeShield(refBonCtrl.bonusValue), nesCoreSys.nesShield.IsMaxShield()); } else { Debug.LogWarning("PLAYER >> Shield was not initialized properlly, no bonus added..."); } } else if (refBonCtrl.bonusType == "Health") { // recharge health & show actualized gui texts RuntimeContext.GetInst().StorePlayerCoreHealth( nesCoreSys.nesHealth.RechargeHealth(refBonCtrl.bonusValue), nesCoreSys.nesHealth.IsMaxHealth()); } else { Debug.Log("PLAYER >> Unknown bonus"); } //Debug.Log ("PLAYER >> Bonus >> " + refBonCtrl.bonusType + " >> +" + refBonCtrl.bonusValue + " units"); } // destroy bonus object Destroy(other.gameObject); } // else if (other.tag == "Weapon") { BonusController refBonCtrl = other.gameObject.GetComponent <BonusController>(); if (refBonCtrl != null) { bool anyChange = false; if (refBonCtrl.bonusType == "AmmoType") { bool ammoTypeOk = true; switch (refBonCtrl.bonusMode) { case "Advanced": // check, if `advanced` ammo type can be activated if (nesWeapSys.actualAmmoType == Weapon.eAmmoTypes.Better) { if (!nesWeapSys.Init(nesWeapSys.actualWeaponType, Weapon.eAmmoTypes.Advanced, false)) { ammoTypeOk = false; break; } anyChange = true; } break; case "Hardcore": // check, if `hardcore` ammo type can be activated if (nesWeapSys.actualAmmoType == Weapon.eAmmoTypes.Advanced) { if (!nesWeapSys.Init(nesWeapSys.actualWeaponType, Weapon.eAmmoTypes.Hardcore, false)) { ammoTypeOk = false; break; } anyChange = true; } break; case "Armagedon": // check, if `armagedon` ammo type can be activated if (nesWeapSys.actualAmmoType == Weapon.eAmmoTypes.Hardcore) { if (!nesWeapSys.Init(nesWeapSys.actualWeaponType, Weapon.eAmmoTypes.Armagedon, false)) { ammoTypeOk = false; break; } anyChange = true; } break; default: Debug.LogWarning("PLAYER >> Unknown Ammo Type"); break; } if (!ammoTypeOk) { // initialization of new ammo type failed... Debug.LogWarning("PLAYER >> Unable to initialize eAmmoTypes::" + refBonCtrl.bonusMode); } } else if (refBonCtrl.bonusType == "Weapon") { bool weaponSystemOk = true; switch (refBonCtrl.bonusMode) { case "ForwardBetter": // check, if `forward better` weapon type can be activated if (nesWeapSys.actualWeaponType == WeaponSystems.eWeaponTypes.ForwardBasic) { if (!nesWeapSys.Init(WeaponSystems.eWeaponTypes.ForwardBetter, Weapon.eAmmoTypes.Better, false)) { weaponSystemOk = false; break; } anyChange = true; } break; case "ForwardAdvanced": // check, if `forward advanced` weapon type can be activated if (nesWeapSys.actualWeaponType == WeaponSystems.eWeaponTypes.ForwardBetter) { if (!nesWeapSys.Init(WeaponSystems.eWeaponTypes.ForwardAdvanced, Weapon.eAmmoTypes.Better, false)) { weaponSystemOk = false; break; } anyChange = true; } break; case "DirectionalBasic": // check, if `directional basic` weapon type can be activated if (nesWeapSys.actualWeaponType == WeaponSystems.eWeaponTypes.ForwardAdvanced) { if (!nesWeapSys.Init(WeaponSystems.eWeaponTypes.DirectionalBasic, Weapon.eAmmoTypes.Better, false)) { weaponSystemOk = false; break; } anyChange = true; } break; default: Debug.LogWarning("PLAYER >> Unknown Weapon System"); break; } if (!weaponSystemOk) { // initialization of new weapon type failed... Debug.LogWarning("PLAYER >> Unable to initialize eWeaponTypes::" + refBonCtrl.bonusMode); } } if (anyChange) { if (!nesWeapSys.ActivateWeapons()) { Debug.LogError("PLAYER >> FAILED to activate weapon systems (!!)"); anyChange = false; } } if (anyChange) { // store current state of ship systems for next-time loading and bonus generation system RuntimeContext.GetInst().StorePlayerWeapon(nesWeapSys.actualWeaponType, nesWeapSys.actualAmmoType); } } else { Debug.LogError("PLAYER >> FAILED to obtain reference to `BonusController`"); } // destroy bonus object Destroy(other.gameObject); } // player ship is hit by ASTEROID or ENEMY SHIP else if (other.tag == "Asteroid" || other.tag == "Enemy") { bool isAlive = HitShip(GetCollisionDamageRate()); // show actualized gui texts RuntimeContext.GetInst().StorePlayerCore(nesCoreSys.nesLifes.GetLifes(), nesCoreSys.nesHealth.GetHealth(), nesCoreSys.nesShield.GetShield()); // store flags for bonus generation into global context container RuntimeContext.GetInst().StorePlayerCoreMax(nesCoreSys.nesHealth.IsMaxHealth(), nesCoreSys.nesShield.IsMaxShield()); if (!isAlive) { PlayerDestruction(); } } else { Debug.Log("PLAYER >> Something just hit the ship (!!) >> " + other.name); } }