void OnCollisionEnter(Collision other) { AudioSource.PlayClipAtPoint(sound.clip, transform.position); Instantiate(brickParticle, transform.position, Quaternion.identity); float rnd = Random.Range(-1.0f, 3.0f); if (rnd < 0) { int powerIndex = (int)Random.Range(0.0f, 7.0f); switch (powerIndex) { case 0: power = GameManager.instance.fogPowerDown; break; case 1: power = GameManager.instance.gravityPullPowerDown; break; case 2: power = GameManager.instance.energyBarrierPowerUp; break; case 3: power = GameManager.instance.metalballPowerUp; break; case 4: power = GameManager.instance.turretPowerUp; break; case 5: power = GameManager.instance.sizeIncreasePowerUp; break; case 6: power = GameManager.instance.sizeDecreasePowerDown; break; } BasicPower bp = Instantiate(power, transform.position, Quaternion.identity).GetComponent <BasicPower>(); bp.SetDropDirection(transform.position.y <= 0 ? -1 : 1); } Destroy(gameObject); }
public static void Create() { BasicPower asset = ScriptableObject.CreateInstance <BasicPower> (); AssetDatabase.CreateAsset(asset, "Assets/NewWeaponObject.asset"); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; }
public bool usePower(int powerId, bool surpressError) { BasicPower power = powerHandler.getPower(powerId); if (power == null) { displayError("Power not found.", surpressError); return(false); } if (!powerHandler.isPowerReady(powerId) && powerId > 0) { displayError("Power not ready.", surpressError); return(false); } if (power.requiresTarget && target == null) { displayError("Power requires target.", surpressError); return(false); } if (!power.alwaysTargetSelf) { if (power.targetType == TARGET_TYPE.OTHERTEAM && target.team == team) { displayError("Power target not other team.", surpressError); return(false); } else if (power.targetType == TARGET_TYPE.MYTEAM && target.team != team) { displayError("Power target MY team.", surpressError); return(false); } if (!testDistanceToTarget(power.range)) { displayError("Power target not in range.", surpressError); return(false); } if (power.requiresLineOfSite && !testLineOfSightEnemy()) { displayError("Can't see target.", surpressError); return(false); } CmdUsePower(powerId, target.gameObject, this.gameObject); } else { CmdUsePower(powerId, this.gameObject, this.gameObject); } return(true); }
public void initialize(BasicPower payload, TargetableObject target, GameObject owner) { this.payload = payload; this.target = target; this.owner = owner; }
public void initialize(CombatHandler combatHandler, BasicPower power) { this.power = power; this.combatHandler = combatHandler; isInitialized = true; }
void CmdUsePower(int powerId, GameObject targetGameObject, GameObject attacker) { BasicPower power = powerHandler.getPower(powerId); //Debug.Log(this.name + " use power: " + power.weaponname); //target bool usedPower = true; if (power != null) { TargetableObject target = null; if (targetGameObject != null) { target = targetGameObject.GetComponent <TargetableObject>(); if (target != null) { if (target.isAlive()) { //May need to account for lag here. //Test vs location on timestamp. For now leave it. //if( testDistanceToTarget(power.range) && testLineOfSightEnemy() ) //{ //check within range? //even for instant, should I make it an object that is applied next frame? if (power.isInstant) { target.health.takeDamage(power.dmg, attacker); usedPower = true; } else { var bullet = (GameObject)Instantiate( power.bullet, firePoint.transform.position, firePoint.transform.rotation); Bullet bulletHandler = bullet.GetComponent <Bullet>(); bulletHandler.initialize(Object.Instantiate(power) as BasicPower, target, attacker); NetworkServer.Spawn(bullet); RpcSetBullet(bullet, targetGameObject); MovementHandler movementHandler = bullet.GetComponent <MovementHandler>(); movementHandler.moveToTarget(target.transform, bulletHandler.deliverPayload); //if( movementHandler!= null ) //{ //} //if(!isLocalPlayer) //bullet.GetComponent<MeshRenderer>().material.color = Color.blue; } //} } } } if (usedPower) { powerHandler.usePower(powerId); RpcUsePower(powerId); } //takeDamage } //check if power off cooldown? //apply // Create the Bullet from the Bullet Prefab /*var bullet = (GameObject)Instantiate( * bulletPrefab, * bulletSpawn.position, * bulletSpawn.rotation); * * // Add velocity to the bullet * bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 6; * * if(isLocalPlayer) * bullet.GetComponent<MeshRenderer>().material.color = Color.blue; * * // Spawn the bullet on the Clients * NetworkServer.Spawn(bullet); * * // Destroy the bullet after 2 seconds * Destroy(bullet, 2.0f);*/ }
bool testRange(BasicPower power) { return(false); }