public GameObject GetArrow(GameObject shooter, GameObject target, int id = -1) { var arrowContainerObject = new GameObject(); arrowContainerObject.ConstructionStamp = "Arrow"; arrowContainerObject.Team = shooter.Team; arrowContainerObject.ID = id == -1 ? MechanicSingleton.Instance.GetNextObjectCountValue() : id; arrowContainerObject.CurrentFrame = AssetRepository.Instance.ArrowAnimations(arrowContainerObject.Scale).CurrentAnimatedRectangle.CurrentFrame; arrowContainerObject.UsedInPathing = false; arrowContainerObject.SetPhysics(new NonCollidingPhysics(arrowContainerObject, gameRef.Level.Bounds)); //arrow.SetRenderer(new RenderBase(arrow, AssetRepository.Instance.ArrowTexture, AssetRepository.Instance.ArrowAnimations)); arrowContainerObject.SetBrain(new ArrowBrain(arrowContainerObject, target)); arrowContainerObject.SetMover(new ProjectileMover(arrowContainerObject)); arrowContainerObject.SetSkills(new SkillsComponent(arrowContainerObject)); var arrowWeapon = new AlwaysAttackingWeapon(arrowContainerObject.Skills, arrowContainerObject); //DOTHIS figure out arrow sitch //arrowWeapon.EquipEffect(new BasicDamageEffect(durationMS: 250, damageRating: 25)); arrowWeapon.SetRenderer((new RenderBase(arrowWeapon, AssetRepository.Instance.ArrowTexture, AssetRepository.Instance.ArrowAnimations(arrowContainerObject.Scale)))); arrowContainerObject.EquipWeapon(arrowWeapon); arrowContainerObject.CurrentState = Constants.ACTOR_STATE_IDLE; arrowContainerObject.Position = shooter.Position; gameRef.container.AddObject(arrowContainerObject); return arrowContainerObject; }
public GameObject GetArrowTower(bool fromNetwork = false, int id = -1) { var tower = new GameObject(); tower.ConstructionStamp = "ArrowTower"; tower.Team = 0; tower.ID = id == -1 ? MechanicSingleton.Instance.GetNextObjectCountValue() : id; tower.CurrentFrame = AssetRepository.Instance.TowerAnimations(tower.Scale).CurrentAnimatedRectangle.CurrentFrame; tower.UsedInPathing = true; tower.SetPhysics(new CollidingPhysics(tower, gameRef.Level.Bounds)); tower.SetRenderer(new RenderBase(tower, AssetRepository.Instance.TowerTexture, AssetRepository.Instance.TowerAnimations(tower.Scale))); tower.SetBrain(new ArrowTowerBrain(tower, new TowerPlacingInput(gameRef, tower.PhysicsCollisionBox))); tower.SetSkills(new SkillsComponent(tower)); var emptyWeapon = new AlwaysAttackingWeapon(tower.Skills, tower); tower.EquipWeapon(emptyWeapon); if (fromNetwork) { tower.CurrentState = Constants.ACTOR_STATE_IDLE; } else { tower.CurrentState = Constants.ACTOR_STATE_PLACING; } tower.SetCombat(new CombatBase(tower)); gameRef.container.AddObject(tower); if (!fromNetwork) { NetCommander.CreatedObject(tower); } return tower; }