コード例 #1
0
ファイル: Island.cs プロジェクト: HImports/IslandGame
        public void acceptWorkStrike(ActorStrikeAction actorStrikeAction)
        {
            if (actorStrikeAction.getStrikeType() == ActorStrikeAction.StrikeType.OnBlock)
            {
                ActorStrikeBlockAction strikeBlock = (ActorStrikeBlockAction)actorStrikeAction;
                handleStrikeEffectOnIsland(strikeBlock);
                jobSiteManager.acceptStrikeAt(strikeBlock.getStrikeTarget(), strikeBlock.getJobType());
            }
            else

            //NEEDS DISTANCE LIMITTING
            {
                ActorStrikeAlongRayAction rayStrike = (ActorStrikeAlongRayAction)actorStrikeAction;
                Ray     ray             = new Ray(rayStrike.getStrikeOrigen(), rayStrike.getStrikeDirectionNormal());
                JobSite intersectedSite = getJobSiteAlongRay(ray);
                Vector3?blockClicked    = getNearestBlockAlongRayInAndFromWorldSpace(ray);

                //figuring out what to do if both a block and site are along the ray
                if (blockClicked != null && intersectedSite != null)
                {
                    if (Math.Abs(Vector3.Distance((Vector3)blockClicked, rayStrike.getStrikeOrigen()) - (float)intersectedSite.intersects(ray)) < .01)
                    {
                        //block has been clicked
                        handleRayStrikeOnIslandBlocks(rayStrike, ray);
                    }
                    else if (Vector3.Distance((Vector3)blockClicked, rayStrike.getStrikeOrigen()) < (float)intersectedSite.intersects(ray))
                    {
                        //block has been clicked
                        handleRayStrikeOnIslandBlocks(rayStrike, ray);
                    }
                    else
                    {
                        //siteHasBeenClicked
                        ray = JobSiteWasHitWithJobRay(rayStrike, ray, intersectedSite);
                    }
                }
                else if (blockClicked != null)
                {
                    //block has been clicked
                    handleRayStrikeOnIslandBlocks(rayStrike, ray);
                }
                else if (intersectedSite != null)
                {
                    //site has been clicked
                    ray = JobSiteWasHitWithJobRay(rayStrike, ray, intersectedSite);
                }
            }
        }
コード例 #2
0
ファイル: IslandManager.cs プロジェクト: HImports/IslandGame
        public void acceptWorkStrike(ActorStrikeAction actorStrikeAction)
        {
            Island relevantIsland = getClosestIslandToLocation(actorStrikeAction.getStriker().getLocation());

            relevantIsland.acceptWorkStrike(actorStrikeAction);
        }
コード例 #3
0
        private void handleStrikeAction(ActorAction action)
        {
            ActorStrikeAction strikeAction = (ActorStrikeAction)action;

            if (strikeAction.getStrikeType() == ActorStrikeAction.StrikeType.OnBlock)
            {
                switch (strikeAction.getJobType())
                {
                case JobType.combat:
                    break;

                case JobType.agriculture:
                    islandManager.acceptWorkStrike((ActorStrikeAction)action);
                    SoundsManager.playSoundType(SoundsManager.SoundType.wheatRustling,
                                                ((ActorStrikeAction)action).getStriker().getLocation(), .3f);
                    break;

                case JobType.building:
                    placeBlock(((ActorStrikeBlockAction)action).getStrikeTarget(),
                               5);
                    break;

                case JobType.mining:
                    strikeAction.getStriker().setRotationWithGivenDeltaVec(strikeAction.getLookDeltaVec());
                    islandManager.acceptWorkStrike((ActorStrikeAction)action);
                    break;

                case JobType.logging:
                    strikeAction.getStriker().setRotationWithGivenDeltaVec(strikeAction.getLookDeltaVec());
                    islandManager.acceptWorkStrike((ActorStrikeAction)action);
                    //chopBlockAt(((ActorStrikeBlockAction)action).getStrikeTarget());
                    break;

                default:
                    throw new Exception("unhandled job type");
                }
            }
            else // is strike along ray
            {
                ActorStrikeAlongRayAction rayStrike = (ActorStrikeAlongRayAction)strikeAction;
                switch (strikeAction.getJobType())
                {
                case JobType.combat:

                    actorManager.handleStrike(rayStrike.getStriker(), rayStrike.getStrikeOrigen(),
                                              rayStrike.getStrikeDirectionNormal(), rayStrike.getStrikeDistance(), 1);
                    rayStrike.getStriker().StartStrikeAnimation();
                    break;

                case JobType.agriculture:
                    islandManager.acceptWorkStrike(rayStrike);
                    break;

                case JobType.building:
                    islandManager.acceptWorkStrike(rayStrike);
                    break;

                case JobType.mining:
                    islandManager.acceptWorkStrike(rayStrike);
                    break;

                case JobType.logging:
                    islandManager.acceptWorkStrike(rayStrike);
                    break;

                case JobType.CarryingSomething:
                    islandManager.acceptWorkStrike(rayStrike);
                    break;
                }
            }
        }