Exemple #1
0
        private Ray JobSiteWasHitWithJobRay(ActorStrikeAlongRayAction rayStrike, Ray ray, JobSite intersectedSite)
        {
            BlockLoc locOfWork = new BlockLoc(rayStrike.getStrikeOrigen()
                                              + rayStrike.getStrikeDirectionNormal() * ((float)intersectedSite.intersects(ray) + .001f));

            jobSiteManager.acceptStrikeAt(locOfWork, rayStrike.getJobType());
            return(ray);
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        private void handleRayStrikeOnIslandBlocks(ActorStrikeAlongRayAction rayStrike, Ray ray)
        {
            switch (rayStrike.getJobType())
            {
            case JobType.mining:
                bool destroyedSomething = destroyBlockAlongRayReturnTrueIfSomethingDestroyed(ray);

                if (destroyedSomething)
                {
                    rayStrike.notifyThatActionHasDestroyedBlock();
                }
                break;

            case JobType.building:
                buildBlock(new BlockLoc((Vector3)getLastSpaceAlongRayInAndFromWorldSpace(ray)), rayStrike.getSelectedBlockType());
                rayStrike.notifyThatActionHasPlacedBlock();
                break;

            case JobType.CarryingSomething:
                switch (((ActorPlaceResourceAlongRay)rayStrike).getResourceType())
                {
                case ResourceBlock.ResourceType.standardBlock:
                    buildBlock(new BlockLoc((Vector3)getLastSpaceAlongRayInAndFromWorldSpace(ray)), rayStrike.getSelectedBlockType());
                    ((ActorPlaceResourceAlongRay)rayStrike).notifyThatActionHasPlacedResourceBlock();
                    break;

                case ResourceBlock.ResourceType.Wheat:

                    break;

                case ResourceBlock.ResourceType.Wood:
                    break;
                }
                break;
            }
        }
Exemple #4
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;
                }
            }
        }